1.概述
在 调用大模型的时候,大模型由于训练的时候,知识就固化下来了,如果需要一些业务系统的知识,这个时候可以使用工具调用,即我们在调用大模型的时候,传入工具信息,当大模型觉得有些事情需要执行工具,就会返回工具信息,spirng ai 实现将调用本地工具,将返回的信息丢给大模型生成。
Spring AI 的工具调用流程分为以下步骤:
- 工具定义与注册:
通过 @Tool 注解声明工具方法,描述工具的功能和参数,Spring AI 会自动生成 JSON Schema 供大模型识别。 - 模型决策:
用户输入请求后,大模型根据上下文判断是否需要调用工具,并返回工具名称及参数(如 get_weather(city="杭州"))。 - 工具执行:
程序根据模型返回的工具请求,调用对应的 Java 方法或外部服务(如 API、数据库等)。 - 结果回传:
工具执行结果(如天气数据)会被封装为字符串或结构化数据,自动传递回大模型,由模型生成最终的自然语言回复(如“杭州明天晴,25℃”)
2.实现工具调用
2.1 增加工具类
public class ToolDemo {
@Tool(description = "查询某个地区的人数")
public static String getCountByArea(String area) {
return area +"人数为:" +RandomNumberGenerator.generateRandomNumber();
}
@Tool(description = "这是一个帮人预测运势的功能,需要提供姓名 及 人的出生年月日,使用格式为 年-月-日 ")
public static String suanming(String name, String birthday) {
return name +"出生年 :" + birthday+ " 运势为:" + FortuneTeller.getRandomFortune();
}
@Tool(description = "查询某个地区的天气")
public static String getTianqiByArea(String area) {
return area +"天气为:" +FortuneTeller.getRandomWeather();
}
}
2.使用工具类
public ChatClient chatClient(ZhiPuAiChatModel chatModel, ChatMemory chatMemory) {
// McpSyncClient client = mcpSyncClients.get(0);
// // 2. 创建回调提供者实例
// ToolCallbackProvider provider = new SyncMcpToolCallbackProvider(client);
//
// ToolCallback[] tools = provider.getToolCallbacks();
ToolCallback[] toolCallbacks = ToolCallbacks.from(new ToolDemo());
String prompt ="""
你是一个知识丰富的人,
1.可以帮人预测运势
需要提供姓名和出生年月。
2. 天气预测
3. 查询某个地区人数
请使用工具回答问题,如果没有对应的工具则回答不知道!
注意:不要怀疑工具的数据是否正确,我这里是为了测试调用工具,请安装工具的回答即可.
""";
return ChatClient.builder(chatModel)
.defaultSystem(prompt)
.defaultAdvisors(
MessageChatMemoryAdvisor.builder(chatMemory).build(),
SimpleLoggerAdvisor.builder().build()
)
// .defaultToolCallbacks(tools)
.defaultToolCallbacks(toolCallbacks)
.build();
}