4. LangChain4j 之 Tools

前言

        大模型在解决问题时,是基于历史数据进行预测的,而且答案具有一定的随机性,它没办法拿到当前最新的数据.比如你问它 "今天是几号?","今日的热点新闻是什么?",大模型大概率是回答不上来。

        而LangChain4j的Tools机制就能够帮助大模型来获取到当前最新的数据。它允许大模型在必要时调用一个或多个可用的工具,这些工具通常由开发人员定义。工具可以是任何东西:Web搜索、对外部API的调用或特定代码段的执行等。LLMs实际上不能调用工具本身;相反,它们在响应中表达调用特定工具的意图(而不是以纯文本响应)。作为开发人员,我们应该使用提供的参数执行此工具,并报告工具执行的结果。

Tools执行流程

  执行流程,如下图:

  首先,当我们发送问题给大模型的时候,比如“今天是几号?”,大模型会响应一个结果给我们,这个结果不是问题的答案,而是大模型告诉我们需要执行哪个工具。我们执行工具后,才能得到问题的答案,但这个答案可能不太像人回复的,不太符合自然语言的样子,比如工具结果是“2024-07-13 11:23:00”,此时我们需要把问题,执行工具请求和工具执行结果一起发给大模型,得到最好的答案。

案例实践

Tools工具定义

定义工具需要3个信息

  • 工具名称
  • 工具的描述
  • 工具的参数及其说明

工具代码实现如下:

@Tool注解,定义此方法是一个工具,注解里面的注释,是工具的描述,方法参数是工具的参数,@P是参数的说明,当有多个参数的时候,我们可以通过@P进行微调,告诉大模型,这个参数的作用,以便大模型更好的理解我们的问题。

public class UserTools {

    @Data
    @AllArgsConstructor
    static class User {
        private String username;
        private Integer age;
    }
    @Tool("获取当前日期")
    public static String getCurrentDate() {
        return LocalDateTime.now().toString();
    }

    @Tool("获取指定日期注册的用户信息")
    public static List<User> getUserInfoByDate(@P("获取当前日期")String date) {
        System.out.println("接收到的date参数的值:" + date);
        User gorgor = new User("gorgor", 18);
        User fairy = new User("fairy", 18);
        return Lists.newArrayList(gorgor, fairy);
    }
}

代码测试

public class ToolsDemo {
    
    interface UserService {
        @SystemMessage("先获取具体日期,然后再解决用户问题")
        String getUserInfo(String desc);
    }

    public static void main(String[] args) {
        ChatLanguageModel chatModel = ZhipuAiChatModel.builder()
                .apiKey("智普apikey")
                .build();
        UserService userService = AiServices.builder(UserService.class)
                .chatLanguageModel(chatModel)
                .tools(new UserTools())
                .build();

        String userString = userService.getUserInfo("今天注册的用户信息");
        System.out.println(userString);
    }
}

执行结果:

根据您的询问,今天(2024年7月13日)注册的用户信息如下:

- 用户名:gorgor,年龄:18岁
- 用户名:fairy,年龄:18岁

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值