Skip to content

Spring AI ToolCallbackProvider 实现类详解

2025-11-14

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)