1、pom.xml
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<langchain4j.version>0.35.0</langchain4j.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.1</version>
</parent>
<dependencies>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>${langchain4j.version}</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-dashscope</artifactId>
<version>${langchain4j.version}</version>
<exclusions>
<exclusion>
<artifactId>slf4j-simple</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-dashscope-spring-boot-starter</artifactId>
<version>0.35.0</version>
</dependency>
</dependencies>
2、代码
Weather
import dev.langchain4j.agent.tool.P; import dev.langchain4j.agent.tool.Tool; public class Weather { @Tool("获取某一个具体城市的天气") public String getWeather(@P("指定的城市")String city) { return "明天 " + city + " 天气晴朗"; } }
WeatherToolDemo
import dev.langchain4j.agent.tool.ToolExecutionRequest; import dev.langchain4j.agent.tool.ToolSpecification; import dev.langchain4j.agent.tool.ToolSpecifications; import dev.langchain4j.data.message.AiMessage; import dev.langchain4j.data.message.ChatMessage; import dev.langchain4j.data.message.ToolExecutionResultMessage; import dev.langchain4j.data.message.UserMessage; import dev.langchain4j.model.chat.ChatLanguageModel; import dev.langchain4j.model.dashscope.QwenChatModel; import dev.langchain4j.service.tool.DefaultToolExecutor; import java.util.ArrayList; import java.util.List; import java.util.UUID; public class WeatherToolDemo { public static void main(String [] args) { // 构建模型 ChatLanguageModel model = QwenChatModel.builder() .apiKey("sk-3bfe0dfa79b94aa9b2d2da0a9286b9b1") .build(); // 指定ToolSpecification List<ToolSpecification> toolSpecifications = ToolSpecifications.toolSpecificationsFrom(Weather.class); // 构建对话消息 List<ChatMessage> chatMessages = new ArrayList<>(); UserMessage userMessage = UserMessage.from("北京的天气怎么样?"); chatMessages.add(userMessage); // 调用大模型,生成工具调用请求 AiMessage aiMessage = model.generate(chatMessages, toolSpecifications).content(); List<ToolExecutionRequest> toolExecutionRequests = aiMessage.toolExecutionRequests(); toolExecutionRequests.forEach(toolExecutionRequest -> { System.out.println("调用工具方法: " + toolExecutionRequest.name()); System.out.println("调用参数: " + toolExecutionRequest.arguments()); }); chatMessages.add(aiMessage); // 把工具请求以及工具的执行结果一起加入到对话消息队列表中 Weather weather = new Weather(); toolExecutionRequests.forEach(toolExecutionRequest -> { DefaultToolExecutor executor = new DefaultToolExecutor(weather, toolExecutionRequest); String result = executor.execute(toolExecutionRequest, UUID.randomUUID().toString()); System.out.println("工具执行结果" + result); ToolExecutionResultMessage resultMessage = ToolExecutionResultMessage.from(toolExecutionRequest, result); chatMessages.add(resultMessage); }); // 调用大模型,生成最终结果 AiMessage message = model.generate(chatMessages).content(); System.out.println("最终结果:" + message.text()); } }
3、验证结果
调用工具方法: getWeather
调用参数: {"city": "北京"}
工具执行结果明天 北京 天气晴朗
最终结果:北京明天的天气将会是晴朗的。如果你有出行计划,可以放心安排,记得做好防晒措施哦!需要我为你提供更详细的天气信息吗?