Spring AI系列之Tool Calling 实战:3 种工具定义方式

Spring AI系列之Tool Calling 实战:3 种工具定义方式在 Spring AI 开发 AI Agent 的过程中 Tool Calling 工具调用 是最核心 最能体现 AI 智能化的能力 很多同学在实战时都会遇到这些问题 今天这篇就带着大家一次性吃透 Spring AI 3 种标准工具定义方式 全部是可直接复制运行的企业级代码 图文并茂 一看就会 环境 一 先看懂 Tool Calling 执行流程 图文秒懂 Tool

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



在 Spring AI 开发 AI Agent 的过程中,Tool Calling(工具调用) 是最核心、最能体现 AI 智能化的能力。 很多同学在实战时都会遇到这些问题:

今天这篇就带着大家一次性吃透 Spring AI 3 种标准工具定义方式,全部是可直接复制运行的企业级代码,图文并茂、一看就会!

环境:

一、先看懂:Tool Calling 执行流程(图文秒懂)

Tool Calling 的本质: 让大模型自主判断是否需要调用外部方法 → 自动调用 → 取回结果 → 自然语言回答

🔁 Tool Calling 标准执行流程图

流程步骤:

二、Spring AI 3 种工具定义方式(全文重点)

Spring AI 目前提供 3 种标准工具定义方式,覆盖 99% 开发场景:

方式 1:注解式 @Tool(最简单、企业最常用)

直接在普通 Java 方法上加 @Tool 注解,Spring AI 自动识别为可调用工具。

📦 代码示例
@Component public class TimeTools }
✅ 优点
🎯 适用场景

时间查询、天气查询、数据库操作、订单服务、消息推送等常规业务工具

方式 2:函数式工具 Function / BiFunction(官方推荐、极简)

这是 Spring AI 原生支持的优雅写法,也是官方文档重点推荐的方式。 不需要类、不需要注解,基于 JDK 函数式接口定义。

🧩 代码示例 1:编程式构建
// 定义入参、出参 record WeatherRequest(String city, String unit) {} record WeatherResponse(double temperature, String unit) {}

// 函数式接口 interface WeatherService extends Function {

@Override WeatherResponse apply(WeatherRequest request); 

}

@Test void testFunctionTool() {

// 构建函数式工具 ToolCallback tool = FunctionToolCallback.builder("currentWeather", new WeatherService() { @Override public WeatherResponse apply(WeatherRequest request) { return new WeatherResponse(25.5, request.unit()); } }) .description("获取指定城市的实时天气") .inputType(WeatherRequest.class) .build(); // 调用 String result = ChatClient.create(chatModel) .prompt("长沙今天天气怎么样?") .tools(tool) .call() .content(); System.out.println(result); 

}

🧩 代码示例 2:配置类 Bean 方式(企业推荐)
@Configuration public class AiToolConfig {

public static final String WEATHER_TOOL = "currentWeather"; @Bean(WEATHER_TOOL) @Description("获取指定城市的实时天气") public Function 
  
    
    
      currentWeather() { return request -> new WeatherResponse(30.0, request.unit()); } 
    

}

🚀 调用方式
@Test void testConfigFunctionTool() {

String content = ChatClient.create(chatModel) .prompt("今天长沙天气怎么样?") .toolNames(AiToolConfig.WEATHER_TOOL) .call() .content(); System.out.println(content); 

}

✅ 优点
🎯 适用场景

轻量工具、结构化工具、快速开发、企业级规范项目。

方式 3:编程式构建 ToolCallback(最灵活、底层)

完全手动构建工具:名称、描述、入参 Schema、执行体全部自己控制。 适合:动态工具、插件化、运行时注册、多租户场景

⚙️ 代码示例
// 计算器工具 public class CalcTools {

public Integer add(int a, int b) { return a + b; } 

}

@Test void testProgrammaticTool() {

// 反射获取方法 Method method = ReflectionUtils.findMethod(CalcTools.class, "add", int.class, int.class); // 手动定义工具元数据 ToolDefinition definition = ToolDefinition.builder() .name("add") .description("计算两个整数的和") .inputSchema(""" { "type": "object", "properties": { "a": { "type": "integer", "description": "第一个数字" }, "b": { "type": "integer", "description": "第二个数字" } }, "required": ["a", "b"] } """) .build(); // 构建 ToolCallback ToolCallback callback = MethodToolCallback.builder() .toolDefinition(definition) .toolMethod(method) .toolObject(new CalcTools()) .build(); // 调用 String content = ChatClient.builder(chatModel).build() .prompt("100 加 1000 等于多少?") .tools(callback) .call() .content(); System.out.println(content); 

}

✅ 优点
🎯 适用场景

动态工具、插件化 AI Agent、工作流、多租户、低代码平台。

三、3 种工具方式对比(一张表看懂)

一句话选择:

四、企业级**实践(必看)

五、总结

Spring AI Tool Calling 3 种标准工具定义方式

这一篇吃透,你就能轻松开发企业级 AI 智能体(Agent)!

小讯
上一篇 2026-04-19 07:23
下一篇 2026-04-19 07:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/269156.html