fedorthinks

速成课 · No. 29

单个智能体在一个循环里处理一个目标。有些问题比这更大——工具太多、需要的不同技能太多、一个上下文装不下。Multi-agent 系统把工作拆分给由一个 orchestrator 协调的多个专门智能体。做对了,它更可靠、更可扩展;条件反射式地上,它会成倍放大每一种故障模式。这里讲的是:多个智能体何时胜过一个,以及如何把它们接起来。

19 个概念 · 每个都有一张图 · 结尾有速查表

§ 01

在把智能体接到一起之前,先理解它要解决的问题。Multi-agent 系统的存在有一个具体的理由——没有那个理由就伸手去用,正是它出错的方式。

地图:七组里的 19 个概念

一张地铁图:先看整条线路,再一站一站地坐。

这门课分七组。第一,为什么要拆——为什么要把工作分给多个智能体,以及你为此付出什么。然后是系统里的三种角色:负责拆分和汇总的 orchestrator、做窄任务的 worker,以及它们之间的 handoff。接着是把智能体接起来的三种形态、multi-agent 会成倍放大的三种故障模式,最后是实践:什么时候该拆,什么时候不该拆。

1 · Why splitSpecializationContext/tool overloadCoordination cost2 · OrchestratorOrchestratorAssemblyCoordination layer3 · WorkersWorker agentPer-agent evalsDepth over breadth4 · HandoffsHandoffClean handoffContext isolation5 · PatternsSequentialParallel / fan-outHierarchical6 · Failure modesCompounding errorCoordination overheadTracing7 · PracticeSingle agent by default
七组概念——第 1–7 章依次讲它们。

如何阅读每个概念

一本护照:每个人的栏目都相同,所以容易比较。

从这里开始,每个概念都有同样的几部分:它的英文名(记住它——文档和论文就这么叫)、一幅生活中的画面、一张图,以及一张带有问题、思路、例子、代价和关联等栏目的卡片。这门课的核心想法:更多的智能体既成倍放大能力,也成倍放大出错的方式——所以只有当一个智能体真的不够用时,才拆。

Specialization——什么都做的一个智能体,什么都做不好

一个人被要求同时当建筑师、水管工、电工和检查员,对比一支小队,每个专家把一件事做好。

这就是 Specialization(专门化)的概念。单个智能体的职责太宽——所有工具、各种任务、一个巨大的 prompt——每一步都有太多出错的方式。活越大,它的可靠性就越低。

把工作拆给专门的智能体,每个只负责一件窄任务,能让整个系统更强、更可靠——就像一队专家胜过一个疲于奔命的多面手。专门化是 multi-agent 存在的核心理由。

ONE agent, every jobGeneralist agentall tools · one giant promptsearchcodecheckformatmany ways to fail at every stepCrew of specialistsResearchersearchCoderwrite codeCheckercheck factsFormatterformat outputeach does one thing well
左:一个智能体包办所有活——到处都可能出错。右:一支小队,每个只做一件事。
ConceptSpecialization· 专门的智能体
问题
职责宽泛的一个智能体——所有工具、一个巨大的 prompt——经常出错。
思路
把工作拆成窄的智能体,每个把一件事做好。
例子

不用一个"什么都做的智能体",而是一个研究员、一个程序员、一个事实核查员和一个排版员。

代价
现在需要协调——得有东西来拆分工作并汇总。
关联

使用 Orchestrator 和 Worker Agent 的理由;代价是 Coordination Cost。

Context & Tool Overload——上下文和工具让单个智能体不堪重负

一张桌子堆满了十种不同工作的所有文件和所有工具——工作的人花在整理杂物上的力气,比干活还多。

有两个具体的限制把你推向单个智能体之外——这就是 Context & Tool Overload。第一:一个智能体的上下文窗口被任务各个部分的所有内容塞满,而塞得过满的上下文会拉低质量(上下文工程的问题)。第二:拿着所有工具的单个智能体,每一轮都得从一份巨大的菜单里选——菜单越长,选得越差。

拆开之后,每个智能体只带它那份窄任务所需的上下文和工具——干净、专注、可靠。

Single agenttask Atask Btask Cdocs Adocs Bhistorylogstool specs+ more…tool 1tool 2tool 3tool 4tool 5tool 6tool 7tool 8tool 9tool 10tool 11tool 12context windowtool menuwindow full · menu hugeSplit: each agent carries lessAgent Atask Adocs At1t2t3Agent Btask Bdocs Bt4t5t6small window · 3 tools eachclean · focused · reliable
一个智能体:窗口里塞满一切,还有十二个工具的菜单。拆开后,每个都是小窗口加三个工具。
ConceptContext & Tool Overload· 上下文太多、工具太多
是什么
单个智能体的两个限制:上下文窗口塞得过满,工具菜单过长。
为什么重要
塞满的上下文会拉低质量,过长的菜单让每一轮的工具选择都更差。
例子
一个客服智能体的窗口里放着账单、技术文档和全部历史记录,外加二十个工具。
坑
先试着收窄这一个智能体的工具、清理它的上下文——有时这就够了。
关联
用 Context Isolation 和窄的 Worker Agents 来解决。

Coordination Cost——专门化是收益,协调是代价

接力队比一个人跑四棒更快——但前提是交接棒练习过;接力棒一掉,比赛就输了。

multi-agent 的收益是专门化:窄的智能体各自把一件事做好。代价是 Coordination Cost(协调成本):现在得有东西来拆分工作、路由、在智能体之间传递上下文,并汇总结果。而这种协调本身就是复杂性和故障的来源。

整套功夫就是:拿到专门化的收益,同时不让协调成本把它吃掉。当收益盖不过成本时,一个智能体才是正确答案。

multi-agent pays off only when the gain outweighs the costSpecializationnarrow agentsCoordinationsplit, route, pass, mergethe gainthe cost
一杆秤:只有当专门化的收益大于协调成本时,multi-agent 才划算。
ConceptCoordination Cost· 协调的代价
是什么
让智能体一起工作所需的一切:拆分、路由、传递、汇总。
为什么重要
协调本身就是复杂性和故障的来源。
例子
只有交接棒练习过,接力才能胜过一个人跑。
坑
如果它盖过了收益,multi-agent 让系统变差,而不是变好。
关联
具体体现为 Coordination Overhead 和 Compounding Error。

什么都做的一个智能体什么都做不好——上下文太多,工具太多。多个专门的智能体可以更强,但代价是协调,而协调必须值得这份收益。

§ 02

multi-agent 系统最常见的形态,中心有一个协调者。理解了 orchestrator,就理解了这类系统大半的接法。

Orchestrator——分派工作的协调者

工地上的总承包商:他们不砌砖,也不接配电箱——他们把项目拆成一项项工作,分派给合适的专业人员。

这就是 Orchestrator 模式(也叫协调者)。它是负责统筹的智能体:接过整体目标,拆成子任务(分解),再把每个子任务路由给合适的专门智能体。它自己不做专门的活;它的工作是分解和指挥。

这呼应了智能体课程里的 plan-and-execute 思路,只是规模更大——一个有能力的智能体负责规划和委派,专注的 worker 负责完成各个部分。

GoalOrchestratordecompose · routeSearch workersubtask 1Code workersubtask 2Check workersubtask 3it plans and delegates — it doesn't do the specialist work
orchestrator 把目标拆成子任务,把每个交给对应的 worker。它自己不做专家们的活。
PatternOrchestrator· 协调者、orchestrator–worker
问题
需要不同技能的大目标,不能直接丢给一个窄的智能体。
思路
一个主智能体把目标拆成子任务,并把每个路由给合适的 worker。
例子
研究类 orchestrator 把子话题分给几个研究智能体。
代价
多一个智能体,多一层可能出问题的地方。
何时使用
工作确实能拆成需要不同技能或工具的几块。
关联

放大版的 Plan-and-execute;通过 Handoffs 指挥 Worker Agents;通过 Assembly 合并结果。

Assembly——orchestrator 合并各 worker 的结果

编辑向不同的作者约稿,再把各部分合成一篇连贯的文章——稿子交回来,得有人把它们变成一个整体。

orchestrator 的第二项工作是 Assembly(汇总,也叫综合):收集各个 worker agent 返回的内容,合并成一个连贯的最终结果。研究类 orchestrator 可能把子话题发给几个智能体,再把它们的发现综合成一个答案。

这个收集合并的步骤,是各条独立的工作流变成一个输出的地方——做好它(化解冲突、去掉重复)和拆分一样重要。

Worker Afinding 1Worker Bfinding 2Worker Cfinding 3Orchestratorcollect + combineresolve conflictsdrop duplicatesFinal answerone coherent result
三个 worker 的发现汇到 orchestrator:它化解冲突、去掉重复,给出一个答案。
ConceptAssembly· 综合、合并结果
是什么
orchestrator 把各 worker 的输出变成一个结果的步骤。
为什么重要
没有好的汇总,你得到的不是答案,而是一堆互相矛盾的碎片。
例子
三个智能体研究了三个子话题;orchestrator 写出一份没有重复的报告。
坑
汇总常被当成细节——但冲突和重复恰恰在这里冒出来。
关联
Orchestrator 的后半部分;Parallel 的最后一步。

Coordination Layer——协调层才是真正的架构

管弦乐队不是一堆出色的独奏者——而是指挥和乐谱在决定谁在何时演奏。协调就是音乐。

在 multi-agent 系统里,价值和难点都转移到了 Coordination Layer(协调层):谁在何时运行、用什么输入、结果如何合并。大家的注意力在各个智能体上,但系统能不能工作,取决于围绕它们的编排——路由、上下文传递、错误处理。

和单个智能体一样,模型是容易的部分;可靠性是赢在还是输在它周围的结构上。

Coordination layer — the real architectureRoutingwho runs whenContext passingwith what inputAssemblyhow results combineError handlingwhen a step failsAgent 1Agent 2Agent 3Agent 4Agent 5the agents get the attention — the orchestration decides if it works
智能体之上是协调层:路由、上下文传递、汇总、错误处理。系统能否工作由它决定。
ConceptCoordination Layer· 编排
是什么
围绕智能体的代码和规则:谁在何时运行、用什么输入、结果如何合并。
为什么重要
系统能否工作在这里决定,而不是在单个智能体里。
例子
智能体都很出色,但某个 worker 拿到了错误的输入——整个系统输出的都是垃圾。
坑
把心思花在打磨智能体的 prompt 上,却把协调交给运气。
关联

包含 Orchestrator、Handoff 和 Assembly;用 Multi-agent Tracing 来调试。

orchestrator 分解目标,把每个子任务路由给专门的 worker,再汇总它们的结果。协调层——而不是单个智能体——才是真正的架构。

§ 03

orchestrator 指挥的智能体,在每个都很窄的时候最有用。让 worker 保持专注的纪律,正是整个系统可靠、可测试的原因。

Worker Agent——每个 worker 只有一项明确的工作

一间厨房,每项工作一个工位——一个人管酱汁,一个管烤架,一个管摆盘——每人精通自己那个窄角色,而不是样样手忙脚乱。

Worker Agent 是一个专门的智能体,有一项窄而明确的工作:搜文档、写代码、核查事实、排版输出。因为它的职责小,所以它的 prompt 专注,工具很少,行为可预测。

orchestrator 交给它一个明确的子任务,它做这一件事,然后返回结果。窄的 worker 是积木——每块都简单到能做对、能信任。

Focused promptFew toolsSubtaskfrom orchestratorWorker agentone clear jobResultback to orchestratorsmall mandate → predictable behavioursimple enough to get right — and to trust
一个 worker:来自 orchestrator 的子任务进来,里面是专注的 prompt 和几个工具,结果出去。
TermWorker Agent· 专家智能体
是什么
只有一项窄工作、一个短 prompt 和很少工具的智能体。
如何工作
从 orchestrator 拿到明确的子任务,完成它,并返回结果。
例子

一个搜文档的智能体、一个写代码的智能体、一个核查事实的智能体、一个排版的智能体。

坑
worker 慢慢地"再多加几个工具",又变回了多面手。
关联

由 Orchestrator 指挥;用 Per-agent Evals 检查;遵循 Depth over Breadth。

Per-agent Evals——窄的智能体更容易测试、更值得信任

你可以彻底检查一位专家的工作,因为他的活小而明确——比审查一个什么都沾点边的多面手容易得多。

窄的智能体比庞杂的智能体容易评估、调试和信任得多。有了一项明确的工作,你就能给它写 evals——这就是 Per-agent Evals 的做法,给每个智能体单独做测试。你能准确看到它在哪里失败,并单独修好它——和智能体课程里同样的可靠性论证,只是用在每一块上。

multi-agent 系统只有在每个 worker 单独都可靠时才可靠,而当每个只做一件范围明确的事时,这容易得多。

Search agentevals: passCode agentevals: passCheck agentevals: failWhole systemreliable only if each issee exactly where it fails — fix that one in isolation
每个 worker 都有自己的 evals。某个失败时,你能准确看到是哪一个,并在不碰其他的情况下修好它。
PracticePer-agent Evals· 给每个 worker 的测试
是什么
给每个 worker 单独准备的一套测试,而不只是给整个系统。
怎么做
为每项窄工作准备自己的"输入 → 期望输出"样例,并检查结果。
例子
事实核查员的 evals 失败了——你修它的 prompt,不去动其他智能体。
坑
只测系统的最终输出:失败时,你分不清该怪哪个智能体。
关联
只有每个 Worker Agent 都够窄才有效;与 Multi-agent Tracing 互补。

Depth over Breadth——在一项工作上的深度胜过在多项工作上的广度

一个外科医生只做一种手术,做上几千次,胜过偶尔做一次的多面手——专注带来的可靠性,广度给不了。

贯穿这一切的原则是 Depth over Breadth(深度胜过广度):一个反复做一件事的专注智能体,比偶尔做很多事的宽泛智能体更可靠。这就是为什么要分解——不是为了多出一些智能体,而是为了让每个都窄到真正擅长自己那一块。

如果某个 worker 的工作仍然宽到不可靠,答案通常是再拆细,而不是给它堆更多工具。

PrincipleDepth over Breadth· 窄胜过宽
是什么
只做一件事的窄智能体,比做很多事的宽智能体更可靠。
为什么重要
这正是分解的意义——不在于智能体的数量,而在于它们的窄度。
例子
一个"调研并写报告"的智能体总是出岔子——把它拆成"调研"和"写作"。
坑
用更多工具去修一个不可靠的 worker——那只会让它更宽,而不是更好。
关联
Specialization 和 Worker Agent 的基础。

worker agent 是窄的专家——一项明确的工作、专注的 prompt、很少的工具——这让每个都可测试、可信任。在一项工作上的深度,胜过在多项工作上的广度。

§ 04

智能体的好坏,取决于它们彼此传递的东西。工作和上下文在它们之间怎么流动——干净还是凌乱——决定了系统是保持连贯,还是退化成噪声。

Handoff——在智能体之间传递工作

接力跑者交接棒:交接本身就是一门技术,赢得比赛的是一次干净的交接,而不只是跑得快的选手。

Handoff(交接)是一个智能体把工作交给另一个的那一刻——orchestrator 交给 worker,或者一个智能体直接交给下一个。传递的是子任务和完成它所需的上下文。

handoff 是很多 multi-agent 故障发生的地方:如果接收方没拿到它需要的东西,或者拿到的是一个含糊的版本,不管这个智能体多好,它的输出都会是错的。交接是设计中的一等公民,不是细节。

the exchange is a first-class part of the designAgent Ae.g. orchestratorHandoffsubtask + contextAgent Be.g. workermuddled handoff → wrong output, however good B is
一次 handoff 把子任务和上下文从智能体 A 带给智能体 B。含糊的 handoff 意味着错误的结果,哪怕 B 很强。
TermHandoff· 在智能体之间传递工作
是什么
工作和上下文从一个智能体转到另一个的那一刻。
如何工作

orchestrator → worker,或智能体 → 下一个智能体:子任务加上它所需的上下文。

例子
研究智能体把找到的事实和任务"写这一节"交给写作智能体。
坑

很强的智能体拿到糟糕的输入,就会给出糟糕的结果——被怪罪的是智能体,出错的却是 handoff。

关联

要做成 Clean Handoff;它让 Context Isolation 成为可能;每次 handoff 都是 Compounding Error 的一步。

Clean Handoff——传干净、有结构的上下文,而不是全部

一次好的交底,只给下一个人完成任务所需的东西——而不是把之前每场对话的完整记录丢给他去翻。

诱惑在于把到目前为止的全部历史都传给每个智能体,但这会在每个智能体内部重现上下文塞得过满的问题。更好的做法是 Clean Handoff(干净交接):给接收方一份专注、有结构的摘要,只含它需要的东西——相关事实和具体任务——而不是原始的信息洪流。

这让每个智能体的上下文保持紧凑、专注,而这正是当初拆分之所以值得的原因。

✗ pass the whole historyAgent AFull historyevery turn, every tool outputAgent Boverloaded again✓ clean handoffAgent ABriefrelevant facts + the taskAgent Bfocused context
上:整段历史被倒给智能体 B——又一次过载。下:一份简短的事实和任务摘要——B 的上下文保持干净。
PracticeClean Handoff· 专注的简报
问题
传递全部历史会让下一个智能体的上下文过载。
思路
传一份简短有结构的摘要:所需的事实 + 具体任务。
例子
不传 40 轮对话,而是"事实:…;任务:写定价这一节,不超过 300 字"。
代价
得有人决定什么重要——还可能不小心漏掉需要的东西。
何时使用
每次 handoff 都默认这样做。
关联
做 Handoff 的正确方式;正是它带来了 Context Isolation。

Context Isolation——每个智能体有自己干净的上下文

分开的工作间,每间只有那个房间的工作所需的材料——这样没人会被其他所有任务的杂物分心或搞糊涂。

multi-agent 的一个实在好处是 Context Isolation(上下文隔离):每个智能体在自己干净的上下文里工作,只看到它的工作所需的东西,而不是整个系统积累下来的一团乱。这也是拆分能提高可靠性的原因之一——它避免了单个长时间运行的智能体里逐渐积累的 context rot(上下文腐烂)。

但只有 handoff 做得规范,你才能得到这个好处;要是把一切都传给所有人,你就是在用额外的步骤重建那个单个过载智能体的问题。

Research roomAgentresearch tasksource docsCode roomAgentcode taskrepo filesReview roomAgentreview taskthe drafteach agent sees only what its job needspass everything to everyone → one overloaded agent again
三个房间:每间里,智能体只看到自己的任务和材料。把一切都给所有人,就又回到一个过载的智能体。
ConceptContext Isolation· 分开、干净的上下文
是什么
每个智能体在自己干净的窗口里工作,里面只有它的任务。
为什么重要
不会像单个长时间运行的智能体那样积累 context rot。
例子
审阅智能体只看到草稿和评审标准——看不到搜索日志或失败的代码尝试。
坑
只有配合干净的 handoff 才有效;"所有东西给所有人"会毁掉它。
关联
Context & Tool Overload 的答案;建立在 Clean Handoff 之上。

handoff 在智能体之间传递工作,而它们正是 multi-agent 常出问题的地方。传一份只含所需内容的干净、有结构的摘要,让每个智能体保持拆分本该带来的那种专注的上下文。

§ 05

multi-agent 系统是按几种反复出现的形态接起来的。了解其中三种主要的——以及各自何时合适——就知道了大半该怎么组织协调。

Sequential——分阶段的流水线

一条装配线:每个工位做自己的那部分,按固定顺序把产品传给下一个,直到最后成品下线。

Sequential(顺序)模式把智能体按固定顺序串起来:智能体 A 的输出喂给智能体 B,B 的输出再喂给智能体 C。先是起草智能体,再是编辑智能体,再是事实核查智能体。

它是最简单的 multi-agent 形态,也最可预测,适合工作有必须按顺序发生的自然阶段的情形。它本质上是一条专家流水线——当步骤固定时,它比每次都重新决定顺序的循环更可靠。

InputDrafteragent AEditoragent BFact-checkeragent CDoneA's output feeds B, B's output feeds C — always in this order
一条顺序流水线:起草 → 编辑 → 事实核查。顺序永远一样。
PatternSequential· 流水线、智能体链
问题
工作有必须严格按顺序进行的阶段。
思路
一条智能体链:前一个的输出是后一个的输入。
例子
起草智能体 → 编辑智能体 → 事实核查智能体。
代价
比 parallel 慢;早期阶段的错误会沿链往下传。
何时使用
步骤固定且彼此依赖。最简单的形态。
关联
像架构模式里的 Pipe-and-Filter;每个衔接处都是一次 Handoff。

Parallel——扇出再汇集

把同一个调研问题同时发给几位助手,再把他们的发现收到一起——许多人同时工作,最后合并结果。

Parallel(并行)模式让多个智能体同时处理相互独立的部分,然后汇集它们的结果——先 fan-out(扇出),再 gather(汇集)。调研五个子话题、处理很多条目、获取几个独立的视角:这些并行做都比一个接一个更快。

orchestrator 拆分工作,worker 同时运行,结果再合并。当各部分互不依赖且速度重要时,parallel 最能发挥作用。

OrchestratorsplitSubtopic 1workerSubtopic 2workerSubtopic 3workerSubtopic 4workerSubtopic 5workerfan-outall run at the same timegatherGathermerge results
扇出:orchestrator 分发五个子话题,worker 同时运行。汇集:结果合并成一个。
PatternParallel· fan-out / gather
问题
有很多相互独立的部分,一个一个做太慢。
思路
把各部分同时交给几个智能体,再汇集结果。
例子
并行调研五个子话题,再把发现合并成一份报告。
代价
同时发出更多模型调用;汇总时必须化解各结果之间的冲突。
何时使用
各部分互不依赖,且速度重要。
关联
最后一步是 Assembly;Orchestrator 负责扇出和汇集。

Hierarchical——orchestrator 的 orchestrator

公司的组织架构图:经理指挥组长,组长各自指挥自己的员工——协调分层嵌套,用于一层装不下的大工作。

Hierarchical(层级)模式把协调嵌套起来:顶层 orchestrator 把活委派给子 orchestrator,各自管理自己的 worker。这样靠一层层分解,来处理真正庞大复杂的任务,就像一个组织那样。

它是最强大的形态,也是最复杂的——更多协调,更多出错的地方——所以只有当任务大到确实需要嵌套分解时才用它。大多数系统用 sequential 或 parallel 就够了;层级是留给少数不够用的情形。

Top orchestratorSub-orchestratorWorkerWorkerWorkerSub-orchestratorWorkerWorkerWorkermost powerful, most complex — only for genuinely big tasks
顶层 orchestrator 指挥子 orchestrator,它们再指挥各自的 worker。三层协调。
PatternHierarchical· 嵌套的 orchestrator
问题
任务大到一个 orchestrator 拆不开,也撑不住。
思路
顶层 orchestrator 委派给子 orchestrator,每个都有自己的 worker。
例子

一个大型研究项目:顶层智能体把它分成几个领域,每个领域有自己的协调者和研究员。

代价
最复杂的形态:更多协调,更多出错的地方。
何时使用
只有当任务确实需要嵌套分解时。很少用。
关联

Orchestrator 嵌套在自己里面;每一层内部是 Sequential 或 Parallel。

sequential 把智能体串成固定的流水线;parallel 把独立的工作扇出再汇集;hierarchical 为大任务嵌套 orchestrator。用工作真正需要的最简单的形态。

§ 06

multi-agent 很诱人,也常被滥用。更多的智能体不只是增加能力——它们成倍增加系统出错的方式,而忽视这一点,正是这类系统悄悄失败的原因。

Compounding Error——步骤越多,误差累积越多

更长的接力有更多次交接,就有更多机会掉棒——每多一次交换,就多一个让整场跑失败的地方。

这就是 Compounding Error(误差累积)的概念。单个智能体在一条长链上本来就只有一部分时候能成功(智能体课程里的可靠性问题),而 multi-agent 让链更长:更多智能体、更多 handoff、更多步骤,每一步都可能失败,并把错误传给下游。

可靠性沿链条相乘,所以增加智能体可能降低整体成功率,除非每一块和每次 handoff 都扎实。更多的智能体意味着更多误差累积的面,而不是自动意味着更多能力。

if every step succeeds 95% of the time (illustrative)1 step95%3 steps86%6 steps74%10 steps60%success multiplies down the chain: 0.95 × 0.95 × …
一个示意性的例子:如果每一步成功率为 95%,一条 10 步的链只有约 60% 的成功率。
ConceptCompounding Error· 沿链条相乘的误差
是什么
成功的概率一步步相乘,所以长链更容易失败。
为什么重要
每多一个智能体、每多一次 handoff,就多一个小于 1 的乘数。
例子
每步 95%,三步后约 86%,十步后约 60%。
坑
以为更多的智能体总是意味着更多的能力。
关联

随每次 Handoff 增长;所以 Sequential 要保持短,Hierarchical 很少用。

Coordination Overhead——协调有它自己的开销和成本

为协调五个团队开的一场会,可能比活本身还贵——过了某个点,协调比干活更费劲。

这就是 Coordination Overhead(协调开销)。每个智能体都有自己的模型调用、自己的延迟、自己的成本——而编排又在上面再加一层:路由、handoff、汇总、重试。同一个任务,multi-agent 系统可能比单个智能体慢得多、贵得多,有时还没有更好。

如果专门化的收益没有明显盖过这些额外的成本和延迟,那么更简单的单个智能体才是更好的工程选择。

Single agentmodel callsMulti-agentmodel callsroutinghandoffsassemblyretriescoordination overheadmore latency and spend — sometimes for no better answer
同样的活,但 multi-agent 版本在上面又加了路由、handoff、汇总和重试——更多延迟和花费。
ConceptCoordination Overhead· 编排的额外成本
是什么
花在路由、handoff、汇总和重试上的额外模型调用、延迟和金钱。
为什么重要
系统可能变得比一个智能体更慢、更贵——却没有变得更好。
例子
一个简单的问题要经过一个 orchestrator 和三个 worker,而不是一次调用。
坑
拆分前后不衡量成本和延迟。
关联

Coordination Cost 的具体形态;支持 Single Agent by Default 的论据。

Multi-agent Tracing——更难追踪和调试

追踪一个包裹很容易;在一张由仓库、卡车和交接构成的网里追查故障,是另一回事,难得多。

multi-agent 系统出了问题,要找到在哪里,比单个智能体难得多:故障可能在任何一个 worker、任何一次 handoff,或编排本身。所以可观测性变得必不可少——这就是 Multi-agent Tracing 的做法:跨智能体追踪一个请求,并记录每一次 handoff。

这种调试成本是代价的真实组成部分。一个你无法追踪的系统,就是一个你无法可靠修复的系统,而 multi-agent 确实让追踪更难。

one request, traced across the agentsorchestratorhandoff → searchsearch agenthandoff → codecode agent✗ fails hereassemblylog every handoff — so you can find WHERE it failed
一个请求的追踪记录:orchestrator、handoff、智能体、汇总。你能看出是代码智能体失败了。
PracticeMulti-agent Tracing· 跨智能体的可观测性
是什么
记录一个请求经过每个智能体和每次 handoff 的路径。
怎么做

共用的请求 ID、每次 handoff 的日志(传了什么、回来了什么)、每一步的耗时和成本。

例子
答案是错的——追踪显示代码智能体在 handoff 时拿到的上下文不完整。
坑
没有追踪,故障就是"系统里的某个地方"——盲目修复几乎不可能。
关联

你调试 Coordination Layer 的方式;配合 Per-agent Evals 能看出该怪谁。

更多智能体成倍放大故障模式:更多步骤累积误差、实实在在的协调开销和成本,以及难得多的追踪。条件反射式的 multi-agent 降低的是可靠性,而不是提高它。

§ 07

multi-agent 对合适的问题是强大的工具,对不合适的问题则是昂贵的错误。用好它主要是克制:只有当单个智能体真的应付不了时才拆。

Single Agent by Default——只有当一个智能体真的应付不了时才拆

回答一个简单的问题,你不会组一个委员会——只有当活确实大到一个能干的人干不了时,你才请来一个团队。

这就是 Single Agent by Default(默认单个智能体)的原则。默认应该是单个智能体,只有当一个确实应付不了这项工作时——不同的技能太多、工具太多、上下文多到无法连贯地装下——你才去用 multi-agent。如果一个构建良好的单个智能体能做到,multi-agent 版本只是白白增加成本、延迟和故障模式。

问题从来不是"我能拆吗?"——几乎任何东西都能拆——而是"一个智能体在这里真的不够吗?"

Can one agent do it?well-built, focusedyesSingle agentthe defaultnoNarrow tools, tighten contexttry once more firstworks nowgenuinely can'tMulti-agentorchestrator · narrow workers
从一个智能体开始。如果它吃力,先收窄它的工具、收紧它的上下文。只有这样还不行——再上 multi-agent。
PrincipleSingle Agent by Default· 从一个智能体开始
是什么
从一个智能体开始,只有当它真的应付不了时才拆。
为什么重要
多出来的智能体增加成本、延迟和故障模式,却没有收益。
例子
一个智能体在 20 个工具里迷路了——先只留给它需要的 5 个,之后再考虑拆。
坑
问"这能拆吗?"——几乎任何东西都能拆。
关联

Coordination Overhead 和 Compounding Error 的制衡;通往 Orchestrator 的出口——只在真正需要时。

让每个智能体保持窄,每次 handoff 保持干净

一支管理良好的队伍有明确界定的角色和练习过的交接——让它可靠的是结构,而不是英雄式的拼搏。

当你确实要上 multi-agent 时,让它奏效的两条纪律是:让每个 worker 保持窄(一项明确的工作、很少的工具、能单独测试),让每次 handoff 保持干净(只含所需内容的专注摘要,而不是全部历史)。大多数 multi-agent 故障都能追到某个太宽的 worker 或某次太含糊的 handoff。把这两点做对,再配上明确的 orchestrator 和最简单的适用模式,系统在扩大规模时仍能保持可靠。

上 multi-agent 之前
  • 一个智能体真的做不了这件事吗——还是它在这个负载下确实会崩?
  • 有没有明确的 orchestrator,负责分解、路由和汇总?
  • 每个 worker 都够窄吗——一项工作、很少的工具、能单独测试?
  • handoff 干净吗——专注的摘要,而不是倒过去整段历史?
  • 哪种模式适合——sequential、parallel 还是 hierarchical——它是可行的里面最简单的吗?
  • 收益盖过成本了吗——更多步骤、延迟、花费,以及更难的追踪?
你编排得好的迹象
  • 你只在一个智能体真的应付不了时才用 multi-agent。
  • 一个明确的 orchestrator 负责分解、路由和汇总工作。
  • 每个 worker 都很窄——能单独测试、值得信任。
  • handoff 是干净的,传递专注的上下文,让每个智能体的窗口保持紧凑。
  • 你用的是适合的最简单的模式,并且能跨智能体追踪一次故障。

这一切如何串起来

完整的地铁图:现在你能看到各条线在哪里交汇。

你从一个智能体开始。如果它应付不了,orchestrator 就出现了:它挑一种模式(sequential、parallel 或 hierarchical),通过干净的 handoff 把活交给窄的 worker,然后汇总结果。每个智能体和每次 handoff 都会增加开销和累积误差——如果收益小于成本,就退回一个智能体。而追踪能准确显示哪里出了问题。

Single agentthe defaultcan't copeOrchestratordecompose · assemblepicksPatternseq · parallel · hierroutes viaHandoffsclean · isolatedWorkersnarrow · evaledresultsMultiplied failureoverhead · compounding errorgain < cost?stay singleTracingfind where it failedobserves
课程概念的链条:从一个智能体到 orchestrator、模式、handoff 和 worker——以及把你拉回单个智能体的成本。

速查表:全部 19 个概念

为什么要拆

Specialization专门的智能体

窄的智能体各自把一件事做好——multi-agent 的核心理由。

Context & Tool Overload上下文太多、工具太多

一个智能体的窗口塞得太满,工具菜单太长。

Coordination Cost协调的代价

拆分、路由、传递、汇总——这要花成本,而且必须值得。

Orchestrator

Orchestrator协调者

主智能体把目标拆成子任务,交给 worker。

Assembly综合

把各 worker 的输出合并成一个结果:化解冲突、去掉重复。

Coordination Layer编排

谁在何时运行、用什么输入、结果如何合并——真正的架构。

Workers

Worker Agent专家智能体

一项窄工作,一个短 prompt,很少的工具。

Per-agent Evals给每个 worker 的测试

单独测试每个 worker——看出谁失败了,并单独修好它。

Depth over Breadth窄胜过宽

worker 太宽、不可靠——再拆细,别加工具。

Handoffs

Handoff传递工作

子任务及其上下文从一个智能体转到另一个的那一刻。

Clean Handoff专注的简报

一份简短的摘要:所需的事实 + 任务,而不是全部历史。

Context Isolation分开、干净的上下文

每个智能体有自己干净的窗口——没有 context rot。

模式

Sequential流水线

A → B → C,顺序固定。最简单、最可预测。

Parallelfan-out / gather

独立的部分同时进行,然后汇集。追求速度。

Hierarchical嵌套的 orchestrator

orchestrator 的 orchestrator。最强大也最复杂——很少用。

故障模式

Compounding Error误差相乘

成功率逐步相乘:智能体越多——链越长——故障越多。

Coordination Overhead额外成本

路由、handoff、汇总、重试——更多延迟和金钱。

Multi-agent Tracing跨智能体的可观测性

记录每次 handoff,这样就能准确找到哪里出了问题。

实践

Single Agent by Default从一个智能体开始

只有当一个构建良好的智能体真的应付不了时才拆。

multi-agent 是深思熟虑的选择:只有当一个智能体真的应付不了时才拆,给它一个明确的 orchestrator,让每个 worker 保持窄、每次 handoff 保持干净,并用最简单的模式——因为你每多加一个智能体,成本和故障模式都会成倍增加。

速成课结束 · 7 章 · 19 个概念

接下来是实践:拿一个你很想拆给多个智能体的任务,先试着让一个构建良好的智能体去做——收窄它的工具、收紧它的上下文。如果它真的应付不了,就分解:一个明确的 orchestrator、两三个窄的 worker、干净的 handoff、最简单的适用模式。然后把一次运行从头追踪到尾,看看成本和错误究竟落在哪里。当你亲身感到协调有多贵,并把它留给专门化真正划算的场合时,这门功夫就通了。但要把一个想法放在所有想法之上:更多的智能体既成倍放大能力,也成倍放大故障模式。只有当一个智能体不够用时才拆——而一旦拆了,围绕它们的结构就是全部的关键。