Part 4 · Agent Design Patterns 智能体设计

4.4 Multi-agent 何时是过度设计

难度 ★★★ 阅读 ~14 min 面试出现频率 中高 前置 4.2 Planning Loop
Core Concept 核心概念

多 agent 的收益来自并行,代价来自上下文割裂

多 agent 架构的直觉吸引力很强:把复杂任务拆给若干个「专家」,各司其职,像一个团队一样协作。但在动手之前,需要先看清它真正提供了什么、以及收走了什么。

multi-agent(多智能体)真正提供的是并行探索能力。多个 agent 各自拥有独立的上下文窗口,可以同时在不同方向上搜集信息、试验方案。对于一个「需要看 50 份资料才能下结论」的任务,单 agent 必须串行地把 50 份资料挤进一个窗口(还要面对 lost in the middle),而 5 个 subagent 可以各看 10 份、各自提炼,再汇总。这是实打实的容量扩展,不是修辞。

它收走的是共享上下文。这是多 agent 最根本、也最容易被低估的代价。同一个 agent 内部,第 7 步天然知道第 3 步发生了什么——信息是连续的。而两个 agent 之间,信息只能通过它们交换的那几段文字传递。所有没被写进消息里的隐含判断、试过但放弃的路径、微妙的上下文,全部丢失。

把它类比成团队协作会更清楚:一个人做完一件事,和五个人分工做完同一件事,后者需要额外付出沟通成本,而且沟通必然有损。人类团队之所以还值得分工,是因为人有真正的并行能力和专业差异。多 agent 也一样——只有当并行带来的收益,大于上下文割裂带来的损失时,它才是对的。

单 agent:信息连续,但受单一上下文容量限制 一条连续的上下文 步骤 1 步骤 2 步骤 3 步骤 4 …直到窗口装不下 多 agent:容量扩展,但每条边都是有损的信息瓶颈 主 agent · 编排与汇总 有损 有损 有损 subagent A 独立上下文 subagent B 独立上下文 subagent C 独立上下文
图 1 · 两种架构的信息流。橙色的每一条边都是一次有损压缩——subagent 看到的一切,最终只能以一段文字回传。任务的子部分越是互相依赖,这些边上损失的信息就越关键。

判断标准:子任务之间的耦合度

把上面的分析收敛成一条可操作的判断线:

✓ 适合多 agent✗ 不适合多 agent
子任务关系互相独立,可并行紧密依赖,后一步取决于前一步的细节
信息流向读取为主(搜集、调研、检索)写入为主(修改同一份产物)
汇总方式结果可以简单拼接或归纳需要全局一致性,局部结果无法独立成立
典型任务多方向资料调研、多来源信息交叉验证、大规模并行检索写代码、编辑一份文档、需要通盘权衡的方案设计

写代码是最经典的反例。修改一个函数需要知道其他文件里的约定、刚才改过什么、整体设计意图是什么。让三个 agent 并行改三个文件,它们会各自做出局部合理但彼此冲突的决定——变量命名不一致、接口假设不匹配、重复实现同一个工具函数。合并这些冲突的成本,往往高于一开始就串行做。

在考虑多 agent 之前,先试三件事

大量多 agent 设计其实是在解决本可以更简单解决的问题:

① 更好的工具。很多「需要一个专门的 agent」的场景,本质是需要一个更好的工具。「让一个 SQL agent 负责查数据」通常不如「给主 agent 一个设计良好的查询工具」(4.1)——后者少一层上下文传递,少一处失败点。

② 代码编排 + 单 agent。如果流程是确定的,用代码写死编排逻辑,每一步调用单 agent 或直接调用模型。确定性的部分交给代码,不确定的部分才交给模型(4.2)。这比让一个「主 agent」去动态调度可靠得多,也便宜得多。

③ 单 agent + 上下文压缩。如果问题只是上下文装不下,先试 4.3 的压缩与外部化策略。这比引入多 agent 的复杂度低一个数量级。

Case Study 真实案例

一份公开的多 agent 工程报告

Anthropic 工程博客 · 多 agent 研究系统的构建与代价

Anthropic 公开分享过他们构建多 agent 研究系统的工程经验。这份材料的价值在于,它同时给出了收益和代价——这在多 agent 的讨论中很少见。

+90.2%
Opus 4 主 agent + Sonnet 4 子 agent,相对单 agent Opus 4,在其内部研究类评测上
~15×
多 agent 相对普通对话的 token 消耗(单 agent 约 4×)
80%
token 用量本身可解释的性能方差(BrowseComp 分析)
95%
token 用量 + 工具调用次数 + 模型选择三者合计可解释的方差

务必连条件一起记:90.2% 是特定模型搭配(Opus 4 领队、Sonnet 4 做子 agent)对单 agent Opus 4 的对比,评测是他们内部的研究类任务集,其典型形态是需要多个独立方向并行展开的广度优先查询(例如「找出标普 500 信息技术板块所有公司的董事会成员」)。这个任务形态本身就是多 agent 的最佳场景——换成紧耦合任务,结论会完全不同。

第三、四个数字才是这份报告里最有信息量的部分。如果 token 用量单独就能解释约八成的性能方差(再加上工具调用次数与模型选择,三者合计解释 95%),那么意味着:多 agent 的大部分收益并非来自「多个专家协作」这种架构魔法,而是来自「投入了多得多的计算」。这个认识会立刻改变你的评估方式——比较多 agent 与单 agent 时,必须在相当的 token 预算下比较,否则你测的只是「花更多钱效果更好」,那几乎是必然的。

关于适用边界,这份材料的判断与本章正文一致:多 agent 擅长可以拆成并行研究分支的问题,而对紧密耦合的任务(如写代码)效果较差。经济性上的结论也很直白——15 倍的 token 消耗意味着它只适用于任务价值明显高于计算成本的场景,例如法律尽调、竞品情报、生物医学文献综述这类高价值研究工作。

怎么用这份材料:不要把 90.2% 当作「多 agent 更好」的证据搬到自己的场景。要记住的是那个三元组——收益(并行探索)、代价(约 15× token)、适用条件(任务可并行拆分且价值高)。拿这三条去对照你自己的任务,通常会发现结论是「不该上」。

条件说明:上述数字来自厂商自身的公开工程报告,评测任务、基线设置与模型配置均由该团队定义,不构成跨场景可比的通用结论。把它当作一个有参考价值的工程案例,而不是一项独立验证的基准结果。

来源:Anthropic 工程博客 "How we built our multi-agent research system"。数字(+90.2%、约 15× token、80%/95% 方差解释)及其条件均引自该文原文;90.2% 为 Opus 4 主 agent + Sonnet 4 子 agent 对单 agent Opus 4 在其内部研究评测上的结果,方差分析出自 BrowseComp。均为厂商自报结果,本书未独立复现。
Tooling Sidebar 工具层
多 agent 编排的现状(会过期,正文不依赖本区块) 截至 2026-09

编排框架:LangGraph(以图结构定义状态与转移)、CrewAI(角色分工抽象)、AutoGen(多方对话式协作;已进入维护模式,官方建议新项目改用其后继 Agent Framework,后者 1.0 于 2026-04 发布)等各有侧重。选型前先确定你需要的是哪种拓扑——是「主从(orchestrator-worker)」「流水线」还是「自由对话」。这三种的可控性与调试难度差别极大,其中自由对话式最难在生产中控制。

最实用的形态是 orchestrator-worker:一个主 agent 负责拆解与汇总,若干 worker 并行执行独立子任务,worker 之间不互相通信。它的信息流是树状而非网状,可预测、可限流、可调试。多方自由对话虽然更「智能」,但轮数与成本难以预估,且极易陷入互相附和的循环。

成本控制是硬需求:多 agent 的成本方差极大,必须设置全局 token 预算与subagent 数量上限,并在超限时优雅降级。没有预算闸门的多 agent 系统会在遇到复杂输入时产生离谱账单。

可观测性要求更高:需要能看到每个 subagent 的完整轨迹以及它们之间传递的消息。只记录最终输出的多 agent 系统基本无法排查——你连是哪个 subagent 出的错都不知道。这类系统的调试成本本身就是它的一项重要代价。

Quiz 自测

章末自测

场景判断四个需求,各该用单 agent 还是多 agent?A. 调研某技术方向,需查阅几十个来源;B. 重构一个包含 8 个文件的模块;C. 处理客服工单:分类 → 检索知识库 → 生成回复;D. 对一份财报做多角度分析(财务、竞争、风险)。

A 技术调研 → 多 agent 合理。几十个来源可以并行查阅,每个来源的分析互相独立,结果可归纳汇总——三条判据全部满足。且这类任务是读取为主,不存在写冲突。这是多 agent 的标准适用场景。

B 重构模块 → 单 agent。典型的紧耦合任务:修改一个文件需要知道其他文件的接口约定与刚做出的设计决定。并行修改会产生命名不一致、接口假设冲突、重复实现等问题,合并冲突的成本高于串行完成的成本。如果上下文装不下 8 个文件,正确做法是改进检索与压缩(4.3),而不是拆 agent。

C 客服工单 → 都不是,用代码编排。这是本题的陷阱。「分类 → 检索 → 生成」是一个完全确定的流程,步骤固定、顺序固定、无需动态规划。正确做法是代码写死这三步,每步调用模型或直接调用检索——零 agent,零循环。给它套多 agent 架构是纯粹的过度设计,会让一个可预测的流程变得不可预测。

D 财报多角度分析 → 多 agent 可行,但先试单 agent。三个角度确实相对独立、可并行、可汇总,符合适用条件。但要先问一句:单 agent 分三次调用行不行?如果财报能放进一个上下文窗口,那么「同一份材料、三个不同的分析 prompt、并行调用」就能拿到全部并行收益,而不需要引入 agent 编排的复杂度——这本质上是三次独立的模型调用,不是多 agent。只有当每个角度都需要各自去检索大量额外材料时,真正的多 agent 才有必要。

概念题「多 agent 的性能提升中,约八成方差可由 token 用量解释」——这个发现对你评估多 agent 方案有什么方法论上的影响?

核心影响:它把「架构对比」变成了一个必须控制变量的实验。

如果性能差异主要由投入的计算量驱动,那么「多 agent 比单 agent 好」这个结论在不控制 token 预算的情况下几乎没有信息量——你只证明了花更多钱效果更好,而这不需要多 agent 也能做到。

正确的对比方式:给单 agent 相当的 token 预算,让它用其他方式把这些预算花掉——更多轮的 ReAct 循环、更多次的自我检验、更大的检索召回量、对同一问题做多次采样再归纳。如果单 agent 在同等预算下表现相当,那么多 agent 带来的只是复杂度。

这个方法论可以推广:任何声称「新架构效果更好」的对比,都要先问「它是不是只是花了更多计算?」。这在 agent、prompt 技巧、集成方法的评估中普遍适用,也是识别真实创新与包装的有效手段。

反过来的实用推论:如果你确实愿意为某个任务花 15 倍的计算,那么多 agent 是把这些计算有效花出去的一种方式——尤其当单 agent 已经受限于上下文容量而无法继续吸收更多计算时。这才是多 agent 真正不可替代的地方:突破单一上下文的容量天花板。

面试题改编「你会怎么设计一个多 agent 系统?」

这类开放题的最佳回答,是先质疑前提再给设计。

第一步:先论证为什么需要多 agent。明确说出三个必要条件——子任务可并行、彼此独立、结果可汇总;并说明已排除三个更简单的替代方案:更好的工具、代码编排 + 单 agent、单 agent + 上下文压缩。直接开始画架构图的候选人,通常没意识到多 agent 是最后的手段。

第二步:选最简单的拓扑。默认 orchestrator-worker——主 agent 拆解与汇总,worker 并行执行且互不通信。树状信息流可预测、可调试;避免多方自由对话,它的轮数和成本都难以约束。

第三步:设计 agent 之间的接口。这是最关键也最常被忽略的部分。因为每条边都是有损压缩,必须明确规定 worker 回传什么——结构化的结果 + 依据来源 + 置信度 + 未能完成的部分,而不是一段自由文本。接口设计的质量直接决定系统上限。

第四步:闸门与降级。全局 token 预算、subagent 数量上限、单个 worker 的超时;超限时优雅降级(返回已完成部分而非失败)。

第五步:可观测性与评估。记录每个 worker 的完整轨迹与传递的消息;评估时在同等 token 预算下与单 agent 对比,并按 4.5 的方法同时看结果指标与轨迹指标。

加分:主动说明什么情况下你会放弃多 agent 方案——例如发现子任务其实互相依赖,或发现单 agent 在同等预算下表现相当。