ToolCallbackProvider 是 Spring AI 中用于提供工具回调的接口。本文将详细介绍其主要实现类及其使用场景。
版本说明:本文基于 Spring AI 1.1.0 版本编写,代码示例和 API 说明均基于此版本。随着框架的不断发展,部分 API 可能会有变化,建议参考 Spring AI 官方文档获取最新信息。
接口定义
public interface ToolCallbackProvider {
ToolCallback[] getToolCallbacks();
}
主要实现类
1. MethodToolCallbackProvider
用途:包装本地带有 @Tool 注解的方法,将其转换为工具回调。
包路径:org.springframework.ai.tool.method.MethodToolCallbackProvider
使用场景:
- 本地工具(同一应用内)
- 使用
@Tool注解的方法 - 需要将 Spring Bean 的方法暴露为工具
示例代码:
@Service
class WeatherService {
@Tool(description = "Get weather for a location")
String getWeather(@ToolParam(description = "City name") String city) {
return "Sunny, 25°C in " + city;
}
@Tool(description = "Get forecast")
String getForecast(@ToolParam String city, @ToolParam int days) {
return "Forecast for " + city " for " + days + " days";
}
}
// 配置 Bean
@Bean
MethodToolCallbackProvider weatherTools(WeatherService weatherService) {
return MethodToolCallbackProvider
.builder()
.toolObjects(weatherService) // 传入带有 @Tool 注解的对象
.build();
}
// 使用
ChatClient chatClient = ChatClient.builder(chatModel)
.defaultToolCallbacks(weatherTools)
.build();
特点:
- 自动扫描
@Tool注解的方法 - 支持多个工具对象
- 自动处理参数类型转换
- 与 Spring Bean 集成良好
Builder 方法:
MethodToolCallbackProvider.builder()
.toolObjects(object1, object2, ...) // 添加工具对象
.build();
2. SyncMcpToolCallbackProvider
用途:通过 MCP(Model Context Protocol)协议调用远程工具。
包路径:org.springframework.ai.mcp.SyncMcpToolCallbackProvider
使用场景:
- 远程工具(微服务架构)
- MCP 服务器提供的工具
- 需要跨服务调用工具
示例代码:
// 1. 创建 MCP 客户端
@Bean
McpSyncClient schedulerMcp() {
var mcp = McpClient
.sync(HttpClientSseClientTransport.builder("http://localhost:8081/").build())
.build();
mcp.initialize();
return mcp;
}
// 2. 创建 SyncMcpToolCallbackProvider
@Bean
SyncMcpToolCallbackProvider mcpToolProvider(McpSyncClient schedulerMcp) {
return SyncMcpToolCallbackProvider
.builder()
.mcpClients(schedulerMcp) // 传入 MCP 客户端
.build();
}
// 3. 使用
ChatClient chatClient = ChatClient.builder(chatModel)
.defaultToolCallbacks(mcpToolProvider)