Explorar el Código

feat:实现toolCall功能;
自定义自己的tool,并配置到chatClient中允许LLM调用工具;

yangyi hace 7 meses
padre
commit
de448c6a29

+ 31 - 0
src/main/java/space/anyi/springAiAlibabaLearn/controller/ToolTestController.java

@@ -0,0 +1,31 @@
+package space.anyi.springAiAlibabaLearn.controller;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.ai.chat.client.ChatClient;
+import org.springframework.ai.chat.model.ChatModel;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import space.anyi.springAiAlibabaLearn.tool.MyTool;
+
+@RestController
+@RequestMapping("/tool")
+public class ToolTestController {
+    private static final Logger log = LoggerFactory.getLogger(ToolTestController.class);
+    public final ChatClient chatClient;
+
+    public ToolTestController(ChatModel chatModel) {
+        this.chatClient = ChatClient.builder(chatModel)
+                //配置LLM默认的tool,将自定义的tool配置chatClient中
+                .defaultTools(new MyTool())
+                .build();
+    }
+    @GetMapping("/test")
+    public String toolTest(@RequestParam("message")String message){
+        return chatClient.prompt(message)
+                .call()
+                .content();
+    }
+}

+ 24 - 0
src/main/java/space/anyi/springAiAlibabaLearn/tool/MyTool.java

@@ -0,0 +1,24 @@
+package space.anyi.springAiAlibabaLearn.tool;
+
+import org.springframework.ai.tool.annotation.Tool;
+import org.springframework.ai.tool.annotation.ToolParam;
+
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+
+public class MyTool {
+    /**
+     * 使用@Tool注解标注这是一个供LLM调用的tool
+     * @param zoneId 时区ID
+     * @return 当前时间的字符串
+     */
+    @Tool(name = "getLocalDateTimeByZoneId",description = "根据ZoneId获取当前的本地时间(格式为:yyyy-MM-dd HH:mm:ss z)")
+    public String getLocalDateTimeByZoneId(@ToolParam(description = "时区ID(ZoneId),例如:",required = true) String zoneId){
+        ZoneId zone = ZoneId.of(zoneId);
+        ZonedDateTime zonedDateTime = ZonedDateTime.now(zone);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
+        return zonedDateTime.format(formatter);
+
+    }
+}