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 的方法暴露为工具
示例代码:
@Serviceclass 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@BeanMethodToolCallbackProvider 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 客户端@BeanMcpSyncClient schedulerMcp() { var mcp = McpClient .sync(HttpClientSseClientTransport.builder("http://localhost:8081/").build()) .build(); mcp.initialize(); return mcp;}
// 2. 创建 SyncMcpToolCallbackProvider@BeanSyncMcpToolCallbackProvider mcpToolProvider(McpSyncClient schedulerMcp) { return SyncMcpToolCallbackProvider .builder() .mcpClients(schedulerMcp) // 传入 MCP 客户端 .build();}
// 3. 使用ChatClient chatClient = ChatClient.builder(chatModel) .defaultToolCallbacks(mcpToolProvider)