首页 » 软件开发 » AI编程之手把手教你使用langchain4j写一个使用工具的聊天机器人(工具手把手教你调用编程机器人)

AI编程之手把手教你使用langchain4j写一个使用工具的聊天机器人(工具手把手教你调用编程机器人)

admin 2024-07-24 12:25:18 0

扫一扫用手机浏览

文章目录 [+]

记忆体的使用,参考我前面的文章:

本文手把手教你使用langchain4j编写一个能够使用工具的agent聊天机器人。

STEP0:基本环境准备和编程入门回顾,请参考我的AI文章系列

AI编程之手把手教你使用langchain4j编写一个有记忆的聊天机器人

AI编程之手把手教你使用langchain4j写一个使用工具的聊天机器人(工具手把手教你调用编程机器人) 软件开发
(图片来自网络侵删)

AI编程之手把手教你使用JAVA语言编写大模型RAG

AI编程之手把手教你使用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 第二弹,爆款小红书内容生成Agent

dify.ai 学习 case by case 第三弹,调用dify的API运行流程

dify.ai 学习 case by case 第四弹,复杂的case:用dify生成一篇论文

标签:

相关文章

语言中的借用,文化交融的桥梁

自古以来,人类社会的交流与发展离不开语言的传播。在漫长的历史长河中,各民族、各地区之间的文化相互碰撞、交融,产生了许多独特的语言现...

软件开发 2025-01-01 阅读1 评论0

机顶盒协议,守护数字生活的新卫士

随着科技的飞速发展,数字家庭逐渐走进千家万户。在这个时代,机顶盒成为了连接我们与丰富多彩的数字世界的重要桥梁。而机顶盒协议,作为保...

软件开发 2025-01-01 阅读1 评论0

语言基础在现代社会的重要性及方法步骤

语言是人类沟通的桥梁,是社会发展的基础。语言基础作为语言学习的基石,对于个人、社会乃至国家的发展具有重要意义。本文将从语言基础在现...

软件开发 2025-01-01 阅读2 评论0

粤语电影,传承文化,点亮时代之光

粤语电影,作为中国电影产业的一朵奇葩,以其独特的地域特色、丰富的文化内涵和鲜明的艺术风格,赢得了广大观众的喜爱。本文将从粤语电影的...

软件开发 2025-01-01 阅读3 评论0

苹果游戏语言,塑造未来娱乐体验的基石

随着科技的飞速发展,游戏产业逐渐成为全球娱乐市场的重要支柱。在我国,游戏产业更是蓬勃发展,吸引了无数玩家和投资者的目光。而在这其中...

软件开发 2025-01-01 阅读1 评论0