
1. 先说结论多 Agent 不是团队越大越好两三年前我第一次做多 Agent 项目想法非常简单粗暴任务复杂那就多拆几个角色角色不够再加人。最开始是 2 个后来到 5 个最高峰一次上线了 12 个 Agent 协作。结果呢延迟从 20 秒飙到三分钟Token 消耗翻了接近十倍最讽刺的是最终输出质量还没有单 Agent 加工具链的时候高。那次复盘给我留下了一个贯穿至今的观点多 Agent 系统的成败和 Agent 数量没有线性关系真正决定体验的是协作拓扑怎么选。这其实是不少团队的惯性误区。“多 Agent 强能力”听着合理但实际跑起来多 Agent 意味着更长的推理链路、更多的上下文传递、更多的出错点位。每一个 Agent 就是一次额外的模型调用每一次消息往返都在消耗令牌和时间。更让人头疼的是Agent 之间会互相干扰A 输出的中间结论可能误导 BB 产生的内容反过来又污染 C 的上下文。这些成本在画架构图的时候是看不见的等上了生产账单会直接教做人。我写这篇文章就是想把这几年在多 Agent 协作上的真实体会整理出来。重点放在四种最常用的协作拓扑——中心化编排、流水线接力、层级分包、完全互联——以及我实际踩过的坑。如果你正在做方案选型或者在现有方案里反复调 Agent 数量但始终找不到手感这篇应该能给你一个相对完整的参考框架。需要声明的是我这里讨论的“多 Agent”默认指大模型驱动的智能体应用可能是接入了 RAG、工具调用和外部 API 的工程化实现。框架不限逻辑通用不管你是用 LangGraph、AutoGen、CrewAI还是自己写状态机核心的协作模式和踩坑点都逃不出下面这几类。2. 为什么多 Agent 系统容易翻车三个被低估的成本2.1 沟通成本是隐性的大头先说最直观的部分。单个 Agent 处理一个任务只需要发起一次模型调用、处理一次输入输出成本清晰延迟可控。但当你把任务拆给多个 Agent协作必然带来沟通损耗。举个例子。我用一个“自动生成数据分析报告”的任务做过对照实验。定义良好的单 Agent输入原始 CSV 和需求说明加上工具调用大约消耗 4000 个 token用时 18 秒。同样任务我换成 3 个 Agent一个负责解析数据、一个负责写分析结论、一个负责排版。结果 Token 消耗飙升到 15000 左右耗时干到 47 秒。多出来的消耗并不是在“干活”而是分布在任务理解、上下文输入、中间结果回传、以及每个 Agent 在启动前都要重新把全局信息读一遍这些环节上。这在多 Agent 系统里有个叫法叫“沟通开销”。而且这种开销不是线性的Agent 数量越多两两之间的协调路径越多。4 个 Agent 的潜在连接是 6 条8 个 Agent 就是 28 条。每一条都可能产生消息传递、等待、重试Token 和时间就是这么一点点烧掉的。2.2 上下文污染比想象中严重第二个被低估的成本是上下文污染。多 Agent 协作时每个 Agent 的输入上下文里不只是原始任务还包含了其他 Agent 处理过的中间结果、决策记录、系统指令。这些中间产物可能本身是“不干净”的——也许上一环节产生了轻微错误也许某个 Agent 把需求理解偏了十几度。一旦中间环节有偏错误会顺着链路放大而且极难定位。我在实际项目里遇到过非常典型的例子流水线中负责“数据清洗”的 Agent 把某个字段的空值默认成了 0下一个“生成图表”的 Agent 完全不知道这个处理逻辑画出来的趋势图直接畸形再往后的“总结” Agent 基于这张错误的图得出了一个完全相反的结论。整个链条走完输出看起来自洽但事实是错的。单 Agent 系统里你还有机会在输入端把数据校验清楚多 Agent 系统一旦跑起来链路中的每一个 Agent 都在对上下文进行“二道加工”你很难还原哪一步开始走了样。2.3 系统复杂度会侵蚀所有收益还有一个现实问题多 Agent 的工程复杂度远高于单 Agent。单 Agent 的调试无非是看 prompt、看输入输出、查工具调用。多 Agent 需要应对的是并发执行、消息路由、状态持久化、超时重试、角色权限、中间结果校验……每一项单独拎出来都是系统性问题。我刚开始做多 Agent 的时候经常在本地“跑得挺好”一上生产就各种玄学。后来发现原因很简单本地大多是串行调试生产环境是并发跑Agent 之间调用的依赖关系一旦出现竞态结果就是不可复现的。你今天调通明天换个输入就挂了问题还不能稳定复现那是真的折磨人。所以我的结论很直接一个任务如果单 Agent 加几个工具能解决就不要强行拆分。多 Agent 是一门拿资源换灵活性、拿复杂度换可扩展性的生意你得先确定这笔买卖划算。3. 四种协作拓扑逐个拆解3.1 中心化编排Orchestrator-Worker这是目前生产中最流行、新手最容易上手的拓扑。核心思路很简单一个中心“调度 Agent”负责理解任务、拆分步骤、把子任务分发给不同的 Worker Agent最后收集并汇总输出。Worker 之间不直接通信所有信息通过编排器中转。你可以把它想象成传统软件开发里的项目经理角色项目经理接需求、拆任务、派人干活、收活验收执行人员不互相聊需求只管完成分到自己头上的那部分工作。中心化编排最适合任务边界清晰、可拆成多个互不依赖子任务的场景。典型例子是“自动生成一份市场调研报告”编排器先决定需要哪些数据同时派出数据抓取 Agent、竞品分析 Agent、用户反馈汇总 Agent等它们各自完成后再统一汇总成最终报告。Agent 数量一般控制在 3~8 个太少没必要太多编排器看不过来。优点比较突出调试友好。所有通信都有明确的主线日志集中在编排器周围问题定位相对快。权限和流程好控制。只要编排器不下指令Worker 不会自行启动。Prompt 设计相对简单每个 Worker 只需要做好自己的单一职责。但我必须提醒几个坑。首先是单点瓶颈编排器既是流量入口又是决策汇总点一旦它理解错了整个流程跟着错且没有旁路。其次编排器自身的上下文压力会很大它需要同时记忆任务目标、每个 Worker 的状态、中间结果等很容易超出模型的上下文窗口。实践经验给每个 Worker 定义结构化的输入输出接口让编排器不要直接读全量中间结果而是只读“摘要 关键数据结构”。这能大幅降低上下文压力。另外一定要给编排器加一个“异常分支”让它能判断某个子任务是否需要重试、跳过或者向用户求助而不是硬着头皮出结果。3.2 流水线接力Pipeline流水线拓扑是另一种非常直观的模式。任务被划分成固定的阶段Agent 排成一条链前一个 Agent 的输出直接成为后一个 Agent 的输入。就像工厂生产线拧螺丝的不管喷漆喷漆的不管包装每个岗位只对上一道工序的结果负责。这个拓扑最适合流程固定、顺序明确的场景。比如“从原始数据到最终报告”第一步 Agent 负责数据清洗和数据校验第二步 Agent 做统计分析并生成图表第三步 Agent 基于图表撰写正文第四步 Agent 负责排版与校对。每一阶段输入输出都很清晰改起来也方便你只需要替换某一环的 prompt 或工具逻辑其他环节不用动。流水线最大的优点就是简单直接链路短、开销相对小、可控性好。因为每一环只做一件事上下文传递是有边界的不会像网状拓扑那样无限膨胀。缓存和断点恢复也容易做如果第三步挂了前两步的结果可以缓存下来修好后再从第三步接着跑。但它有一个致命弱点错误会沿着链路传导并放大。一个环节的失误到了链条末端可能已经“面目全非”。比如第一步数据清洗错了后面所有环节的输入都是错的但每个 Agent 依然会自信地基于错误数据进行推理最终输出看起来格式完美、逻辑通顺但结论完全是错的。流水线里的 Agent 通常没有回退机制和横向纠正能力。所以我的建议是在流水线每个关键环节之间加校验点用规则、正则或一个小型校验 Agent 去检查中间产物的质量。校验点不用做非常复杂的语义验证主要查格式、查字段完整性、查明显的逻辑矛盾这就够用了。3.3 层级分包Hierarchical层级拓扑可以理解为中心化编排的“多级版”。顶层一个总控 Agent负责战略目标与重大决策中间层是若干分控 Agent各自监管一个子领域再往下才是真正干活的末端 Agent。每层的管理权限逐级下发信息逐层汇报。这种结构最适合大型、多领域耦合的系统。举个例子一个“全栈项目自动开发”系统总控 Agent 拆解需求后分出前端开发组、后端开发组、测试组三个二级 Agent前端组内部再拆出页面布局 Agent、组件实现 Agent、样式美化 Agent。前后端的结果汇聚到测试组测试发现问题再退回对应层级的负责人修复。层级拓扑的优势在于可扩展性强每一层只需要管好“下一层的几个直接下属”不必知道全局细节。局部故障时可以隔离开——测试组发现问题会直接回流给对应的开发组而不会影响另一组的工作。但也有明显的代价延迟和 Token 开销都更高。每一层的汇报、审批、再分发都会产生额外通信信息一多多级传递很容易失真。在这里“传话游戏”效应非常常见总控说“重点突出安全性”传到具体的 Worker 那里可能就变成了“加一个登录页面”。所以在实际项目里我建议层级不要超过三层超过三层大概率会越传越偏。额外经验每一层的管理 Agent尽量让它输出“决策纪要”而不是“全量对话”下一层看到的是明确定义的任务和约束条件而不是一大堆中间讨论。这样能显著减少信息失真也让上下文压力小很多。3.4 完全互联Mesh完全互联也叫点对点或网状拓扑。在这种模式下任何 Agent 之间都可以直接通信、协商、竞争没有中心调度者。每个 Agent 既是提议者也是执行者也是评估者。这更像是一种“自由市场”式的协作方式。这种拓扑适合开放性极强的任务比如头脑风暴、创意文案、策略推演、开放域问答。因为没有一个固定答案存在让多个 Agent 自由表达、互相挑战往往能产生单 Agent 无法给出的综合视角。我见过有人用 3 个 Agent 互相辩论来改进产品方案最后产出的思路比我一个人写的好得多。但要让网状拓扑在生产环境可用必须加一堆约束设置最大轮次上限比如最多讨论 10 轮到点强制收敛。设置 Token 预算上限防止讨论失控烧钱。引入一个“仲裁 Agent”或更简单的“投票机制”在讨论结束后选择最优结果。所有 Agent 共享一套通信协议和状态流转约束防止对话路径变成一团乱麻。它是四种拓扑里最难调试、最不可控的我的建议是只在“点子生成”这类对输出多样性要求高、错误代价可控的任务里使用不要拿它直接处理涉及强数据一致性的业务逻辑。4. 选型评估一张表帮你快速落地4.1 按任务特征快速匹配我把四种拓扑的核心特征整理成一张对照表你可以直接对照自己的任务类型来筛。评估维度中心化编排流水线接力层级分包完全互联任务结构可拆分成并行子任务顺序固定、阶段明确多子域、子域内部再拆分开放、无序、探索性强通信复杂度集中在编排器单向链式树状多层全向交叉调试难度低中中高高成本控制中低高极高错误容错性中编排器错误影响全局低链式放大较高可局部隔离高路径冗余推荐 Agent 数量3~83~65~202~6典型落地场景报告生成、信息检索汇总数据处理、内容生产流水线多部门协作的大型项目头脑风暴、策略推演这张表只是帮你做第一轮筛查后面还要结合成本、容错、工程能力综合判断。4.2 三步筛选法我更习惯用一个三步筛选法来落地选型决策。第一步画出任务依赖图。把任务拆成步骤标注步骤之间的依赖关系。如果步骤之间大多是“并行独立”优先看中心化编排如果步骤是“严格先后次序”考虑流水线如果任务可以分成多层子域考虑层级结构如果任务本身没有固定结构才考虑网状拓扑。第二步评估失败代价。想一下任务出错时是会生成一份不够完美的报告还是会导致赔钱、用户账号数据被改这类不可逆的严重后果。后果严重就用中心化或层级结构加入人工确认或规则校验后果较轻就可以用网状拓扑去求多样性。第三步看团队调试能力。如果团队对 Agent 编排框架不熟或者没有日志链路追踪的基础设施就别一上来就上网状或层级先中心化编排做起跑稳了再演进。拓扑越复杂对可观测性的要求就越高这个前置条件往往被人忽略。4.3 混合式和演进式设计说实话真实生产系统很少是单一拓扑的。我目前维护的系统里主流程是层级分包数据预处理部分用流水线创意生成模块是网状入口处又用了编排器。拓扑是可以混用的关键是先在纸面上把每个局部拓扑画清楚明确它们之间的边界和接口。一个实用的演进路径是先用单 Agent 工具链把流程跑通验证业务价值再加一个编排器把子任务拆出去当子任务出现明显的并行需求时再加层级或流水线让系统一层层“长”出来而不是一上来就堆一个巨大的拓扑。每次演进都设置量化指标比如延迟、Token 成本、任务成功率用来判断这一步到底是优化了还是退化了。5. 我的踩坑清单这些坑你大概率也会踩5.1 Token 预算形同虚设我见过太多团队包括我自己在架构设计阶段拍脑袋定 Token 预算常见操作是“每个 Agent 给 2000 token10 个 Agent 就是 2 万看起来可控”。但一跑起来Agent 会自作主张地自我重复或在一个工具调用上反复循环中间结果又常被重复输入到多个上下文里。真实消耗往往是预估的 3~5 倍账单出来的时候没法面对。我的建议是上线之前就把每次任务的 Token 消耗链路埋点统计做起来按拓扑分环节统计。哪一部分消耗异常高立刻就能看出来。预算不能只设一个总数字要按 Agent 角色设置单次调用上限并且设置各种终止条件把“失控发散”这个念头提前杀死。5.2 循环调用和内部死锁多 Agent 里最常见的三种死循环Agent A 把任务交给 BB 觉得该 C 做C 又退回给 A两个 Agent 对同一个结论反复确认“你确定吗”“我确定”“你再看看”递归式拆解任务越拆越细永远不收敛。这三种情况我都遇到过修复方式都一样引入轮次上限。给每个 Agent 设置最大调用次数超过后强制走仲裁或直接返回当前结果并打上“未收敛”标记。不要小看这个标记的价值它至少让你知道结果可能不可靠而不是拿着一个“貌似完整”的输出直接拿去用。5.3 权限边界和风险操作没划清多 Agent 系统一旦接入工具权限问题就变得格外尖锐。比如一个 Agent 的工具是“删除数据库记录”另一个 Agent 在推理过程中认为需要清理旧数据顺手就调用了删除工具。技术上说不会有人刻意让 Agent 去执行危险操作但推理的不确定性加上工具的开放性“允许它访问”基本等于“允许它犯错”。我的处理方式分三层第一层工具级别做白名单每个 Agent 只能看到自己必需的工具不相关的工具直接不给权限第二层在调用风险操作之前加一个“人工确认回调”哪怕只确认一次也能拦住绝大多数误删误改第三层核对审计日志所有 Agent 的任何操作都留痕出了问题能追溯。5.4 没有评测指标上线等于盲飞我接手过一些团队的多 Agent 项目问他们“你怎么判断这次系统改动是变好了还是变坏了”对方往往只能回一句“感觉比以前流畅一点”。这是多 Agent 系统落地最致命的问题。没有量化指标你在调参、改拓扑、加 Agent 时根本没有依据全凭感觉。最少也要从三个维度做评测任务成功率输出是否符合预期结果、Token 成本单次任务平均消耗、端到端延迟。如果做的是内容生成类任务再加一个人工抽样审核评分。有条件的话建一套回归评测集——固定几十个典型任务每次结构改动完整跑一遍看指标涨跌。没有这套机制你改的任何东西都可能是负优化但你没有发现。5.5 日志链路跟到一半就断了多 Agent 的“黑盒”问题特别严重。Agent 之间互相调用日志散落在一个个异步任务里想还原一个请求的完整链路非常困难。如果你现在还在用“print 大法”调试多 Agent相信我系统规模稍微一大你会想掀桌。请提前引入全链路追踪。不需要多复杂的工具最简单的做法是给每次会话生成一个 trace_id所有 Agent 的输出、调用记录、工具执行结果都带这个 ID打到同一份日志聚合里。查问题的时候一条命令就能拉出整条链路的上下文。5.6 踩坑速查表坑表现根本原因解决方案Token 飞涨结算单超出预算数倍重复协商、上下文重复灌入按环节统计成本设置单 Agent 调用上限循环/死锁Agent 互相踢皮球任务挂起缺少收敛条件设置轮次上限、引入仲裁机制危险操作Agent 意外删除或修改数据工具权限过大工具白名单、人工确认、审计日志无评测指标改动无法评判优劣缺少评测体系建成功率/成本/延迟三维评测建回归集日志断链排查问题靠猜没有贯穿式链路 ID全局 trace_id统一日志存储6. 跑完这么一圈之后的心里话说句实在话多 Agent 系统并不是银弹。一个清晰、定义良好的单 Agent 加上工具和 RAG在大多数场景下都够用而且成本最低、稳定性最好。真正需要切换多 Agent 的时刻是任务复杂度已经明确超出了单 Agent 的能力边界或者多个子任务天然需要并行时。我在实际项目里养成了一个习惯每次部署和升级多 Agent 系统都先问自己“这个改动是否让问题变得更可控”。多 Agent 的初衷是解决复杂问题而不是向人展示“我们有很多智能体”。如果加了一个 Agent却只是让它来来回回传递信息那它实际上是在降低系统的确定性和稳定性。最后分享一个小技巧新项目先跑通单 Agent 基线把指标打出来然后再升级到中心化编排继续测真正有必要时再引入更复杂的拓扑。这听起来慢但实际是踩坑最少、交付最快的路径。毕竟多 Agent 系统是用来交付价值的不是用来炫技的。