最近完整跟完一门实打实的慕课课程,主题就是标题里这个组合:DeepAgents + MCP + A2A + Skills。说实话,一开始看到这四个词堆在一起,我第一反应是"又来蹭概念了",但真把它当成一个技术体系去拆的时候,才发现这套组合正好把当前 AI Agent 生态里最痛的四块问题都覆盖了:单体智能体能力天花板、工具与数据连接碎片化、智能体之间没法对话、以及能力无法沉淀和复用。课程最终落地的成果就是一套"可编排、可互通、可扩展"的 Agent 集群,我也跟着从零搭了一遍,踩了不少坑,这篇文章就来把整条链路掰开揉碎讲清楚。
这东西适合谁呢?如果你已经会用 ChatGPT API 或 LangChain 之类的东西写单个 Agent,但总觉得"单个 Agent 做不了复杂任务",或者你正在做公司内部 AI 基础设施,想让多个智能体协作而不是各自为战,那这篇文章能帮你省掉很多试错时间。我会从概念拆解讲到协议原理,再到能直接抄作业的代码和配置,最后把我在实操里踩过的坑和排查思路一并甩出来。
1. 先搞明白:这四个关键词在 Agent 集群里各演什么角色
1.1 为什么单体 Agent 走到了瓶颈
在开始拆概念之前,得先回答一个最朴素的问题:为什么现在大家都在搞"多智能体"而不是继续把单个 Agent 做大?我自己的项目经历里体会最深的是三个瓶颈。
第一个是上下文窗口和工具数量的物理限制。你在一个 Agent 里塞十个工具可能还行,塞五十个工具、每个工具带一大段 schema 文档,Prompt 直接爆炸,模型开始"选择困难"。第二个是单一 Agent 做长链路任务时容易"中途失焦",一个电商客服机器人既要查订单、又要处理退款、还要推荐商品,所有逻辑搅在一起,出了一次错很难定位是规划问题、工具问题还是模型问题。第三个是能力复用性极差——A 项目里写好的一套行业问答逻辑,B 项目想用,只能复制粘贴改变量名,没有任何标准化封装。
所以业界逐渐形成一个共识:与其造一个"全知全能的神",不如养一支"各司其职的团队"。而要让这支团队高效运转,就需要解决三件事——怎么让 Agent 之间说话(互通)、怎么让 Agent 使用外部工具和数据(连接)、怎么让每个 Agent 的专长变成可复用的资产(扩展),最后还需要一个大脑来分活(编排)。MCP、A2A、Skills 和 DeepAgents,正好各自对应这四件事。
1.2 MCP、A2A、Skills、DeepAgents 的定位对比
我把这四者的关系用一个生活化的类比来讲:把整个 Agent 集群想象成一家公司。
- MCP(Model Context Protocol)是公司的"统一接口/插座标准"。任何员工(Agent)要用什么工具、查什么数据库、调什么外部系统,都通过同一个接口接入,不用每雇一个新人就给他配一套专属设备。
- A2A(Agent to Agent)是公司的"内部通信协议"。员工之间互相派活、回报进度、交付成果,都按统一的邮件格式来,不用 A 员工用飞书、B 员工用微信、C 员工靠喊。
- Skills是公司的"岗位技能培训包"。它是沉淀好的"操作手册 + 脚本 + 流程",新员工来了,直接把技能包装进脑子里就能上岗,不需要从零摸索。
- DeepAgents则是"项目经理 + 技术总监"。它负责把一个大任务拆成子任务,分给对应的员工,跟进进度,汇总结果,并且具备自我反思和纠错能力。
这样一盘,整个集群的骨架就清晰了。表格再总结一下:
| 概念 | 解决的问题 | 类比 | 典型实现/协议 |
|---|---|---|---|
| MCP | AI 应用与工具、数据之间的标准连接 | USB-C 统一接口 | Anthropic 发起的开放协议 |
| A2A | Agent 与 Agent 之间的通信与协作 | 公司内部标准会议/邮件流程 | Google 发起的 A2A 协议 |
| Skills | 将提示词、脚本、流程封装为可复用资产 | 操作手册/技能包 | Claude Skills、Codex Skills |
| DeepAgents | 任务规划、分工、指挥、反思纠错 | 项目经理/技术总监 | 各类编排框架与自主 Agent 实现 |
从课程里的定义来看,这四层是互相配合的关系:DeepAgents 是大脑,A2A 是神经网络,MCP 是手脚的接口,Skills 是肌肉记忆。缺失任何一层,集群都跑不顺畅。下面我分别展开讲每一层的核心细节。
2. 协议层拆解:MCP 和 A2A 到底怎么工作
2.1 MCP:把"工具接入"变成一次标准化握手
MCP 的核心价值用一句话说就是:让 AI 应用不需要为每个工具写专属集成代码。以前你要让大模型调用某个内部系统,得先写一个函数,把系统 API 包装成模型能理解的 JSON Schema,再塞进 Prompt 里让模型学会调用。每次新增一个工具,Prompt 就要改一次、代码就要调一次,M 个 Agent 接 N 个工具就是 M×N 的集成噩梦。MCP 把这个关系变成了 M 个 Agent 对 N 个工具统一走一套协议。
从架构上看,MCP 分三层:
- Host(宿主):也就是 Agent 本体,比如 Claude Desktop、Codex、自己写的 Python 程序。Host 负责决定什么时候调用工具。
- Client(客户端):Host 内部与 MCP Server 建立会话的组件,负责协议握手、发送请求、接收结果。
- Server(服务端):暴露工具、资源、提示词的一方,可以是本地子进程(stdio),也可以是远程 HTTP 服务。
MCP 协议里定义了三个核心原语:Tools(模型可调用的函数)、Resources(可读取的上下文数据,比如文档片段)、Prompts(预定义的提示模板)。大部分场景我们用得最多的是 Tools。一次完整的调用流程是这样的:
- Host 启动时,Client 与 Server 完成
initialize握手,协商协议版本和能力。 - 客户端调用
tools/list获取工具清单,工具的描述会进入模型上下文。 - 模型根据任务决定调用某个工具,客户端发送
tools/call请求,带上参数。 - Server 执行实际逻辑(查库、调 API、算结果),把结构化的 JSON 结果返回给模型。
我自己实践下来,最大的感受是"一次接入,到处使用"。我写了一个查询订单状态的 MCP Server,Claude Desktop 能用,Codex 能用,自己的 FastAPI 服务也能用,配置方式几乎一样。来看一个最小可用的代码示例,基于fastmcp这个 Python 库:
from fastmcp import FastMCP mcp = FastMCP("order-server") # 模拟数据库 ORDERS = { "A1001": {"status": "已发货", "express": "顺丰", "track_no": "SF123456"}, "A1002": {"status": "待支付", "express": "-", "track_no": "-"}, } @mcp.tool() def query_order(order_id: str) -> dict: """根据订单号查询订单状态、物流公司和运单号""" return ORDERS.get(order_id, {"error": "订单不存在"}) if __name__ == "__main__": mcp.run(transport="stdio")运行这个脚本后,在客户端配置里把 Server 指向它就行。Claude Desktop 的配置文件claude_desktop_config.json大致长这样:
{ "mcpServers": { "order-server": { "command": "python", "args": ["/path/to/order_server.py"] } } }Codex 的配置则在~/.codex/config.toml里:
[mcp_servers.order-server] command = "python" args = ["/path/to/order_server.py"]这两年在实际项目中,我观察到一个很好的趋势:越来越多的数据库、开发工具、浏览器自动化工具、甚至券商的金融终端都主动提供了现成的 MCP Server 封装,也就是说 MCP 正在从一个"需要自己动手的协议"变成"开箱即用的接口标准"。这也是为什么课程里花大量篇幅讲 MCP——它不只是一个协议名词,而是整个集群的"连接底座"。
2.2 A2A:让智能体用"人话"完成跨系统协作
如果说 MCP 解决的是 Agent 和工具之间的问题,那 A2A 解决的则是 Agent 和 Agent 之间的问题。课程里有一句话我记得很清楚:"MCP 管手脚,A2A 管同事之间的对话。" A2A 的设计目标是把不同团队、不同技术栈、不同厂商的 Agent 连接到一个统一的协作网络上,相互发现能力、派发任务、交换成果。
A2A 协议最核心的几个概念:
- Agent Card:每个 Agent 对外发布的"名片",用 JSON 描述自己是谁、能干什么、怎么访问(endpoint)、需要什么认证方式。其他 Agent 拿到这张卡片就知道要不要找它干活。
- Task:一次协作任务的抽象单位。Task 有完整生命周期,比如
submitted(已提交)、working(执行中)、input-required(需要更多信息)、completed(完成)、failed(失败)。 - Message:Agent 之间传递的对话消息,可以包含文本、结构化数据,也可以包含文件引用。
- Artifact:任务产出的成果,比如生成的报告、转换好的文件、抓取的数据集。
A2A 在传输层上走的是 HTTP,这和走 stdio 的本地 MCP 很不一样。它的协作方式很直观:Agent A 先向 Agent B 的.well-known/agent-card.json地址发请求,拉取 Agent B 的能力描述;确认能接这个活之后,再创建一个 Task 并把需求文本作为消息发过去;Agent B 开始工作,Agent A 轮询 Task 状态或通过 webhook 接收通知;最后 Agent B 把 Artifacts 回传。
这里我写个简化的请求逻辑,真实项目里可以直接套这个思路:
import httpx import time AGENT_B_CARD_URL = "http://agent-b-host/.well-known/agent-card.json" def get_agent_card(): resp = httpx.get(AGENT_B_CARD_URL) return resp.json() # 返回 Agent Card,包含 name、description、task endpoint def submit_task(endpoint: str, prompt: str, task_id: str): payload = { "id": task_id, "message": {"role": "user", "parts": [{"text": prompt}]}, "status": "submitted", } resp = httpx.post(endpoint, json=payload) return resp.json() def poll_task(endpoint: str, task_id: str): while True: data = httpx.get(f"{endpoint}/{task_id}").json() if data["status"] in ("completed", "failed", "canceled"): return data time.sleep(2)需要特别强调的一点:A2A 和 MCP 不是二选一的关系,而是分层配合的关系。A2A 负责"Agent 之间传递任务",MCP 负责"Agent 内部调用工具",一个在集群的网络层,一个在单体的执行层。课程里给的类比很贴切:"让老板分配任务,和让员工使用工具,完全不是一回事。"
3. Skills 与 DeepAgents:让集群长出"可扩展"的能力
3.1 Skills:把经验固化成文件级的技能包
MCP 解决了工具连接,但还有一个问题没解决:Agent 怎么学会"做一件事的完整流程"?比如"帮用户写一篇符合公众号风格的技术文章",这可不只是调一个 API 的事,它涉及角色设定、行文风格、字数控制、标题写法、甚至配图建议。这些流程性的知识,如果每次都在 Prompt 里手写,既冗长又不可复用;如果全部塞进系统 Prompt,上下文很快就爆了。Skills 机制就是冲着这个问题来的。
我理解的 Skills,本质上是"以目录为单位的可加载知识 + 流程 + 脚本"。
skills/ blog-writer/ SKILL.md style-guide.md scripts/generate_outline.py sql-analyzer/ SKILL.md scripts/explain_plan.py其中SKILL.md是这个技能包的核心,它通常有一个 YAML frontmatter 描述元信息,然后是正文说明,教模型具体应该按什么步骤做事。一个典型的 SKILL.md 大概是这样的:
--- name: blog-writer description: 编写符合个人技术博客风格的 Markdown 文章,自动生成大纲、段落和结尾。 allowed-tools: - write_file - bash --- # 博客写作技能 当你被要求写一篇技术博文时,遵循以下流程: ## 第一步:确定文章骨架 - 先问清楚主题和目标读者。 - 自动生成一个包含 5-7 个二级标题的大纲。 - 每个二级标题下补充 2-3 个三级标题。 ## 第二步:正文撰写 - 开头 200 字内必须出现核心关键词。 - 每个段落不少于 150 字,用口语化表达。 - 涉及参数和步骤时,必须给出可复现的细节。 ## 第三步:收尾检查 - 避免 AI 套话,用个人真实经验收尾。你可以看到,Skills 跟普通 Prompt 的核心区别在于:它是一个"最小完整单元",可以随目录复制、分发、版本管理,还能内置脚本和知识文件。市面上已经出现很多公开的 Skills 仓库,大家用find skills这类检索工具搜索和安装别人封装好的技能包,其实就相当于 GitHub 时代的"npm 包"。
不少人在初学时会问:Skills 和 MCP 到底什么区别?我的理解是:MCP 是"Agent 可以调用外面世界的接口",Skills 是"Agent 知道怎么做一件事的流程和风格"。举个例子,你有权调用数据库查询的 MCP 工具(能不能查到数据),但你知道"怎么分析数据库慢查询并给出优化建议"(该按什么思路分析、怎么组织报告),这是 Skills。二者本质上一个是"连接能力",一个是"认知与流程能力",互补而非替代。
3.2 DeepAgents:承担"编排大脑"的深度 Agent
最后说 DeepAgents。这个词目前在社区里没有唯一的官方定义,更像是一类"深度智能体"的统称,课程里也没有拘泥于字面,而是把它当作集群中的"编排与统帅层"来讲。DeepAgents 和普通 Agent 的区别,主要体现在三个"深度"上:
深度一是任务分解的深度。普通 Agent 接到"帮我做一个竞品分析报告"会直接尝试一口气完成,结果中期就开始跑偏;DeepAgents 会把任务拆成"确定竞品范围 → 收集公开信息 → 结构化对比 → 生成报告"等多个子任务,并判断每个子任务交给哪个专用 Agent 更合适。
深度二是自我反思的循环深度。DeepAgents 在执行过程中会定期"停下来检查":目前的结果是否合理?离目标还差什么?有没有更优路径?如果某一环节失败,它会尝试换一种策略,而不是直接把错误抛给用户。这种反思循环需要设计好触发条件和最大尝试次数,否则会被死循环坑得很惨(这一点后面专门讲)。
深度三是跨 Agent 指挥的协调深度。DeepAgents 不仅要干活,还要"调度别人干活":包括给下游 Agent 派发 Task、接收 Artifacts、判断是否需要多轮澄清。所以 DeepAgents 本身通常要同时具备一个 A2A 客户端的角色,并且在内部把 MCP 工具、Skills 流程组合成一套自己的"总监工具箱"。
如果说 A2A 是让"任意两个 Agent 能对话",那 DeepAgents 就是让"一群 Agent 围绕一个目标有序对话"的关键。没有 DeepAgents 做编排层,集群里每个 Agent 都是独立的能人,但凑在一起就像一批谁都不服谁的专家,谁也整合不了谁。
4. 实操:手把手搭一个最小可用的 Agent 集群
4.1 架构规划:先想清楚节点和通信方式
理论部分聊完,下面进入我最喜欢的环节——动手。课程里最终项目是一个可运行的集群,我自己简化了一下,保留最小闭环:三个角色,一条主链路。
- Deep Agent(编排者):负责接收用户需求、规划任务、调用下游 Agent、汇总结果。它接入了 MCP Client,也接入了 A2A Client。
- 业务 Agent A(订单助手):负责查询订单状态和物流信息。它背后接一个订单数据库的 MCP Server。
- 业务 Agent B(内容助手):负责生成营销文案。它加载了一个
marketing-writer的 Skills 包。
通信方式是这样的:用户向 Deep Agent 提需求 → Deep Agent 根据任务类型,通过 A2A 协议把子任务派给 Agent A 或 Agent B → Agent 干活时通过 MCP 调用工具或加载 Skills → 结果沿着原路返回 → Deep Agent 汇总输出。
目录结构我建议按模块隔离开:
agent-cluster/ deep-agent/ main.py planner.py order-agent/ main.py mcp-server/order_server.py content-agent/ main.py skills/marketing-writer/SKILL.md shared/ a2a_client.py config.json这种结构最大的好处是:每个业务 Agent 可以独立开发、独立部署、独立测试,后续加第三个、第四个 Agent 都不需要改动别的模块,只需要让 Deep Agent 知道"新同事的能力卡片"在哪里。
4.2 实现业务 Agent 的 MCP Server
前面第 2.1 小节的订单查询 Server 可以直接放进order-agent/mcp-server里。你可以用fastmcp从这个文件启动一个 stdio 模式的 MCP Server,然后在订单 Agent 的主程序里通过 MCP Client 连接它。FastMCP 也支持把 Server 跑成 HTTP 模式,方便远程调用:
# order-agent/main.py import asyncio from fastmcp import Client async def query_order_via_mcp(order_id: str) -> dict: async with Client("python", ["mcp-server/order_server.py"]) as client: tools = await client.list_tools() result = await client.call_tool("query_order", {"order_id": order_id}) return result if __name__ == "__main__": print(asyncio.run(query_order_via_mcp("A1001")))实际项目中我遇到的一个直觉上的"坑"是:每个 Agent 都配一个独立 MCP Server 进程,并不等于集群,它只是"单体 Agent + 工具"。要真正形成集群,必须让 Agent 之间能对话。这就轮到 A2A 出场了。
4.3 用 A2A 把 Deep Agent 和业务 Agent 连接起来
为了保持最小实现,我给每个业务 Agent 包一个极简的 A2A HTTP 服务。这里简化掉框架细节,突出任务分发模型:
# shared/a2a_client.py import httpx def discover_agent(base_url: str) -> dict: """读取 Agent Card,知道对方能干什么、任务接口在哪""" card = httpx.get(f"{base_url}/.well-known/agent-card.json").json() return card def send_task(task_endpoint: str, task_id: str, prompt: str) -> dict: """创建任务并返回任务 ID""" payload = { "id": task_id, "message": {"role": "user", "parts": [{"text": prompt}]}, "status": "submitted", } return httpx.post(f"{task_endpoint}/tasks", json=payload).json() def wait_for_completion(task_endpoint: str, task_id: str, timeout: int = 60): """轮询任务状态,这里建议指数退避,而不是每秒请求""" import time interval = 1 elapsed = 0 while elapsed < timeout: resp = httpx.get(f"{task_endpoint}/tasks/{task_id}").json() if resp["status"] in ("completed", "failed", "canceled"): return resp time.sleep(interval) elapsed += interval interval = min(interval * 2, 5) raise TimeoutError(f"Task {task_id} 超时")在 Deep Agent 的规划逻辑里,我维护了一个"Agent 通讯录":
# deep-agent/planner.py AGENT_CATALOG = { "order": "http://localhost:9001", "content": "http://localhost:9002", } def route(prompt: str): if "订单" in prompt or "物流" in prompt: return "order" if "文案" in prompt or "文章" in prompt: return "content" return None这样 Deep Agent 收到任务时,先做关键词路由(真实项目里可以用模型函数调用做更智能的路由),再通过send_task分派出去。整个链路跑通之后,你就能看到:用户在 Deep Agent 那里说一句话,订单 Agent 通过 MCP 查数据,内容 Agent 调用 Skills 写文案,最终由 Deep Agent 汇总成一个完整的响应。这个最小闭环虽然简单,但已经具备了可编排、可互通、可扩展三大特性的骨架。
4.4 Skills 在集群里的加载方式
内容 Agent 要写好营销文案,靠的是 Skills 而不是临时 Prompt。我在content-agent/skills/marketing-writer/SKILL.md里写了完整的创作规范(框架类似第 3.1 小节的示例)。关键是让 Agent 启动时能主动感知到 Skills 的存在。
实现方式可以有多种:最简单的是在 Agent 的系统 Prompt 里插入一段"可用技能清单",让模型看到技能包里的name和description,当任务匹配时再去读取完整的 SKILL.md 正文。更进阶的做法是给 Agent 开放一个"读取技能目录"的工具,让它按需探索。无论哪种方式,原则都一样:技能发现的元信息要轻,技能加载的正文要重,避免一开始就把所有技能细节塞进上下文。
我实际测试下来,还有一个非常重要的细节:SKILL.md 的description必须写清楚"什么情况下应该使用这个技能",因为模型就是靠这段文字来判断何时加载技能的。写得太泛,比如"帮助用户写内容",模型会在任何地方都试图加载它,造成上下文浪费;写得太窄,比如"仅当用户提到:生成双十一促销短文案时才可使用",那稍微换一种说法模型就想不起来用它了。最理想的描述是"任务类型 + 触发条件 + 不适用场景"三要素都齐全。
5. 常见问题与排查技巧实录
这部分是我觉得整个项目里最有价值的沉淀。课程里代码能跑通只是第一步,真正让自己成长的是在一堆报错里抠原因的过程。
5.1 MCP 连接失败的三大元凶
MCP 链接失败是我遇到最多的坑,尤其是 stdio 模式。十次里有七次是下面这三个原因:
- 环境变量和 Python 路径不一致:Claude Desktop 或 Codex 启动 MCP Server 时用的 PATH 不是你终端里的 PATH。你自己运行
python order_server.py没问题,但从客户端启动却报ModuleNotFoundError,九成是这个问题。解决办法:在配置里把python换成which python的绝对路径,或者用一个带完整依赖的.venv/bin/python。 - Server 启动后没有发 JSON RPC 初始化消息:如果你手写的 MCP Server 没有处理
initialize请求,客户端会一直卡在"连接中"。用fastmcp这种库能省去这些协议细节,别自己造轮子。 - stdio 模式下的日志污染:如果你在 MCP Server 代码里写
print("服务启动"),这些输出会混在 JSON RPC 通信流里,导致消息解析失败。日志要写到文件或stderr,千万别直接打到 stdout。
排查 MCP 问题有一个实用技巧:先用mcp dev或直接写个小脚本模拟客户端连接,把tools/list返回结果打印出来看。先把协议层问题排除,再去查业务逻辑。
5.2 Skills 不生效的典型原因
我写过不少 SKILL.md,踩过的坑也很集中。最常见的是:Agent 根本没感知到技能存在。我第一版技能描述写得太泛,结果模型在闲聊时也尝试加载技能,然后因为正文和任务不匹配产生幻觉式回复。后来我把描述精确到"触发条件 + 不适用场景",问题立刻缓解。
另一个坑是技能目录里夹带了不该有的文件。比如在技能包根目录放了一个几百 MB 的测试数据文件,Agent 按路径去读的时候直接卡死。Skill 包要遵循"最小化"原则,脚本只保留运行时需要的,数据和缓存放外部存储,不要让技能包变成数据仓库。
5.3 多智能体协作的死循环与上下文爆炸
集群跑起来之后,新问题就来了。我实际踩过的两个最折磨人的问题是调度死循环和上下文爆炸。
调度死循环长这样:Deep Agent 给订单 Agent 派了一个任务,订单 Agent 发现自己查不到数据,给 Deep Agent 返回"请求澄清",Deep Agent 又原样转述给用户,用户没理,Deep Agent 决定"再问一次",结果进入一个不断轮询的循环,直到超时。解决思路是给 Task 的对话轮次设置上限,并且在 Deep Agent 的反射逻辑里加上"如果已经请求澄清两次还没有新信息,就把当前已有的部分结果返回,而不是继续等待"。
上下文爆炸发生在 Artifact 内容过大的时候。比如内容 Agent 生成了一份五万字的行业报告,整个 Artifact 被塞进 Deep Agent 的上下文,一次性就把窗口撑爆。正确的姿势是:Artifact 以文件引用或摘要的形式传递,Deep Agent 只在需要时读取具体片段,而不是把所有内容一次性加载。这一点在课程里被反复强调,我深以为然——集群里传递的不应是"原始数据",而应该是"精炼信息"。
5.4 故障排查速查表
| 症状 | 可能原因 | 排查顺序 |
|---|---|---|
| MCP 工具列表为空 | Server 进程崩溃 / tools/list 未实现 | 1. 手动启动看报错;2. 用客户端脚本调tools/list |
| Agent 卡在"working" | 下游 Agent 没轮询状态 / 回调丢失 | 1. 看下游日志;2. 确认任务状态接口可用;3. 检查超时设置 |
| 技能从未被加载 | description 不匹配 / 技能目录未挂载 | 1. 打印 Agent 启动时可用的技能清单;2. 检查元信息描述 |
| 多 Agent 重复处理同一任务 | 缺任务幂等 ID | 1. 确认 Task 的id是否全局唯一;2. 在下游 Agent 维护已处理 ID 集合 |
| 上下文迅速膨胀 | Artifact 大对象直接回传 | 1. 改为文件引用或摘要;2. 检查是否循环引用大模块,某次失败后是否需要重试。 |
这个表是我项目里一直保留的"急诊手册",每次集群出问题,先对着表和关键词做初筛,通常五分钟内就能定位到是协议层、配置层还是业务逻辑层的问题。
最后分享一点个人体会
整套系统跟着做完,我最深的一个感受是:技术名词永远在快速迭代,但解决问题的架构思路是有延续性的。MCP、A2A、Skills 这些概念今天看很新,但说到底,它们解决的就是"标准化连接、标准化通信、标准化沉淀"这三件事。任何团队做 Agent 集群,如果能先把这三个层面想清楚,再填具体的协议和框架,就不会被层出不穷的新名词带偏。
还有一个很实际的经验分享给想要上手的人:不要一上来就搭五六个 Agent 的复杂集群,先把一个 Deep Agent、一个业务 Agent、一个 MCP Server 的最小闭环跑通,再逐渐加节点。我第一次整合 A2A 和 MCP 的时候,花在 debug 的时间比写代码的时间多一倍,有了最小闭环之后,后期加节点的速度反而很快。希望你也能从最小闭环开始,一步步搭出适合自己的下一代 Agent 集群。