机器人手把手教你工具AIlangchain4j(工具手把手教你机器人向量放入)「机器人矢量」

AI Agents,就是人工智能体
AI Agent(也称人工智能代理)是一种能够感知环境、进行决策和执行动作的智能实体
智能体像人一样,它有记忆、有逻辑分析能力、有任务的拆解能力、问题的拆解能力和最后综合回来统一解决问题的能力
记忆体的使用,参考我前面的文章:本文手把手教你使用langchain4j编写一个能够使用工具的agent聊天机器人
STEP0:基本环境准备和编程入门回顾,请参考我的AI文章系列AI编程之手把手教你使用langchain4j编写一个有记忆的聊天机器人AI编程之手把手教你使用JAVA语言编写大模型RAGAI编程之手把手教你使用langchain和postgresql向量库Python版AI编程之手把手教你使用postgresql向量数据库建设知识库JAVA版AI编程之手把手教你在CentOS安装Postgresql的Vector向量数据库STEP1:选一个例子下面是openai官网给出的一个例子,接下来我们模拟这个例子,调用chatgpt实现调用工具的例子
curl https://api.openai.com/v1/chat/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer $OPENAI_API_KEY" \-d '{"model": "gpt-4-turbo","messages": [{"role": "user","content": "What'\''s the weather like in Boston today?"}],"tools": [{"type": "function","function": {"name": "get_current_weather","description": "Get the current weather in a given location","parameters": {"type": "object","properties": {"location": {"type": "string","description": "The city and state, e.g. San Francisco, CA"},"unit": {"type": "string","enum": ["celsius", "fahrenheit"]}},"required": ["location"]}}}],"tool_choice": "auto"}'STEP2: 编写工具类我们先写一个工具类,用来给Langchain调用,获取某个城市的天气
其中Tool注解里写的是这个工具能够解决什么问题
public class WeatherToolsForLLM {@Tool("获取给定城市的天气情况")String getCurrentWeather(String cityName){return "leo说上海今天天气很好";}}STEP3: 编写一个简单的聊天机器人注意,我们在使用AiServices构建agent的时候,传入了tools参数public String chatWithTools(Integer userId,String chatMessage) {OpenAiChatModel chatModel = OpenAiChatModel.builder().baseUrl("https://xxx.xxx").apiKey("sk-1234567890abcdef").modelName("gpt-3.5-turbo").build();LLMAssistant agent = AiServices.builder(LLMAssistant.class).chatLanguageModel(chatModel).tools(new WeatherToolsForLLM())//注意这里.build();return agent.chat(userId,chatMessage);}STEP4: 跟踪代码,看看Langchain4j干了什么agent.chat(userId,chatMessage);会调用DefaultAiServices类的invoke方法,最终会调用OpenAiChatModel.generate方法,这个方法在构建request的时候,会把工具类放入request
OpenAiChatModel.generate(List<ChatMessage> messages, List<ToolSpecification> toolSpecifications){…….if (toolSpecifications != null && !toolSpecifications.isEmpty()) {requestBuilder.tools(toTools(toolSpecifications));}……..}我们看看request放入tools后变成什么样:可以看到在tools列表里放入了function相关的描述
STEP5: 跟踪代码,看看chatgpt怎么使用工具把工具类放入request后,Langchain4j会发送一次请求
chatgpt收到请求后,发现自己不知道上海现在的天气,于是查找工具列表,发现有一个工具可以获取给定城市的天气情况
于是,chatgpt返回一个调用工具的响应
我们看一下响应内容:可以看到response里,包含了一个ToolExecutionRequest,里面指明了要调用getCurrentWeather工具,且给定了参数cityName是ShangHai
说明chatgpt理解了我给出的问题,并正确的给出调用工具请求
STEP6: 跟踪代码,看看Langchain4j怎么使用工具收到chatgpt的响应后,Langchain4j发现响应是一个使用工具的响应
Langchain4j就会调用这个工具
然后把工具的输出,以及原始的问题放在一起,再次调用chatgpt
我们看一下第二次request的内容:STEP7:看看最终的效果使用Postman调用,看看效果:STEP8: 后续后续将使用Langchain和postgresql实现更多的CASE,敬请关注
作者简介:leo,互联网大厂AI架构师,欢迎微信、私信交流我的Dify AI case by case系列文章:dify.ai 学习 case by case 第一弹dify.ai 学习 case by case 第二弹,爆款小红书内容生成Agentdify.ai 学习 case by case 第三弹,调用dify的API运行流程dify.ai 学习 case by case 第四弹,复杂的case:用dify生成一篇论文
机器人手把手教你工具AIlangchain4j(工具手把手教你机器人向量放入)
(图片来源网络,侵删)

联系我们

在线咨询:点击这里给我发消息