文章目录
一、调用流程

二、代码
tool包下的TimeTools.java类
java
package org.example.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 TimeTools {
@Tool(description = "通过时间id获取当前时间")
public String getTimeByZoneId(@ToolParam(description = "时区id,比如 Asia/Shanghai") String zoneId) {
ZoneId zid = ZoneId.of(zoneId);
ZonedDateTime zoneDateTime = ZonedDateTime.now(zid);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
return zoneDateTime.format(formatter);
}
}
controller.ZhipuChatClientController.java
java
@RestController
@RequestMapping("/chatClient")
public class ZhipuChatClientController {
private final ChatClient chatClient;
public ZhipuChatClientController(ChatClient.Builder builder) {
this.chatClient = builder
.defaultTools(new TimeTools())
.build();
}
@GetMapping("/simple")
public String simple(@RequestParam(name = "query") String query) {
ZhiPuAiChatOptions chatOptions = new ZhiPuAiChatOptions();
chatOptions.setModel("glm-4-flash");
chatOptions.setTemperature(0.0);
chatOptions.setMaxTokens(15536);
return chatClient.prompt()
.system("你是一个有用的AI助手")
.user(query)
.options(chatOptions)
.call().content();
}
}
三、效果
加了Tool Calling前

加了Tool Calling后

四、底层调用情况
Spring AI会在发送给大模型的请求体中添加所有tool的工具信息

大模型返回给Spring AI的信息中,指出调用具体的工具名称及参数

SpringAI调用工具后返回的结果
