Spring AI工具调用实战:第十个函数详解
spring-ai 的 tool 调用最佳实践
工具调用是 AI 应用中的核心交互模式,核心思路是让大模型与外部 API 或服务协同工作,从而突破其自身知识边界。例如,模型无法预知当天是否有新闻发布会,但通过工具调用,它能实时检索网络并将结果反馈给你。
这种模式主要解决两大问题:一是信息检索,即从外部数据源获取缺失的实时信息,比如最新新闻或股价;二是动作执行,比如自动提交表单、调用第三方 API 或执行系统命令。
两种集成方式
实现方式分为两类:方法工具与函数工具。以下对比表可帮你快速决策。
| 特性 | 方法工具 (@Tool) | 函数工具 (Function) |
|---|---|---|
| 核心注解/接口 | @Tool 注解 | java.util.function.Function 接口 |
| 实现复杂度 | 极简,仅需在 Bean 方法上添加 @Tool | 相对繁琐,需手动实现 Function 接口 |
| 状态管理 | 天然支持 Spring 依赖注入,可访问其他 Bean | 通常无状态,不适合复杂业务依赖 |
| 适用场景 | 有状态的业务逻辑、多服务协同 | 纯数据转换、无副作用计算 |
| 推荐度 | 高,符合 Spring 声明式编程习惯 | 低,仅用于极简场景 |
一句话:方法工具只需 @Tool 注解即可完成注册;函数工具需要手动实现接口,维护成本高且难以管理状态。因此,优先选择方法工具。
核心价值与安全模型
模型如何知道调用哪个工具并生成参数?关键在于职责分离:
- 模型负责决策:LLM 解析用户意图,判断应调用哪个工具,并生成对应参数。
- 应用负责执行:Spring AI 应用接收调用请求,安全执行 Java 方法,并将结果返回模型。
- 安全隔离:模型始终无法直接访问数据库、API 密钥等内部资源,确保系统安全。
这种分层设计清晰划分了风险与复杂度。模型只负责“思考”,应用只负责“执行”,双方互不越界。
通过聊天获取最新新闻
例如,你想了解当日最新新闻,直接向模型提问即可。底层实现是调用新闻 API 拉取实时数据,再由模型整理成自然语言回复。需注意,新闻 API 需自行选择(如公开的新闻聚合接口)。
源码示例
代码中关键参数字段为 tool。若模型未能匹配到对应工具,则自动跳过,直接使用 LLM 自身知识进行回答——确保流程不中断。
图片说明
LLM 选择模型:glm-4-plus
完整链路:LLM 通过关键字匹配,优先执行 tool 进行数据库查询,再经 LLM 优化结果




