DeepAgents+MCP+A2A+Skills:多智能体系统从入门到生产实战
这几年做AI应用我最大的感受是单个模型再聪明也扛不住真实业务的复杂度。真正把效率拉满的反而是把任务拆开、让多个Agent各干各的再用一套统一的协议把工具和协作串起来。DeepAgents MCP A2A Skills这套组合就是目前我认为最值得投入的落地路线。它不是某个单一框架而是一整套从“思考”到“执行”再到“协作”的工程化方案。这篇文章我打算把整个实战过程的关键节点都拆开讲一遍按21章的路线图走先看清四个组件各自负责什么再逐个把手配置MCP Server、写Skills、搭A2A通信最后用一个“需求到代码”的完整案例把整条流水线串起来。适合正在做AI应用落地、想把多智能体系统从Demo推向生产的开发者、架构师也适合对Agent工程化还停留在“只会调Prompt”阶段的同学。1. 整体设计思路拆解为什么是这四个组件1.1 四个组件各司其职谁也不抢谁的活很多人第一次接触DeepAgents、MCP、A2A、Skills的时候第一反应都是这不都是Agent吗有啥区别我刚开始也懵后来在项目里被坑过几轮才慢慢总结出一个比较好记的分工方式。DeepAgents执行体/编排层负责理解任务、规划步骤、调度子Agent是整套系统的“大脑”。它决定下一步该让谁干活、干完怎么检查结果。MCP模型上下文协议统一Agent和外部工具的连接方式。Figma、蓝湖、Playwright、Blender、GitHub、数据库这类外部能力全部通过MCP Server暴露给Agent。A2AAgent-to-Agent协议解决Agent之间的“对话”问题。多个Agent互相发现、互相投递任务、传递中间产物靠的就是A2A。Skills技能包把某个场景下的高频动作固化成可复用的“操作手册”让Agent通过语义索引直接调用而不是每次都在Prompt里重新写一遍。我常用的类比是把它看成一家外包公司DeepAgents是项目经理负责拆需求、派活、验收MCP是公司接的外部供应商接口要什么服务就走对应接口A2A是团队内部沟通的会议室和邮件规范大家按约定格式同步进展Skills则是团队沉淀下来的工作SOP——新员工进来照着SOP做就不会翻车。这个分工最大的好处是“关注点分离”。四个组件各管一层出了问题能快速定位是在编排逻辑、工具接入、Agent通信还是技能内容上。如果你把四件事都揉在同一个Agent的Prompt里前期看起来简单后面维护起来就是灾难。1.2 从单Agent到多Agent这套组合解决了什么单Agent做复杂任务最典型的问题有三个。第一个是上下文爆炸。一个Agent从接需求、翻设计稿、写代码、跑测试所有中间过程都堆在一个上下文窗口里。模型能力再强几千行对话上下文之后也会开始“忘记”早期需求输出质量肉眼可见地下降。第二个是工具调用混乱。业务场景一复杂Agent可能需要同时操作设计工具、浏览器、代码仓库、数据库这些工具的鉴权方式、参数格式千差万别。写死在一个Agent里代码就变成了意大利面条不写死Agent又不知道该调谁。第三个是错误隔离差。单Agent链路里任何一步出错都可能污染整条任务。你在写代码的时候前面一个错误的设计标注可能还在上下文里“带节奏”最后产出就歪了。DeepAgents MCP A2A Skills这套组合本质上就是把这三大问题拆开处理切分上下文、统一工具接入、隔离Agent间状态、沉淀高频能力。每个子Agent只处理一个小任务上下文短、职责清晰、错误影响面小整体系统反而比一个大Agent更可控。这里还要回应一个热门问题多智能体系统到底怎么配置我的观点是先别急着上规模。一个任务拆成两个Agent能解决就不要拆成五个。拆分的判断标准很简单这个任务是否存在“相对独立的子目标”并且子目标之间有清晰的输入输出边界。如果没有单Agent加MCP工具其实更省事。1.3 什么场景才需要这套架构我总结过一个简单的选型清单可以作为参考。单Agent MCP已经够用任务是线性的比如“读取一个网页并把内容结构化”只需要一次工具调用上下文不会膨胀。这时候没必要引入A2A和Skills过度设计就是给自己找麻烦。需要引入Skills任务中有一组反复出现的高频动作例如“生成React组件”“写SQL查询”“做代码评审”。把这些动作固化成Skill能让Agent的执行稳定性和速度都明显提升。需要引入A2A任务天然被拆成了多个角色比如产品分析、UI设计、前端开发、QA测试各自需要不同的工具和上下文而且中间产物要互相传递。这时候A2A的收益就很大Agent之间可以通过任务消息明确交接。需要DeepAgents整体编排你希望有一个“主脑”统一规划任务分配、调度子Agent、汇总结果而不是让多个Agent放养式地各自为战。所以这套架构适合的是“复杂、多角色、长流程”的任务。别看到多智能体三个字就兴奋先拿一个真实业务场景过一遍上面的判断标准再决定要不要上。2. 核心概念与配置实操MCP、Skills、A2A一个都不能少2.1 MCP给Agent一个统一的“USB-C口”MCPModel Context Protocol说白了就是一套标准协议统一了AI应用和外部工具、数据源的连接方式。以前Agent接一个工具就要写一套集成代码现在只要这个工具实现了MCP Server任何MCP Host都可以直接调用。类比一下它就是AI世界的USB-C口。在配置MCP之前先分清楚两个角色MCP Host运行在Agent一侧的宿主环境比如DeepAgents、Codex、Claude Desktop这类应用。Host负责管理连接、转发请求。MCP Server真正提供工具的进程可以理解成一个“工具适配器”。它把Figma、蓝湖、Playwright这些工具的能力包装成标准接口Agent通过Host去调用。围绕MCP我记得有人在问“Figma MCP能不能直接切图”。我实测下来是这样Figma MCP可以读取设计稿的图层结构、样式信息、提取SVG资源和切图资源但能不能“直接切”很依赖设计稿本身的命名规范。设计稿里的图层乱命名、没有切图标注Agent拿到的就是一堆混乱节点切出来的图根本没法用。如果团队设计规范不严格我更推荐用蓝湖MCP直接用蓝湖已经准备好的标注和切图资源稳定性和可用性都高很多。下面是我在实际项目里经常用的一组MCP Server配置放在 JSON 文件里就能被多个Host加载{ mcpServers: { figma: { command: npx, args: [-y, figma-mcp], env: { FIGMA_API_KEY: your_figma_personal_access_token } }, lanhu: { command: npx, args: [-y, lanhu-mcp], env: { LANHU_TOKEN: your_lanhu_token } }, playwright: { command: npx, args: [-y, playwright/mcplatest] }, github: { command: npx, args: [-y, modelcontextprotocol/server-github], env: { GITHUB_PERSONAL_ACCESS_TOKEN: your_github_token } } } }这里有几个注意点。第一npx方式启动的MCP Server依赖Node环境版本不一致很容易报错最好在服务端锁Node版本。第二环境变量里的Token千万别硬编码进仓库我见过有人把Figma Token直接提交到Git第二天整个团队的设计稿数据就被拖走了。第三MCP Server数量不是越多越好每多一个ServerAgent在选择工具时的决策成本就更高刚开始接入两三个核心的就够了。还有人在问“Codex怎么配置Figma MCP”。原理和上面一样Codex会读取同样的JSON配置把Figma注册成它的MCP工具。唯一要留意的是不同Host对配置文件的路径要求不一样有的是全局配置有的是项目级配置建议先查一遍官方文档确认路径避免配了没生效还不知道。2.2 Skills把踩过的坑变成Agent的“条件反射”Skills是我觉得这套组合里被低估最严重的一块。很多人以为Skills就是给Agent写一堆说明文档其实不对。Skill和普通Prompt的区别在于Prompt是“告诉Agent怎么想”Skill是“告诉Agent做什么、按什么顺序做、做完怎么检查”。好的Skill应该像一份可执行的操作SOP不仅包含步骤还包含前置条件、禁忌事项、输出格式和常见错误处理。我建议的Skill文件基础结构是这样的--- name: generate-react-component description: 生成一个基于设计Token的标准React函数组件使用TypeScript和CSS Modules。 when_to_use: 当用户要求基于设计稿或设计Token创建新的前端UI组件时使用。 version: 1.0.0 --- # 操作步骤 1. 从输入的Figma节点信息中提取组件的结构、样式和交互状态。 2. 生成组件代码默认使用 function component 写法类型标注完整。 3. 样式文件使用 CSS Modulesclass 命名采用 BEM 风格。 4. 生成 story 文件覆盖默认状态、加载状态和错误状态。 # 输出规范 - 代码文件src/components/{组件名}/index.tsx - 样式文件src/components/{组件名}/style.module.css - Story 文件src/components/{组件名}/{组件名}.stories.tsx # 禁忌 - 不要生成类组件。 - 不要使用内联样式。 - 不要引入未在依赖中声明的第三方库。 - 如果设计Token缺失先向用户提问确认而不是自行猜测颜色值。写完Skill之后放在项目的skills/目录下Agent就会通过语义检索来匹配。注意name和description字段特别重要它们决定了Agent能不能在正确时机“想起”这个Skill。描述里要写清楚“什么时候用”和“解决什么问题”不要堆名词。关于“Superpower Skills怎么安装”其实很简单社区Skills包一般也是一堆Markdown 脚本文件下载后放到指定Skills目录。但我不建议一次性塞太多Agent的Skill检索是有成本且可能互相干扰的。我最多的时候放了四十多个Skills进去结果Agent经常在Simple Task里也优先调用重型Skill反而降低了响应速度。后来砍到十个核心Skill准确率反而上来了。2.3 A2A让Agent之间按“合同”协作A2AAgent-to-Agent协议解决的问题很明确Agent之间如何发现彼此、如何传递任务、如何交付产物。它有三个核心概念AgentCardAgent的“名片”描述这个Agent叫什么、能干什么、怎么调用、认证方式是什么。可以理解成微服务里的注册中心信息。TaskAgent之间的任务单元有完整生命周期从submitted到working再到completed/failed。Artifact任务完成后交付的中间产物比如一份PRD、一张截图、一段代码。我早期配置A2A时踩过一个坑两个Agent之间直接写死了消息格式后续加Agent时每个都要改一遍对接代码。后来改成统一的A2A Relay模式所有Agent通过一个消息中转服务互相发现和投递任务才真正解耦。A2A的消息很像团队协作工具里的“带有人名和任务编号的消息”。下面是我常用的一条A2A任务消息示例{ protocolVersion: 1.0, taskId: task-240506-001, type: task/submit, sender: pm-agent, receiver: design-agent, payload: { title: 生成登录页设计标注, content: 登录页需求文档已完成请基于蓝湖MCP提取设计稿标注和切图资源, artifacts: [ { name: login-page-prd.md, type: text/markdown, uri: storage://artifacts/login-page-prd.md } ] } }A2A消息里我强烈建议加上taskId作为唯一标识并且接收方要做幂等处理。原因很简单网络抖动、重试机制都可能让同一条任务被重复投递没有幂等保护Agent就会重复执行同一个任务浪费Token还是小事重复下单、重复写库就是事故了。对了还有人问“A2A怎么和Langfuse一起用”。Langfuse这类可观测性工具可以记录Agent间的消息链路、Token消耗、延迟和错误率。我一般会在A2A Relay层埋点把消息发送、接收、完成的事件全部上报到Langfuse这样一旦整个多智能体流程出现问题就能按taskId查完整链路定位是哪个Agent卡住了、哪条消息丢了排查效率提升非常明显。2.4 DeepAgents总的编排大脑DeepAgents在整套系统里扮演的是“总编排者”的角色接收用户目标规划子任务调用子Agent或工具验证中间结果直到交付最终产出。我配置DeepAgents时最关注的几个字段是model主脑模型的选型。规划、拆解、判断类任务建议用更强的大模型子Agent可以用相对轻量的模型执行具体任务。subAgents可调度的子Agent列表。每一个都要在配置里声明能力边界否则主Agent会乱派活。skillsDirSkills目录。主Agent和子Agent都会从这里检索可用技能。mcpServers全局可用的MCP Server列表子Agent按需使用。maxIterations最大迭代轮次。限制这个值能防止Agent在错误路径上越走越远我一般设置成 10 左右。一个典型的DeepAgents配置大概长这样mainAgent: name: orchestrator-agent model: gpt-4o maxIterations: 10 subAgents: - pm-agent - design-agent - code-agent - qa-agent skillsDir: ./skills mcpServers: - figma - lanhu - playwright - github我还想特别聊一下热词里的“本体论”和DeepAgents的关系。在系统设计阶段我是把“本体”理解成“领域里有哪些角色、各自的职责边界、彼此怎么协作”。你不必先写代码先把业务涉及的角色画出来PM Agent负责什么、Design Agent负责什么、Code Agent负责什么它们之间的输入输出长什么样。把这些职责边界定义清楚再写DeepAgents配置就会很顺畅。很多多智能体项目翻车不是因为模型不够强而是因为Agent的角色定位模糊主Agent根本不知道该把任务派给谁。3. 实操过程从0到1搭一条需求到代码的多智能体流水线3.1 21章实战地图从入门到生产化怎么走标题里写了“21章完整版”这里先把整条实战路径的章节规划展示出来。我把它分成了五个阶段每个阶段解决一类问题。阶段章节范围核心主题关键产出第一阶段第1-4章基础认知与环境搭建理解四个组件的角色搭好开发环境第二阶段第5-8章DeepAgents核心机制与MCP接入主Agent能调用子Agent和外部工具第三阶段第9-12章Skills工程化编写、测试、版本管理Skill第四阶段第13-17章A2A协作与多智能体系统设计Agent间能互相通讯、传递产物第五阶段第18-21章全流程实战与生产化部署搭建完整的业务流水线并处理异常这个路线设计的思路是“先跑通再优化再协作最后上规模”。前三章我建议耐着性子做一遍环境安装和最小Demo不要一上来就设计十几个Agent的架构。我见过太多人第一天就画了宏大的多智能体蓝图结果连MCP Server都连不上一周过去了PPT还是PPT。到了第二阶段DeepAgents主Agent能调用外部工具这意味着基础能力已经打通。第三阶段把高频动作沉淀成Skills你会明显看到执行稳定性提升。第四阶段才引入A2A让多个Agent协作起来。第五阶段是真实场景的完整串联包括异常处理、日志追踪和部署方案。3.2 场景设计一个真实的复合任务为了讲清楚我用一个最常见的场景作为例子用户提了一句“做一个登录页”系统自动完成从需求分析到前端代码交付的全流程。整个任务被拆分成四条Agent链路PM Agent把一句模糊需求扩展成结构化PRD包含页面目标、字段定义、交互逻辑。Design Agent通过蓝湖MCP读取登录页设计稿的标注和切图资源整理出设计Token和组件清单。Code Agent调用generate-react-componentSkill基于设计Token生成React组件代码、样式文件和Story。QA Agent用Playwright MCP在当前页面做冒烟测试检查字段校验、按钮状态、响应式布局。在DeepAgents的Main Agent视角里它只需要规划任务顺序并逐个派发。每个子Agent只关心自己的那一小步上下文短、目标明确、出错影响面小。这就是整套架构的核心价值把长流程拆成短流程把复杂问题切分给多个“专家”并行处理。3.3 系统配置与关键参数调优结合上面的场景一套能在本地跑起来的完整配置大致长这样orchestrator: mainAgent: model: gpt-4o maxIterations: 12 skillsDir: ./skills mcpServers: - lanhu - playwright subAgents: - name: pm-agent model: gpt-4o-mini skills: [prd-writing] - name: design-agent model: gpt-4o-mini mcpServers: [lanhu] skills: [design-token-extraction] - name: code-agent model: claude-3-5-sonnet skills: [generate-react-component, code-review] - name: qa-agent model: gpt-4o-mini mcpServers: [playwright] skills: [smoke-test-checklist]这里有几个参数是我在多次实测后确定的列个表供大家参考参数推荐值作用与原因maxIterations10-15防止Agent在错误方向上无限循环超过即失败返回temperature0.2-0.4代码和结构化任务用低温度需求分析类任务可以稍高maxTokens4096-8192子Agent输出限制防止单条消息过长taskTimeout60-120秒超过则重试或走降级逻辑concurrency2-4Agent并行度过高容易触发外部工具限流关于上下文管理我有一个比较重要的小技巧子Agent完成任务后只把结构化摘要返回给主Agent不要拼接完整原始输出。比如Code Agent生成代码后只返回“文件已生成、组件清单、测试状态”整段代码留在Artifact存储里。这样主Agent的上下文不会被无意义内容塞满能更专注于整体调度。失败重试也是生产环境绕不开的问题。我习惯在每个MCP调用和A2A消息投递上都做两层重试第一层立即重试两三次间隔几秒如果还失败就把失败信息返回给主Agent由它决定是换一条路径还是直接终止任务。千万不要让子Agent内部无限重试否则一个外部服务抖动就可能把整个系统拖垮。4. 常见问题与排查技巧实录4.1 问题速查表多智能体系统在真实环境里跑起来问题层出不穷。这里列一张问题速查表都是我在项目里实际踩过、排查过、解决过的问题。问题现象排查思路解决方案Figma MCP拿不到切图资源检查设计稿是否有切图标注Figma API Token权限是否包含File Content权限补充设计规范或改用蓝湖MCP直接读取已生成的切图Skill放进了目录但Agent没调用检查Skill的name和description是否足够贴合任务语义重写description加入触发场景关键词A2A消息重复执行网络重试机制导致同一条任务被投递多次接收端按taskId做幂等处理记录已处理任务列表MCP Server连接超时子进程启动慢或网络不稳定npx包版本不一致设置合理的超时时间固定Node和MCP包版本必要时用长期运行的Server进程替代npx主Agent上下文被撑爆子Agent返回了过多原始输出只返回结构化摘要原始产物走Artifact存储多个Agent抢同一个MCP工具并发调用超出了外部服务限流控制并发度在编排层加信号量或给不同Agent分配独立API KeyA2A消息丢失Relay服务不稳定或消费者异常退出在Relay层做持久化消费成功后确认ack失败自动重投4.2 避坑心得从踩坑中总结的几条硬经验第一先跑最小闭环再铺开规模。我第一次做多智能体系统时一口气设计了八九个Agent结果调试了整整一周都跑不通一条完整链路。后来我把范围缩小到两个Agent一个Skill半天就打通了再把别的能力逐步加回来。多智能体系统最怕的就是还没跑通就追求规模。第二给每个Agent写“禁做清单”。只写职责说明还不够必须明确告诉Agent哪些事绝对不能做。比如Code Agent必须使用TypeScript、不能修改全局样式Design Agent必须基于设计Token命名、不能自己编造颜色值。这些禁忌写进Skill的# 禁忌区块里比在主Prompt里反复强调有用得多。第三所有外部调用都要有超时与降级。MCP Server、A2A Relay、外部API任何一个环节都可能不可用。我在生产环境里处理过MCP Server进程挂掉导致整个Agent链路停滞的问题。后来把所有外部调用都加了超时和失败兜底一两秒内失败就直接返回错误信息给主Agent由它决定下一步而不是无限等待。第四日志和追踪要从第一天就接入。不要等到出了问题再补。A2A消息里带taskIdDeepAgents的关键决策点输出结构化日志所有外部调用记录耗时和结果。有人可能觉得前期这些工作很繁琐但等系统出问题的时候一条完整的链路追踪能帮你省下大半天排查时间。第五Skills一定要做版本管理。Skill本质上是代码资产不是随意写的笔记。把Skills目录纳进Git仓库每个改动都写CHANGELOG。我遇到过因为一个Skill改坏了整个Code Agent批量生成的代码全部带上了旧样式命名回滚都花了不少功夫。有了版本管理至少能快速回到最近一个可用版本。最后分享一点个人体会这套组合真正值钱的地方其实不在模型本身而在“组织方式”。DeepAgents、MCP、A2A、Skills四件套对应的是编排、连接、协作、沉淀四个工程问题它们把AI应用从“单机智能”推进到了“系统智能”的层面。我自己用下来的感受是单个Agent再强也只是个优秀的个体但一套职责清晰、工具完备、协作顺畅的多智能体系统才是一个真正能扛业务的生产工具。所以如果你也想上手建议别急着追求大而全先挑一个每周都在重复的流程拆成两个Agent、三个Skill、两个MCP Server跑通。跑通之后你会明显感觉到原来一个Agent吭哧吭哧干的活现在几个Agent各干各的反而更稳。