📑 本页目录(点开跳转)
13 · 多 Agent 协作
⏱ 40 分钟 | ⭐ 核心
🎯 一句话
多 Agent 不是「更聪明」,是「用 15 倍的 token 换并行度和上下文隔离」。 先证明单 Agent 做不到,再拆。
⚖️ 一、先说代价
结果对照
🔑 先做这个对照实验:把给多 Agent 的 token 预算全给单 Agent(让它多试几轮、多验证几次), 看差距还有多大。很多时候差距会大幅缩小。
🧩 二、多 Agent 真正的两个价值
不是"更聪明",而是这两个结构性的好处:
| 价值 | 说明 |
|---|---|
| ① 并行度 | 5 个子 Agent 同时查 5 个方向,墙钟时间大幅缩短(官方:复杂查询研究时间减少最多 90%) |
| ② 上下文隔离 ⭐ | 每个子 Agent 有自己干净的上下文,脏活不污染主线(第 4 章) |
如果你的任务两条都不占(不能并行、不需要隔离),那多 Agent 只是在烧钱。
🗂️ 三、五种协作模式
① 编排器-子 Agent(默认起点)
图下说明
- 编排器:规划 → 派发 → 综合
- 子 Agent 1(干净上下文) 摘要
- 子 Agent 2 摘要
- 子 Agent 3 摘要
适合:任务分解清晰、子任务之间依赖少 局限:一个子 Agent 的发现该影响另一个时,编排器成瓶颈 为什么是默认:以最小的协调复杂度覆盖最广的问题范围
② 生成器-验证器
信息关系
适合:标准可显式定义的质量关键场景 ⚠️ 局限:「检查一下好不好」这类含糊标准会失败——必须能写成具体条目
③ Agent 团队(持久化工作者)
图下说明
- 任务队列 工作者A(持久,跨任务保持状态)
- 工作者B
- 工作者C
和子 Agent 的关键区别:
| 子 Agent | Agent 团队 | |
|---|---|---|
| 生命周期 | 用完即弃 | 持久,跨任务累积上下文 |
| 适合 | 短任务、产出离散 | 大型迁移,每人负责一个模块 |
| 完成检测 | 简单(返回即完成) | 复杂(谁都不知道啥时候全完了) |
④ 消息总线
要点
Agent 们发布/订阅事件主题,松耦合
适合:流程由发现的事件涌现(如安全运营中心:发现异常 → 触发调查 → 触发响应) ⚠️ 局限:执行路径难追踪;路由错误会静默失败
⑤ 共享状态
要点
多个 Agent 直接读写同一个持久化存储,无中央协调者
适合:研究综合——发现相互启发 ⚠️ 局限:可能重复劳动或无界循环,必须有显式终止条件
⭐ 这五种模式,行业里叫什么
上面五种的机制你已经知道了。但面试官、框架文档、论文报的是英文术语, 听不出来是同一件事就会白吃亏。这张表只是一层索引,不是新知识:
| 本教程叫什么 | 行业 / 框架里叫什么 | 备注 |
|---|---|---|
| 编排器-子 Agent | Supervisor / Orchestrator-Worker / Hierarchical / Manager | 最常听到的是 Supervisor。它也是第 6 章「编排器-工作者」的 Agent 版 |
| 生成器-验证器 | Generator-Critic / Evaluator-Optimizer / Reflection | 第 6 章的「评估器-优化器」是它的工作流版 |
| Agent 团队 | Crew / Team / Role-based | 「一个角色一个 Agent、各管一摊」这套叫法 |
| 消息总线 | Swarm / Group Chat / P2P | Swarm 指的就是这类去中心、谁该说话谁说话的形态 |
| 共享状态 | Blackboard / Shared Scratchpad / Shared State | 黑板架构是 1970 年代就有的老概念,不是新东西 |
| (第 6 章的路由) | Router | 分类后走不同分支,严格说是工作流不是多 Agent |
| (第 6 章并行化的投票) | Debate / Multi-Agent Debate | 多方各自作答再取共识 |
| (第 6 章的提示词链) | Pipeline / Sequential | 固定顺序的流水线 |
⚠️ 一个高频混淆:Handoff 不是一种架构,是一个动作。 它指「A 把控制权连同对话一起交给 B,之后由 B 直接和用户对话」。 它可以发生在消息总线里,也可以发生在编排器里——它回答的是「怎么交接」,不是「谁指挥谁」。
🔑 别把这张表当重点:会背这些词不代表知道什么时候不该用, 而「先做等预算对照实验」才是这一章真正想让你带走的东西(第一节)。
🧭 四、选型口诀
信息关系
🔑 不确定就用编排器-子 Agent。 它是最容易调试、最容易理解的一种。
🧠 五、编排器的两种脑子:走一步看一步,还是先出计划
上面解决的是「谁指挥谁」。还有一个正交的问题没回答:编排器(或任何 Agent)到底什么时候做计划?
教程到这里只给了两极:第 6 章的提示词链是「人预先定死的计划」, 编排器-工作者是「模型现场拆」。中间还有一档常被单独点名的模式。
| ReAct(走一步看一步) | Plan-and-Execute(先规划再执行) | ReWOO(规划与观察解耦) | |
|---|---|---|---|
| 计划是谁做的、什么时候做的 | 不做计划,每步现想 | 模型开头一次性出完整计划 | 同左,但计划里预留占位符串起各步 |
| 谁决定下一步 | 上一步的观察 | 计划(除非触发重规划) | 计划,中途不改 |
| 模型往返次数 | 每一步都要回模型 | 规划 1 次 + 每步执行(执行可交给小模型/程序) | ⭐ 规划 1 次 + 汇总 1 次 |
| 观察结果进不进上下文 | 全都进 ⚠️ | 进(可摘要) | ⭐ 不进模型,在执行器里按占位符回填 |
| 典型坏法 | 前面的观察把后面挤掉、局部最优、绕圈 | 按一个错的计划一条道走到黑 | 中途发现计划错了也改不了 |
它们各自解决什么:
-
ReAct 就是你在第 1 章写的那个循环。 它的两个问题都很实际:① 每一步的完整观察都要塞回上下文(第 4 章的腐烂), 长任务里前面的观察会把后面的挤掉;② 没有全局视野——它只知道下一步, 所以容易在两个工具之间来回打转——这就是「无效搜索 / 死循环」的来源, 护栏是第 12 章的
max_steps和显式终止条件。 -
Plan-and-Execute 用一次规划换来两样东西:全局视野(能看出第 5 步依赖第 2 步的产物) 和便宜的执行(执行阶段不需要每步都动用最贵的模型)。 ⚠️ 但它有一个结构性弱点:计划是在信息最少的那一刻做出来的。 所以它必须配一个重规划触发条件,否则执行器会硬着头皮把错的计划走完。
-
ReWOO 再往前推一步:把「推理规划」和「工具观察」彻底解耦。 规划时就把各步串起来(第 3 步要用第 1 步的结果),执行时工具返回的内容不回模型, 由执行器按占位符回填,最后才让模型看一次汇总。 ⭐ 省的是往返次数和上下文体积——这和第 8 章 「代码执行 + MCP:数据在沙箱里流转、不过模型」是同一个思想。 ⚠️ 代价也一样:不能根据观察改变路线,只适合「工具结果不影响下一步该调什么」的任务。
什么时候该触发重规划(Plan-and-Execute 少了这一环就等于把错误写死):
对照
· 某一步连续失败 N 次(不是偶发抖动,是这条路走不通)
· 观察到与计划前提【矛盾】的事实
· 预算过半但完成度明显不足
· 冒出了计划里根本没有的新子目标
🔑 把这一节压成一句:区别不在「有没有计划」,在于计划是谁做的、什么时候做的、还改不改。
流程图
⚠️ 别默认「有计划就更好」:计划本身要花一次昂贵的调用,而且信息最少的时候做的计划最容易错。 判据还是第 6 章那条——你能提前画出流程图吗?画得出来的部分才值得先规划。
🏭 六、生产级的四条真实教训
来自公开的多 Agent 研究系统实践:
① ⭐ 按复杂度显式分配投入
结果对照
② 并行化的威力
关键信息
③ ⭐ 让 Agent 改进自己的工具
📌 官方数据:一个「工具测试 Agent」重写工具描述后,任务完成时间下降 40%。
这是第 7 章「评估驱动改进循环」的多 Agent 版本。
④ 含糊的委派指令 = 重复劳动
结果对照
# 结构化委派模板
subtask = {
"goal": "找出 2026 年 Q2 三家主要竞品的定价变化",
"output_format": "每家一段,含具体价格和变化时间,300字以内",
"tools": ["web_search", "read_page"],
"boundaries": "只看官方定价页,不要看第三方评测;不要分析原因(别人在做)",
}
🚨 七、三个只有上生产才会遇到的问题
| 问题 | 表现 | 解法 |
|---|---|---|
| 状态错误会复利 ⭐ | 一个小故障级联成大规模行为异常 | 支持从出错点恢复而非从头重跑;把工具失败告知 Agent 让它自适应 |
| 非确定性调试 | 相同提示词每次决策路径不同 | 全量追踪 + 高层可观测性(只监控决策模式不看对话内容,兼顾隐私) |
| 部署协调 | Agent 几乎持续运行,标准部署会打断 | 彩虹部署——新旧版本并存、流量渐进切换 |
🏗️ 八、架构前瞻:大脑与双手解耦
- ↕
- Harness(控制循环)
- ↕
- Sandbox(执行环境)
为什么这么拆:第 12 章的命题—— harness 会编码过时的假设,所以架构必须能容纳「尚未被发明的 harness」。
实际收益(官方数据): - 凭据不进沙箱 → 提示注入偷不到密钥(第 15 章) - 容器按需配置 → 首 token 延迟 p50 降约 60%、p95 降超 90%
🕳️ 九、六个常见坑
| 坑 | 症状 | 修 |
|---|---|---|
| 没做单 Agent 对照 ⭐ | 花 15 倍钱换来的提升,其实给单 Agent 同样预算也能达到 | 先做等预算对照实验 |
| 委派指令含糊 | 子 Agent 重复劳动 | 结构化委派(目标+格式+工具+边界) |
| 不分级投入 | 简单问题也派 10 个 Agent | 编排器里显式规定复杂度分级 |
| 子 Agent 返回太长 | 主上下文照样被淹没 | 强制输出长度上限 |
| 无法定位问题 | 出错了不知道是哪个 Agent | 全量 trace + 每步标注 Agent 身份 |
| 共享状态无终止条件 | 无限循环 | 显式终止条件 + 最大轮数 |
📚 延伸阅读
- 多 Agent 协作的五种模式
- 我们如何构建多 Agent 研究系统
- 规模化托管 Agent:大脑与双手解耦
- 用一组并行 Claude 构建 C 编译器
- ⭐ 博弈论与集体决策 09 · 正常形博弈 —— 本章的多个 Agent 目标一致,难点是工程(怎么编排、怎么传上下文)。⭐ 一旦 agent 之间目标冲突,全部换一套工具:那一套讲多个有各自利益的 agent 会怎么互相算计、什么时候会卡在对谁都不好的结果上(囚徒困境),以及规则该怎么设计才防得住
👉 这一节对应的框架:CrewAI / AutoGen 把这几种协作模式做成了现成的。上它们之前先看 16b · 框架这层皮 里那份「该不该上框架」的清单。
✅ 检查点
- 多 Agent 的代价是多少?在决定用它之前该做什么对照实验?
- 多 Agent 真正的两个价值是什么?(不是"更聪明")
- 五种协作模式各适合什么?默认该选哪个?为什么?
- 子 Agent 和 Agent 团队的关键区别?
- 「按复杂度显式分配投入」是什么意思?不做会怎样?
- 结构化委派要包含哪四项?
- 状态错误复利怎么解决?
- 编排器-子 Agent、消息总线、共享状态在行业里分别叫什么?为什么说 Handoff 不是一种架构?
- ReAct、Plan-and-Execute、ReWOO 的区别是什么?Plan-and-Execute 的结构性弱点是什么、要怎么补?
👀 答案
- 约 15 倍 token。对照实验:把同样的 token 预算全给单 Agent(让它多试几轮多验证),看差距还剩多少——很多时候会大幅缩小。
- ①并行度(研究时间最多减少 90%)②上下文隔离(脏活不污染主线)。两条都不占的话就只是烧钱。
- 编排器-子Agent(分解清晰、依赖少)、生成器-验证器(标准可显式定义)、Agent团队(可分区的长期工作)、消息总线(流程由事件涌现)、共享状态(发现需互通)。默认编排器-子Agent,因为它以最小协调复杂度覆盖最广问题,且最好调试。
- 子 Agent 用完即弃;Agent 团队持久、跨任务累积上下文。团队的完成检测更复杂。
- 在编排器提示词里规定「简单查找派 1 个、复杂研究派 10+ 个」。不做的话模型会在简单问题上过度投入,这是 token 黑洞的主因。
- 目标(具体问题)、输出格式、工具指引、边界(不要做什么/别人在做什么)。
- 支持从出错点恢复而不是从头重跑;把工具失败明确告知 Agent 让它自适应。
- 编排器-子 Agent ≈ Supervisor(也叫 Orchestrator-Worker / Hierarchical);消息总线 ≈ Swarm / Group Chat / P2P;共享状态 ≈ Blackboard(黑板架构)。另外 Agent 团队 ≈ Crew/Team,生成器-验证器 ≈ Generator-Critic/Reflection。Handoff 是一个动作不是一种架构——它指「A 把控制权连同对话交给 B」,回答的是「怎么交接」而不是「谁指挥谁」,可以发生在任何一种架构里。
- 区别在于计划是谁做的、什么时候做的、还改不改:ReAct 不做计划、每步看上一步的观察(问题是观察全进上下文会腐烂,且没有全局视野容易绕圈);Plan-and-Execute 开头一次性出完整计划(换来全局视野和便宜的执行);ReWOO 再把工具观察从模型往返里解耦出来,只规划一次 + 汇总一次,和第 8 章「代码执行 + MCP」同源。Plan-and-Execute 的结构性弱点是计划是在信息最少的那一刻做出来的,所以必须配重规划触发条件:某步连续失败 N 次、观察到与计划前提矛盾的事实、预算过半但完成度不足、冒出计划里没有的新子目标。
🛑 可以停在这里
⚡ 走神救援
⭐ 多 Agent 不是更聪明,是用十几倍 token 换并行度和上下文隔离——先证明单 Agent 做不到再拆。
⚠️ 官方数据里性能方差的绝大部分由 token 用量解释——⭐ 很大一部分收益其实来自「花了更多 token」而不是架构,所以先做等预算对照实验(把预算全给单 Agent,差距往往大幅缩小)。真价值只有两个:并行度和上下文隔离;两条都不占就只是烧钱。
⭐ 编排器-子 Agent 是默认选择(协调复杂度最小、最好调试)。其余四种模式各有各的失败方式:生成器-验证器要求把标准写成具体条目(含糊必失败)、消息总线的路由错误会静默失败、共享状态必须有显式终止条件。
⭐ 另一个正交问题是计划什么时候做:ReAct 不做计划(⚠️ 观察全进上下文会腐烂、没有全局视野容易绕圈)、Plan-and-Execute 开头一次做完(⚠️ 结构性弱点是计划做在信息最少的那一刻,所以必须配重规划触发条件)、ReWOO 把规划和观察解耦(⚠️ 代价是中途改不了路线)。
⭐ 区别不在有没有计划,在于计划是谁做的、什么时候做的、还改不改。
⚠️ 必须按复杂度显式分配投入(几个 Agent、各调用几次)——不规定就会在简单问题上过度投入,这是 token 黑洞的主因。⚠️ 含糊委派等于重复劳动:「研究一下市场情况」会换回三份内容雷同的报告。
💀 生产上最贵的一条:状态错误会复利——要能从出错点恢复,而不是从头重跑。
下一节 👉 14-评测Evals.md