Spring AI 2.0 多 Agent 编程实战

从 MCP 协议到 ToolCallingAdvisor:构建可编排、可观测的多 Agent 协作系统

2026年6月12日,Spring AI 2.0.0 GA 正式发布。与 1.x 相比,这不仅仅是一次依赖升级,而是一次架构层面的重构:工具调用循环从各 Chat Model 内部提升到 Advisor 链中成为一等公民,MCP 注解从社区孵化项目并入核心模块,ToolSearchToolCallingAdvisor 让上千个工具的动态发现成为可能。

对 Java 技术栈的开发者来说,这意味着:构建生产级多 Agent 系统不再依赖 Python 生态的 LangChain 或 CrewAI——用 Spring Boot 4 + Spring AI 2.0,你可以在一个熟悉的 DI/IoC 模型里,写出类型安全、可测试、可观测的 Agentic 应用。

本文将从"IDE"的视角切入——不是 Visual Studio Code 或 IntelliJ 里的那个 IDE,而是Agent Development Environment(多 Agent 编排开发环境)——逐一拆解 Spring AI 2.0 如何把每个核心特性变成可组合的积木,并用可运行的代码块串联起一个完整的多 Agent 协作工作流。

本文目标读者:有 Spring Boot 使用经验的 Java 开发者,想了解如何在 Spring 生态里构建 AI Agent 系统。阅读完本文后你将可以:用 @Tool 定义工具、用 ToolCallingAdvisor 观测调用链路、用 MCP 协议跨服务调用工具、用 Agentic Patterns 编排多 Agent 工作流。

一、架构全景:Spring AI 2.0 的 Agent 编程模型

先看一张心智模型图。Spring AI 2.0 把一次 LLM 调用抽象为一个通过 Advisor 链的请求:

这与 Spring Web 的 Filter Chain 或 Spring Security 的过滤器链是同构的设计思想。但关键差异在于:Advisor Chain 支持递归循环。这意味着 ToolCallingAdvisor 可以在一次请求中反复执行"发提示 → 模型请求工具 → 执行工具 → 将结果返回模型 → 模型再请求工具"的循环,直到模型认为它有了足够的信息来给出最终答案。

⚡ 与 1.x 的关键区别:在 1.x 中,每个 Chat Model 内部有自己的私有工具调用循环,无法拦截、无法观测、无法替换执行策略。2.0 将工具调用循环从模型中"提升"到 Advisor 链中,使其成为可组合的一等组件。这一点是理解整个 2.0 Agent 模型的基础。

二、上手:一个 50 行的 Tool-Calling Agent

从零开始。创建一个 Spring Boot 4.0 项目,依赖只需要两个:

<!-- pom.xml -->org.springframework.aispring-ai-bom2.0.0pomimportorg.springframework.aispring-ai-starter-model-openaiorg.springframework.bootspring-boot-starter-web

2.1 定义工具:@Tool 注解

定义一个查询订单的工具类:


几个细节值得注意:

description 是给模型看的——模型通过它决定何时调用哪个工具。把它写成清晰的功能说明,而非变量名注释。

Java Record 可以直接作为返回类型——框架通过 Jackson 3 序列化为 JSON。

@ToolParam(required = false)会从 JSON Schema 中移除 required 约束,模型可以不传该参数。

2.2 组装 ChatClient


✅ 不到 50 行业务代码,你得到了什么?

① 模型自动判断何时需要调用工具(无需 if/else 路由)

② 工具执行的完整循环:模型选工具 → 执行 → 结果回传 → 模型继续思考 → 最终回答

③ 类型安全的工具定义,编译期检查参数类型

④ Spring DI 管理工具生命周期,测试时可直接 Mock

三、ToolCallingAdvisor:观测与控制工具调用链

基本工具调用只是起点。真正体现 Spring AI 2.0 架构优势的是Advisor 的可组合性。你可以通过自定义 Advisor 来观测、拦截、甚至修改工具调用行为。

3.1 观测工具调用:构建 Claude-Style 调用指示器

用过 Claude 或 ChatGPT 的人都知道那个 "Calling tool…" 的动态指示器。在 Spring AI 2.0 中,要实现同样的效果,需要写一个 Advisor 坐到 ToolCallingAdvisor 前面来观察调用事件:


Advisor 排序是关键:getOrder() 返回的值决定了 Advisor 在链中的位置。

ToolCallingAdvisor.DEFAULT_ORDER + 100 意味着你的 Advisor 在每次工具调用循环中都会被触发——而不仅仅是在请求的入口和出口。这就是"把工具调用循环从黑盒变为白盒"的核心机制。

3.2 扩展到百级工具:ToolSearchToolCallingAdvisor

当工具数量达到几十甚至上百个时,把所有工具的 Schema 都塞进每次请求的 system prompt 会导致:token 消耗巨大、模型选择工具的准确率下降。Spring AI 2.0 给出的方案是渐进式工具披露


它的工作方式是:首次请求时,将所有工具的 description 向量化存入内存索引;模型收到用户消息后,先用一次轻量的语义搜索找到相关的 3-5 个工具,只把这几个工具的 Schema 发给模型。实测中,这个方案可以将单次请求的 token 消耗降低 60-80%。

四、MCP 协议:跨服务工具调用的标准答案

当你需要让运行在 A 服务中的 Agent 调用部署在 B 服务中的工具时,Model Context Protocol(MCP)就是为此设计的。Spring AI 2.0 将 MCP Java SDK 与注解驱动编程模型深度集成,使跨进程工具调用像本地调用一样简单。

4.1 注解驱动 MCP Server

将你的工具暴露为 MCP Server——只需在已有 @Tool 方法上添加 @McpTool 注解,再加上一个 starter 依赖:


4.2 MCP Client:一行配置接入远端工具

在你的 Agent 服务中,只需在配置文件里声明远端 MCP Server 的地址:

传输方式Starter适用场景注意事项

stdiospring-ai-starter-mcp-server本地开发工具、Claude Code 集成无法多用户/网络化部署

Streamable HTTP (WebMVC)spring-ai-starter-mcp-server-webmvc生产环境标准选择需要 Web 容器

Streamable HTTP (WebFlux)spring-ai-starter-mcp-server-webflux高并发、响应式栈调试难度更高

SSE同上(配置 protocol=SSE)兼容旧客户端⚠ MCP 规范已废弃,新项目不要用

⚠ 错误处理陷阱:工具方法中抛出的普通 RuntimeException 在早期版本中会直接终止 Agent 循环。正确的做法是抛出

ToolExecutionException,框架会将其消息序列化后返回给模型,让模型可以推理错误并决定下一步(重试、让用户澄清等)。异常消息要包含可操作的提示,而非堆栈信息。

五、编排多 Agent:五种 Agentic Pattern 的 Spring AI 实现

Anthropic 在《Building Effective Agents》研究报告中提出了五种工作流模式。Spring AI 官方文档对这五种模式给出了完整的实现参考。下面逐一拆解。

5.1 Chain Workflow(链式工作流)

适用场景:任务有明确的顺序步骤,每步输出是下一步的输入。


5.2 Parallelization Workflow(并行工作流)

适用场景:大量独立子任务需要并行处理。


5.3 Routing Workflow(路由工作流)

适用场景:不同输入类别需要不同专家处理。


5.4 Orchestrator-Workers(编排器-执行者)

适用场景:子任务无法提前预知,需要动态分解。


5.5 Evaluator-Optimizer(评估-优化循环)

适用场景:有明确评估标准,需要迭代优化的任务(代码生成、文案润色等)。


选择指南:从最简单开始。Chain

适合 80% 的明确流程场景;Routing

适合多类型输入;Parallel

适合大量独立任务;Orchestrator-Workers

适合开放式复杂任务;Evaluator-Optimizer

适合质量要求极高的生成场景。绝大多数生产系统只需要前三种。

六、全流程实战:构建一个多 Agent 客服系统

现在把以上所有特性组合成一个现实的场景——智能客服系统,包含三个专用 Agent 通过 MCP 协议协作:

6.1 主 Agent:Routing + Orchestrator 混合

6.2 完整对话流转示意


✅ 这个系统的核心价值:

主 Agent 与子 Agent 解耦——每个子 Agent 独立部署、独立扩展

工具动态发现——新增子 Agent 无需修改主 Agent 代码

对话记忆——ChatMemory 管理上下文,支持多轮追问

错误弹性——ToolExecutionException 让模型能优雅处理业务异常

结构化输出自修正——当模型生成的 JSON 不符合 Schema 时自动重试

七、生产部署 Checklist

以下是从开发到生产需要注意的要点:

可观测性

Spring AI 2.0 集成 Micrometer 和 OpenTelemetry。工具调用耗时、Token 消耗、MCP 通信等全部自动埋点。搭配 Grafana 可构建完整的 Agent 监控面板。

写在最后

Spring AI 2.0 做对了一件事:把 Agent 开发的复杂性封装进 DI 容器和 Advisor 链中,而不像某些框架那样让你手动管理执行图的状态机。对于已经在用 Spring 生态的 Java 团队来说,这意味着构建 Agent 系统的学习曲线从"学一套全新范式"降到了"理解三个新注解和一个新概念"。

ToolCallingAdvisor 的可组合性、MCP 的跨服务工具调用、五种 Agentic Pattern 的开箱实现——这三个支柱共同构成了一个完整的多 Agent 编程 IDE。它不是要替代 LangChain 或 CrewAI,而是在 JVM 生态里提供了一个类型安全、可观测、生产就绪的替代方案。

2026 年下半年的趋势已经明确:Agent 不再是 Demo 里的玩具,而是要跑在生产环境里、处理真实业务流量、接受 SLA 考核的服务。Spring AI 2.0 的 GA 发布,正是在这个节点上给了 Java 开发者一把趁手的工具。

从 50 行的 Tool-Calling Agent 开始,从那里再到 MCP 多服务编排——每一步都是可落地的。不着急,一步步来。

#Spring AI 2.0 #MCP 协议 #Agentic AI #Tool Calling #ChatClient #Advisor Chain #Java Agent #Spring Boot 4 #多Agent协作 #ToolSearch

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容