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": "北京"}
工具执行结果明天 北京 天气晴朗
最终结果:北京明天的天气将会是晴朗的。如果你有出行计划,可以放心安排,记得做好防晒措施哦!需要我为你提供更详细的天气信息吗?
5412

被折叠的 条评论
为什么被折叠?



