🏆本文收录于《滚雪球学SpringBoot 3.x》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。 该专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。 若还想学习更多,可直接订阅 《Spring Boot实战合集》,一次订阅,持续学习,后续更新内容无需重复付费,适合长期收藏与系统进阶。
演示环境说明:
- 开发工具:IDEA 2021.3
- JDK版本: JDK 17(推荐使用 JDK 17 或更高版本,因为 Spring Boot 3.x 系列要求 Java 17,Spring Boot 3.5.4 基于 Spring Framework 6.x 和 Jakarta EE 9,它们都要求至少 JDK 17。)
- Spring Boot版本:3.5.4(于25年7月24日发布)
- Maven版本:3.8.2 (或更高)
- Gradle:(如果使用 Gradle 构建工具的话):推荐使用 Gradle 7.5 或更高版本,确保与 JDK 17 兼容。
- 操作系统:Windows 11
全文目录:
-
- 一、为什么这一篇值得认真学?
- 二、先把基础打牢:Spring Boot 3.x 对这类项目意味着什么?
-
- 2.1 Spring Boot 3.x 的核心技术基线
- 2.2 为什么 Tool Calling 场景尤其适合 Spring Boot 3.x
- 三、什么是 Tool Calling:先把概念讲透?
-
- 3.1 Tool Calling 不是“让模型直接操作数据库”
- 3.2 一个完整的 Tool Calling 调用链路
- 四、本文实战项目要做成什么样
-
- 4.1 项目架构图
- 五、项目环境与目录结构
-
- 5.1 技术栈说明
- 5.2 Maven 依赖
-
- 代码解析
- 5.3 目录结构
- 六、配置先行:把“工具暴露边界”写进配置文件
-
- 6.1 application.yml
-
- 代码解析
- 6.2 配置绑定类
- 6.3 启动类启用配置绑定
-
- 代码解析
- 七、统一模型:把“工具调用”抽象成稳定的数据结构
-
- 7.1 聊天请求与响应对象
-
- 代码解析
- 7.2 工具调用请求对象
- 7.3 工具执行结果对象
- 7.4 三个工具的参数对象
-
- 库存查询参数
- 订单查询参数
- 天气查询参数
- 代码解析
- 八、定义工具元信息:名称、描述、风险等级,一个都不能少
-
- 8.1 风险等级枚举
- 8.2 工具定义对象
- 8.3 当前用户上下文
- 8.4 权限判定结果
-
- 代码解析
- 九、工具执行器接口:用统一抽象接住所有工具
-
- 9.1 ToolExecutor 接口
-
- 代码解析
- 十、工具注册表:让系统按名称查到具体工具
-
- 10.1 ToolRegistry 实现
-
- 代码解析
- 十一、参数解析与校验:绝不能直接相信模型给的参数
-
- 11.1 ToolArgumentResolver 实现
-
- 代码解析
- 十二、权限边界:模型能提议,系统来裁决
-
- 12.1 PermissionService 实现
-
- 代码解析
- 十三、审计日志:Tool Calling 不是黑盒,一定要留痕
-
- 13.1 审计记录对象
- 13.2 ToolAuditService 实现
-
- 代码解析
- 十四、模型客户端:这里先用 Mock,但设计思路要对
-
- 14.1 MockModelClient 实现
-
- 代码解析
- 十五、配置 WebClient:模拟调用外部业务系统
-
- 15.1 WebClientConfig
-
- 代码解析
- 十六、三个工具执行器:库存、订单、天气
-
- 16.1 库存查询工具
-
- 代码解析
- 16.2 订单查询工具
-
- 代码解析
- 16.3 天气查询工具
-
- 代码解析
- 十七、模拟外部业务系统:让整个 Demo 可以本地跑通
-
- 17.1 MockExternalApiController
-
- 代码解析
- 十八、总编排服务:整个 Tool Calling 链路的心脏
-
- 18.1 ToolOrchestratorService 实现
-
- 代码解析
- 十九、对外统一接口:把 Tool Calling 暴露成一个聊天入口
-
- 19.1 ChatController
- 19.2 审计接口
-
- 代码解析
- 二十、全局异常处理:别让错误堆栈直接暴露给前端
-
- 20.1 GlobalExceptionHandler
-
- 代码解析
- 二十一、如何运行这个项目
-
- 21.1 启动命令
- 21.2 测试用例一:查询库存
-
- 预期效果说明
- 21.3 测试用例二:查询订单
-
- 预期效果说明
- 21.4 测试用例三:查询天气
-
- 预期效果说明
- 21.5 测试用例四:模型想取消订单,但系统不开放
-
- 预期效果说明
- 二十二、为什么“模型会调用,不代表应该放开调用”?
-
- 22.1 模型天然存在不确定性
- 22.2 读工具与写工具必须分层
- 22.3 模型侧开放能力,应该是“白名单”而不是“黑名单”
- 22.4 除了“能不能调”,还要考虑“何时调、调几次、调完给谁看”
- 二十三、Tool Schema 应该怎么设计?
-
- 23.1 建议的 Schema 设计原则
- 二十四、从 Demo 到生产:你还需要补哪些能力
-
- 24.1 超时、重试与熔断
- 24.2 限流与防滥用
- 24.3 幂等与写保护
- 24.4 多租户与数据隔离
- 24.5 观测指标与告警规则
- 二十五、进一步扩展:如果接入 Spring AI,该怎么理解
-
- 25.1 本文结构与 Spring AI 的映射关系
- 25.2 一个非常重要的认知
- 二十六、这一套设计为什么适合专栏读者循序渐进学习?
- 二十七、常见误区与避坑建议
-
- 27.1 误区一:把模型输出当作可信输入
- 27.2 误区二:把所有工具一股脑开放给模型
- 27.3 误区三:只做前置鉴权,不做结果脱敏
- 27.4 误区四:在 Controller 里堆所有逻辑
- 27.5 误区五:没有审计与观测
- 27.6 误区六:工具设计过于粗糙
- 二十八、把本文 Demo 再向前推进一步:你可以怎么练习
-
- 28.1 练习一:给库存工具加仓库枚举校验
- 28.2 练习二:给订单工具加租户校验
- 28.3 练习三:给天气工具增加缓存
- 28.4 练习四:给工具执行加耗时统计
- 28.5 练习五:新增一个高风险写工具,但要求人工确认
- 二十九、全文回顾:你到底学会了什么?
- 三十、结语:真正的 AI 集成,不在于“能调工具”,而在于“调得住工具”
- 附录:本文示例的完整调用流程小结图
- 🧧 学习福利 · 限时开放 🧧
- 🫵 Who am I?
一、为什么这一篇值得认真学?
很多人一提到 AI 与业务系统集成,第一反应就是“接个大模型 API,再让它自动帮我查订单、查库存、查天气”。这当然没错,但真正落地时你很快会发现,问题远远不是“能不能调用工具”这么简单,而是下面这些更现实的问题:
第一,模型生成的参数未必可信。模型可能把 SKU-1001 写成 SKU1001,也可能把订单号字段名写错,更可能在没有权限的情况下试图访问敏感工具。
第二,业务系统不是玩具。库存系统、订单系统、物流系统、营销系统、结算系统,它们都有各自的 API 规范、权限模型、响应格式、超时策略和审计要求。AI 只是“入口”,Spring Boot 才是“中控台”。
第三,模型“会调用”不代表“应该放开调用”。一个模型即便具备调用取消订单、修改价格、退款审批等工具的能力,也不代表你就应该让它直接做。只要涉及写操作、资金、用户隐私、合规边界,就必须让系统对调用权限、调用场景、参数合法性和审批流程进行二次收口。
所以,真正成熟的 Tool Calling 方案,核心并不是“模型多聪明”,而是你的业务系统有没有建立一套可靠的调用治理框架。这个治理框架,放在 Spring Boot 3.x 里来实现,恰恰非常合适。
因为 Spring Boot 3.x 有几个特别适合这类场景的优势:
- 它建立在 Spring Framework 6 之上,天然适配 Jakarta EE 新命名空间。
- 它以 Java 17+ 为技术基线,语言特性和运行时能力更现代。
- 它在配置绑定、校验、可观测性






