首屏导读 · 本教程配套付费专栏 大模型工程师修炼手记19.9 元AI 编程 / Agent 实战 本文同主题系统课程· AI时代程序员的自我提升49.9 元AI 时代成长方法论。单篇不过瘾订阅解锁全量源码、实战与答疑文末附资料包领取方式 ↓这是一篇为你定制的 CSDN 风格技术博客主题围绕 Spring AI Alibaba 构建 A2A 多智能体协作系统从概念到代码实战手把手带你落地。Spring AI Alibaba 实战手把手教你构建 A2A 多智能体协作系统前言随着大模型应用从“单打独斗”走向“团队协作”多智能体协作已成为企业级 AI 落地的核心方向。Spring AI Alibaba 作为阿里云通义大模型与 Spring 生态的桥梁不仅提供了简洁的 API还天然支持Agent 工具调用这为实现 A2AAgent-to-Agent协作系统铺平了道路。本文将用一个完整实战项目带你从零搭建一个基于 Spring AI Alibaba 的A2A 多智能体系统实现智能客服主管 Agent 自动将任务分发给订单查询 Agent 和知识库 Agent并汇总结果返回用户。读完你将掌握如何用 Spring AI Alibaba 快速接入通义千问如何用Tool注解定义 Agent 工具如何设计“主管-子 Agent”的 A2A 协作模式如何让多个 Agent 通过 Function Calling 自动协作1. 什么是 A2A 多智能体协作A2A即 Agent-to-Agent指多个独立的 AI Agent 通过消息或工具调用进行交互共同完成一个复杂任务。每个 Agent 通常专注于特定领域订单 Agent擅长查询订单状态、物流信息知识 Agent擅长 FAQ、文档检索主管 Agent理解用户意图调度子 Agent合并结果在 Spring AI Alibaba 中我们可以利用Function Calling机制天然实现 A2A主管 Agent 将子 Agent 封装为“工具”模型根据用户问题自动决定调用哪个工具而工具内部又可以再次调用 LLM形成“Agent 调用 Agent”的协作链。2. 环境准备JDK 17Maven 3.8IntelliJ IDEA / VS Code阿里云 DashScope API Key免费申请本文使用 Spring AI Alibaba 1.0.0-M5 版本Spring Boot 3.2.5。3. 项目初始化创建 Spring Boot 项目在pom.xml中添加 Spring AI Alibaba Starter 和 Milestone 仓库parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.5/version/parentpropertiesjava.version17/java.versionspring-ai.version1.0.0-M5/spring-ai.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Spring AI Alibaba Starter --dependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter/artifactIdversion${spring-ai.version}/version/dependency/dependenciesrepositoriesrepositoryidspring-milestones/idnameSpring Milestones/nameurlhttps://repo.spring.io/milestone/url/repository/repositories4. 配置 application.ymlspring:ai:dashscope:api-key:${DASHSCOPE_API_KEY}# 你的 DashScope API Keychat:options:model:qwen-plus# 使用 qwen-plus 模型5. 定义子 Agent订单查询 Agent 与知识库 Agent我们将每个子 Agent 设计成一个 Spring Bean使用Tool注解暴露工具方法。这些方法会被主管 Agent 自动识别和调用。5.1 订单查询 Agentimportorg.springframework.ai.tool.annotation.Tool;importorg.springframework.ai.tool.annotation.ToolParam;importorg.springframework.stereotype.Component;ComponentpublicclassOrderAgent{Tool(description查询用户的订单信息根据用户ID返回最新订单详情)publicStringqueryOrder(ToolParam(description用户唯一标识)StringuserId){// 模拟数据库查询StringmockOrderString.format(用户%s的订单订单号20240623001商品《Spring AI实战》金额99.0元状态运输中,userId);returnmockOrder;}}5.2 知识库检索 Agentimportorg.springframework.ai.tool.annotation.Tool;importorg.springframework.ai.tool.annotation.ToolParam;importorg.springframework.stereotype.Component;ComponentpublicclassKnowledgeAgent{Tool(description根据关键词检索知识库中的常见问题解答)publicStringsearchFAQ(ToolParam(description检索关键词)Stringkeyword){// 模拟知识库检索StringfaqString.format(关于“%s”的FAQ1. 如何退货请在7天内联系客服2. 物流查询请提供订单号。,keyword);returnfaq;}}注解Tool来自 Spring AI描述工具功能ToolParam用于描述参数帮助模型更好地理解何时调用。6. 构建主管 Agent协调者主管 Agent 是整个系统的入口它基于通义千问模型能够自动将用户请求路由到不同的子 Agent 工具。我们创建一个配置类来组装主管 Agent 的ChatClient并注册所有子 Agent 工具。importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;ConfigurationpublicclassSupervisorAgentConfig{BeanpublicChatClientsupervisorChatClient(ChatClient.Builderbuilder,OrderAgentorderAgent,KnowledgeAgentknowledgeAgent){// 系统提示词指导主管 Agent 如何分工StringsystemPrompt 你是一个智能客服主管。根据用户问题选择合适的工具处理 - 如果用户询问订单、物流、购买记录使用 queryOrder 工具。 - 如果用户询问退货、退款、常见问题使用 searchFAQ 工具。 - 如果无法判断请礼貌地让用户补充信息。 最后整合工具返回的信息用自然语言回复用户。 ;returnbuilder.defaultSystem(systemPrompt).defaultTools(orderAgent,knowledgeAgent)// 注册工具.build();}}此时主管 Agent 就拥有了两个“手脚”可以自主决策调用哪个子 Agent。7. 实现 A2A 协作流程现在我们来编写一个 Controller接收用户消息并交给主管 Agent 处理。整个 A2A 协作流程如下用户发送消息 → 主管 Agent 接收主管 Agent 根据 system prompt 判断意图决定调用queryOrder或searchFAQSpring AI 框架自动执行对应的工具方法即子 Agent 处理工具返回结果 → 主管 Agent 再次整合并生成最终回答返回给用户importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.web.bind.annotation.*;RestControllerRequestMapping(/agent)publicclassChatController{privatefinalChatClientsupervisorClient;publicChatController(ChatClientsupervisorClient){this.supervisorClientsupervisorClient;}GetMapping(/chat)publicStringchat(RequestParamStringmessage){returnsupervisorClient.prompt().user(message).call().content();}}8. 测试验证启动应用使用浏览器或 Postman 访问以下接口观察主管 Agent 如何自动协作。测试1查询订单应调用 OrderAgentGET http://localhost:8080/agent/chat?message帮我查一下用户10086的订单预期响应用户10086的订单如下订单号20240623001商品《Spring AI实战》金额99.0元状态运输中。如有其他需要请随时联系我。测试2知识库问答应调用 KnowledgeAgentGET http://localhost:8080/agent/chat?message我想退货怎么操作预期响应关于退货的常见解答请在7天内联系客服办理退货。您可以提供订单号我将为您进一步处理。测试3模糊意图主管自行处理GET http://localhost:8080/agent/chat?message你好呀预期响应您好我是智能客服主管可以帮您查询订单、解答售后问题。请问有什么可以帮您通过日志你可以看到 Spring AI 在后台实际执行了工具调用多智能体协作一气呵成。9. 进阶让子 Agent 也拥有“大脑”上述例子中子 Agent 只是返回固定文本。但在真实场景中我们经常需要子 Agent 再次调用 LLM对结果进行加工。例如让订单 Agent 对原始订单数据做人性化润色。改进OrderAgentComponentpublicclassOrderAgent{privatefinalChatClientchatClient;publicOrderAgent(ChatClient.Builderbuilder){// 子Agent的专属ChatClient不注册任何工具仅做文本处理this.chatClientbuilder.build();}Tool(description查询用户的订单信息)publicStringqueryOrder(ToolParam(description用户ID)StringuserId){// 模拟查询到的原始订单数据StringrawData订单号20240623001商品《Spring AI实战》99元运输中;// 子Agent用LLM对原始数据生成更友好的回复returnchatClient.prompt().user(请将以下订单信息转换为更礼貌、完整的客服回复 rawData).call().content();}}这样主管 Agent 调用子 Agent 工具时子 Agent 内部又利用 LLM 做了一次智能加工形成了真正的 Agent 嵌套协作——这就是 A2A 的威力。10. 总结通过本文我们完成了一个基于 Spring AI Alibaba 的 A2A 多智能体协作系统使用Tool快速将服务封装为 Agent 工具利用ChatClient构建主管 Agent并注册子 Agent 工具模型自动根据意图调度子 Agent实现智能路由子 Agent 可内嵌 LLM形成多层智能协作Spring AI Alibaba 让多智能体开发变得像搭积木一样简单。你可以继续扩展更多专业 Agent数据分析 Agent、风控 Agent 等构建复杂的企业级 AI 协作平台。完整代码已整理到 GitHub链接请替换为你的实际地址欢迎 Star。参考资料Spring AI 官方文档Spring AI Alibaba 使用指南如果你觉得本文有帮助请点赞、收藏并关注后续我会带来更多 Spring AI Alibaba 深度实战hrefhttps://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-e1cc28b339.css relstylesheet hrefhttps://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-d1e89cace4.css relstylesheetAI 智能体本地部署实战OpenClaw 从环境搭建到避坑全攻略本地跑通你的 AI 代理一键订阅内容来源csdn.net作者昵称Tom·Ge原文链接https://blog.csdn.net/gedonshen/article/details/162263256作者主页https://blog.csdn.net/gedonshen标签#A2A #Agent #智能体 #MCP #AI协议确定要放弃本次机会福利倒计时::立减 ¥普通VIP年卡可用立即使用延伸阅读 · 我的付费专栏觉得这篇文章对你有帮助我把同类主题的系统化内容沉淀成了付费专栏欢迎订阅支持持续输出专栏定价内容大模型工程师修炼手记19.9 元AI 编程 / Agent 深度实战AI时代程序员的自我提升49.9 元AI 时代成长方法论本文配套代码 / 资料包欢迎在评论区留言「求代码」我会私信发送完整资源
企业数字化 ERP 产品动态
相关推荐
Baserow 文件上传与存储指南:从文件入库到访问控制 Baserow 文件上传与存储指南:从文件入库到访问控制 【免费下载链接】baserow Build databases, automations, apps & agents with AI — no code. Open source platform available on cloud and self-hosted. GDPR, HIPAA, SOC 2 compliant. Best Airtable alte… · 2026/9/26 2:56:36
ESP32全屋智能中枢实战:WiFi与BLE协同、硬件选型与OTA避坑指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 2:56:30
2026查重工具排行实测踩坑:千万级文本库校验的性能坑点梳理 上周运营妹子甩给我一张Excel表,说要做公司内容合规系统的底层校验模块,让我别光信网上传的2026查重工具排行,自己测了再上线。本来一开始我以为照着公开的参数拼几个主流接口,一周就能交付,结果头天测就给我整出个生产… · 2026/9/26 4:14:02
.NET桌面程序部署:Windows Desktop Runtime版本匹配与离线安装实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 4:14:02
S5 传感器+视觉系统集成实战:触发链路、时序预算与联合调试 S5 传感器视觉系统集成实战:触发链路、时序预算与联合调试
一、为什么零件都选对了,系统还是不稳
先看三个我真实遇到的现场:传感器型号、相机、光源全都按选型手册挑的,参数表一对全在规格内,但产线就是跑不顺。
现… · 2026/9/26 4:14:02
共聚焦显微镜针孔与NA优化:提高表面粗糙度与三维轮廓测量精度 微纳结构尺寸往下压,三维表面形貌测量的分辨率和景深成了硬瓶颈。焦外杂光一混进来,三维信息就糊掉。晶圆、锂电极片、精密光学件上,工业显微镜常常只有一张模糊图,微纳结构测量拿不到真实形貌。共聚焦显微镜三维表面测量… · 2026/9/26 4:14:02
外部类触发的角色状态切换:有限状态机设计模式与Unity实践 1. 状态切换,为什么非要“外部类”插手?做游戏角色逻辑的开发者,大概率都经历过这个阶段:角色类里塞了跑、跳、攻击、受伤、死亡一堆状态,每个状态里还在判断“我该不该切出去”。早期这么写确实简单,但随着… · 2026/9/26 4:13:56
从0到1的计网速成 物理层 比特 0 和 1,到底怎么从一台机器传到另一台机器?
在电脑内部,它只是二进制数据。但如果要通过网线发送出去,就不能把“0”和“1”这两个字符扔进网线。
所以物理层需要规定:用什么介质传?怎么表示0和1&am… · 2026/9/26 4:13:56
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46