package xyz.wbsite.ai; import dev.langchain4j.agent.tool.P; import dev.langchain4j.agent.tool.Tool; 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.request.ChatRequest; import dev.langchain4j.model.chat.request.ChatRequestParameters; import dev.langchain4j.model.chat.response.ChatResponse; import dev.langchain4j.service.tool.DefaultToolExecutor; import dev.langchain4j.service.tool.ToolExecutor; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.function.Consumer; /** * Tool调用基本用法,需要自行实现AI回调消息 */ public class Base_Tool_Example { public static void main(String[] args) { // 初始化消息列表 List chatMessages = new ArrayList<>(); chatMessages.add(UserMessage.from("请问,泰州市的天气怎么样?")); // 定义工具 Object weatherTools = new Object() { @Tool("返回某一城市的天气情况") public String getWeather(@P("应返回天气预报的城市") String city) { return "天气阴转多云,1~6℃"; } }; List toolSpecifications = ToolSpecifications.toolSpecificationsFrom(weatherTools); // 构建请求 ChatRequest chatRequest = ChatRequest.builder() .messages(chatMessages) .parameters(ChatRequestParameters.builder() .toolSpecifications(toolSpecifications) .build()) .build(); // 调用LLM ChatResponse chatResponse = Helper.getToolChatModel().chat(chatRequest); AiMessage aiMessage = chatResponse.aiMessage(); chatMessages.add(aiMessage); // 判断是否需要调用工具 if (aiMessage.hasToolExecutionRequests()) { System.out.println("LLM决定调用工具"); System.out.println(chatResponse.aiMessage()); List toolExecutionRequests = chatResponse.aiMessage().toolExecutionRequests(); toolExecutionRequests.forEach(new Consumer() { @Override public void accept(ToolExecutionRequest toolExecutionRequest) { ToolExecutor toolExecutor = new DefaultToolExecutor(weatherTools, toolExecutionRequest); String result = toolExecutor.execute(toolExecutionRequest, UUID.randomUUID().toString()); ToolExecutionResultMessage toolExecutionResultMessages = ToolExecutionResultMessage.from(toolExecutionRequest, result); chatMessages.add(toolExecutionResultMessages); } }); } // 再次调用LLM ChatRequest chatRequest2 = ChatRequest.builder() .messages(chatMessages) .parameters(ChatRequestParameters.builder() .toolSpecifications(toolSpecifications) .build()) .build(); // 返回最终回答 ChatResponse finalChatResponse = Helper.getToolChatModel().chat(chatRequest2); System.out.println(finalChatResponse.aiMessage().text()); } }