杭州程序员小林辞职开了一家小面馆。起初他坚信“一个人就是一支军队”:接单、备菜、煮面、算账全自己来。结果午市高峰时,他一边收钱一边煮面,还忘了3号桌的加辣要求。痛定思痛,他雇了收银员、配菜师、主厨和品控,小店一下从“手忙脚乱”变成“行云流水”。这个再平常不过的开店故事,恰恰就是多Agent协作(Multi-Agent)的缩影:一个人做不了的大工程,拆成多个“专才”各管一摊,再由一个“店长”统一调度。 在大模型时代,一个Agent就是一个会思考、能调用工具的AI助手。像“调研市场并生成行业报告”这种复杂任务,让单个Agent单打独斗,经常会漏步骤、跑偏题、上下文越用越乱。多Agent系统模仿人类团队的分工协作,让多个Agent分别担任“调研员”“分析师”“写作者”“审校员”,把任务流水线化地拆解、执行与汇总。本篇文章就以这家“多Agent餐厅”贯穿始终,从组织架构、岗位分工、协作策略、记忆通信讲到性能优化,最后落地到真实项目实战,帮你一步步建立对Agent工作流的完整直觉。
掌握多Agent协作,是从“会用AI写代码”进阶到“能设计AI团队”的分水岭,也是Agentic AI时代AI工程师的核心竞争力。
目录
可视化演示
演示多Agent角色分工、通信协议与协作决策机制,展示Agent通过消息传递与协商达成共识,协同完成复杂任务。
本节配有交互动效(进入视口后自动加载,约 3KB)。
角色分工机制 规划者/执行者/审查者 任务分解为专业子任务 各Agent发挥优势协同完成复杂任务
认识多Agent——从一人餐厅到协作团队
小林的面馆故事还有一个更深的隐喻:他最初让“一个自己”同时承担七个岗位,本质上是个体能力的天花板——一个人再厉害,双手也只有两只。单Agent也是如此:一个LLM系统要依次完成意图理解、信息检索、方案生成、结果检查,上下文窗口有限,单次推理顾此失彼,复杂任务经常做到一半就“忘记”了前面的要求。
多Agent协作Multi-Agent,就是把“一个人的超级多面手”拆成“一群人的专业团队”:每个Agent是独立的AI单位,有自己的职责、记忆与工具,彼此通过消息协作。Agent类型也各有分工:执行型Agent(检索Agent、代码Agent)负责干活,决策型Agent(规划Agent、评判Agent)负责出主意,协调型Agent(编排Agent)负责派单。协作模式上,有接力式的流水线协作,也有围绕一个共享目标的并行协作。
不过,团队协作并非没有代价——多了沟通、同步和等待时间。我们用“协作加速比”来度量收益:
小林的面馆从1人扩张到4人,翻台率提高了不只4倍,但也新增了催单、传话、分工不清的摩擦成本。多Agent协作同理:专业分工是收益,协作开销是代价。合理控制Agent数量与沟通成本,餐厅才能真正蒸蒸日上。
- η(协作加速比)多Agent相比单Agent的效率提升倍数。η大于1说明协作有收益,小于1说明协作是负优化。
- T_solo 与 T_multi单Agent完成任务耗时与多Agent团队耗时的比值。
- N 与 αN是Agent数量,α是协作开销系数,表示沟通、同步、信息传递占用的额外时间比例。分母中的 \((N - 1)\alpha\) 就是全部协作开销。
协作架构——店长、后厨与微信群
面馆变成餐厅后,小林开始琢磨组织结构。一开始他是“总指挥”,所有事情都要经过他——新来的配菜师连“能不能给3号桌加个蛋”都要跑来问他。后来大家建了个微信群直接沟通,结果一上午消息刷了几百条。最后他定下规则:加菜、换菜这类小事先自行解决,退单、投诉这类大事才上报店长。这就是三种协作架构的原型。
多Agent架构决定了消息如何在Agent之间流动。中心化架构(Centralized)中,一个编排Agent作为“大脑”统一调度所有成员,类似LangGraph中的Supervisor模式,优点是决策一致、过程可追踪,缺点是大脑容易成为瓶颈。去中心化架构(Decentralized)中,各Agent对等协商,类似AutoGen的GroupChat聊天组,灵活鲁棒,但话题容易漂移。混合架构则分层治理——高层定计划,底层自由协作,在真实项目中应用最广。
架构选择直接影响通信成本。如果每个Agent都要和其余所有Agent建立连接,链路总数是指数级膨胀的:
如果后厨10个人都在群里互相@,消息量会爆炸式增长——这就是N²通信问题。架构选择就是“设计餐厅的汇报关系”:谁向谁汇报、谁可以自主决策。好的架构让信息有序流动,坏的架构让人人都累得慌。
- C(通信链路总数)任意两个Agent之间都能直接通信时,系统需要维护的连接数量。
- N(N - 1)从N个Agent中有序地取两个,每个Agent要和其余N-1个连接,得到N(N-1)条有向关系。
- 除以2A和B之间的链路只需一条,有向关系双向成对,所以折半。
角色分工——配菜师的锅铲不归主厨
新餐厅招人时,小林写的招聘启事特别细:配菜师负责洗切,主厨负责烹饪,品控负责试菜,传菜员只负责端盘子。没有明确职责的餐厅必然混乱。这份“岗位说明书”,就是多Agent世界里的角色定义(Role)。
技术上,角色定义通过System Prompt实现,让Agent清楚“你是谁、你要产出什么、你不该做什么”。角色分工带来三重好处:一是每个Agent专注单一目标,输出质量更高;二是职责边界清晰,避免两个Agent重复劳动;三是出问题时可以快速定位到具体环节。任务分配是角色分工的落地环节——编排器把大任务拆成子任务,再按“匹配度”路由给对应Agent。上下文管理则确保每个Agent只拿到与自身角色相关的信息,而不是被塞进全部对话历史。
任务路由并非随机分配,而是按照各Agent对任务类型的匹配度计算概率:
好的餐厅不允许配菜师跑去炒菜——分工明确,出品才能稳定。多Agent的角色定义,就是给每个AI打上清晰的“岗位说明书”,谁也别越界,谁也别缺席。
- P(a_i | t)在任务t到达时,选择第i个Agent承担该任务的概率。
- w_i · s_i(匹配度)权重向量与技能向量的点积,数值越大表示Agent i与该任务越匹配。
- exp()(指数放大)把匹配度映射为非负且拉开差距的分数,匹配度高的Agent获得压倒性优势。
- 分母归一化对所有Agent的指数分数求和,使所有概率加总为1,形成真正的概率分布。
协作策略——订单的流水与并行
餐厅的点餐流程通常是“下单→配菜→烹饪→出餐”,一步接一步,这是顺序编排。后来餐厅多了两个灶台,两张订单的烹饪可以同时进行——这就是并行协同。若顾客突然要求“少油少盐”,前厅要和后厨沟通调整,碰上两份订单抢同一个灶台,还得有人拍板。这些决策,就是协作策略要解决的问题。
多Agent协作策略规划的是“任务以什么顺序、由谁、在什么条件下执行”。顺序编排(Sequential)最简单,Agent A处理完交给Agent B,适合强依赖的流水线任务。并行协同(Parallel)把互相独立的子任务同时分发,显著提升吞吐量。协商机制(Negotiation)让Agent们交换信息、互相说服,弥合分歧。投票表决(Voting)则让多个Agent对候选方案表决,以多数意见做最终决策。
并行不是免费的午餐,Amdahl定律揭示了一个朴素的道理:
餐厅的终极追求是“让每个灶台都不闲着”,但下单和摆盘永远串行。多Agent策略优化的本质,就是在串行瓶颈与并行收益之间找平衡,而不是盲目加人。
- S(并行加速比)并行化之后,任务总耗时缩短到的倍数。
- p(可并行比例)整个任务中可以并行执行的时间占比,取值0到1之间。
- 1 - p(串行比例)必须按顺序执行的部分,比如下单、摆盘、上菜。
- p/N(并行耗时)可并行部分被N个Agent平分后占用的时间比例。当N无限大时,这一项趋近于0,加速比逼近极限 \(1/(1-p)\)。
记忆与通信——白板、传菜口与围裙口袋
小林在厨房挂了一块白板,上面写着“3号桌不吃香菜”“7号桌在等打包”。传菜口是前厅与后厨唯一的物理通道,所有菜品消息都从那个小窗口递进递出。与此同时,每个厨师私人的围裙口袋里装着自己的小笔记本。这一套系统,完美对应了多Agent的记忆与通信设计。
多Agent的记忆分为共享记忆(Shared Memory)与私有记忆(Private Memory):白板是共享的,围裙口袋是私有的。共享记忆通常实现为一个公共消息池或全局缓冲区,让第五步的“调研结果”能被第八步的“写作Agent”直接引用。消息传递(Message Passing)则通过消息队列或Agent间直接调用,把上下文从一个Agent搬运到另一个。状态同步确保各Agent对“任务进展到哪一步”有共识,而信息隔离则划清界限:敏感信息如用户密码不进入共享白板,无关信息不污染单一Agent的推理。
记忆总量是实打实的Token成本,可以用预算公式表示:
白板写太满,后厨反而找不到重点——共享记忆要够用,私有记忆要安全,消息传递要精准。多Agent工程的记忆设计,直接决定成本与准确性,是整个协作体系的“信息底座”。
- M_total(总记忆量)多Agent系统运行期间,所有Agent消耗的上下文Token总量。
- M_i^share(共享记忆)第i个Agent写入公共区域、团队可见的记忆,如白板上的订单备注。
- M_i^private(私有记忆)第i个Agent仅自己可见的内部状态,如厨师笔记本里的独家配方。
- 对全部Agent求和把N个Agent的共享与私有记忆逐项累加,得到系统的整体开销与上下文占用。
性能优化——翻台率与成本账
餐厅的利润公式其实很简单:翻台率乘以客单价减去成本。小林发现午市门口排长队,店里却有空桌,症结是“上菜太慢”。他改用预配菜(缓存)、增加一个灶台(并行)、失败菜品免费重做(重试策略),翻台率立刻上去了。多Agent系统的性能优化,同样是围绕延迟、成本、质量三个指标展开。
延迟优化靠并行化与结果缓存:把独立子任务同时下发,把重复查询的结果缓存复用。成本控制则要求精打细算——精简Agent角色数量、小模型处理简单子任务、复用中间结果,避免每个环节都调用最大最强的大模型。冲突解决需要明确的仲裁规则:两个Agent给出矛盾结论时,由编排器按预设策略裁决,或触发重试。质量评估则引入评分与反馈闭环,对每个Agent的输出进行可量化的验证,形成“生成→评判→修正”的增强回路。
所有优化最终都要落到成本账上:
餐厅的最终目标不是“人越多越好”,而是“每桌都赚钱”。多Agent优化同样追求性价比——在可接受的延迟与质量范围内,把成本压到最低。这是从“Demo能跑”走向“生产可用”的关键一步。
- C_total(总成本)整个多Agent任务消耗的综合成本,单位是费用而非Token数。
- n_i × p_i(第i个Agent的Token费用)n_i是该Agent消耗的Token数量,p_i是每个Token的单价,两者相乘得到该Agent的花费。
- 对所有Agent求和把N个Agent各自的Token费用累加,得到基础成本。
- c_retry × r(重试成本)单次重试所需的成本乘以重试次数,代表出错返工带来的额外开销。
实战展望——从单店到连锁
面馆火了之后,小林要开第二家店。他不再亲自上阵,而是把菜品配方、出餐流程、服务标准写成SOP手册,培训一个店长去复制。这个“手册化、框架化”的过程,正是多Agent从实验走向工程的关键一跃。
目前典型的多Agent框架各具特色:AutoGen主打对话式多Agent协作,让Agent们在群聊中商讨问题;LangGraph用有向图定义工作流,节点是Agent、边是状态转移,可编排可回滚;CrewAI以“角色+任务”为核心,让每个Agent像员工一样认领任务。项目实践上,智能客服、数据分析管线、复杂代码生成都已大量采用多Agent架构。常见故障也很有代表性:Agent陷入无意义对话死循环、幻觉在传递中被一步步放大(“以讹传讹”)、Token成本失控超出预算。工程上需要设置超时上限、最大迭代次数、信息摘要压缩和事实核查节点来兜底。
如果系统中某个环节需要“多个Agent分别给出方案,再择优采用”,整体成功率会显著提升:
连锁餐厅靠的不是某一位大厨,而是可复制的系统。多Agent正从“有趣的实验”走向“企业级生产基础设施”,谁先掌握协作编排的工程能力,谁就拿到了下一代AI应用的入场券。
- R_multi(系统总成功率)整个多Agent决策链路最终取得可用结果的概率。
- 1 - r_i(第i个Agent的失败率)Agent i 产出不可用方案的概率。
- 连乘积(全部失败概率)若各Agent相互独立,所有方案同时不可用的概率等于各自失败率的乘积。
- 1 - 乘积(至少一个成功)用1减去“全部失败”的概率,得到至少一个Agent成功的概率,即最终系统成功率。
AI 应用场景
智能客服工单分诊系统
阶段:端到端项目实战、系统部署运维
解决的问题:传统客服系统靠关键词规则分诊,遇到“退款没到账”这种模糊描述就乱派单。多Agent方案让“前厅接待Agent”先理解用户意图,“分类Agent”打标签,“退款专家Agent”查询订单并调用支付API,“质检Agent”复核回复是否友善完整,把一条龙服务做到闭环。
具体案例:某电商平台上线多Agent工单系统后,分诊准确率从68%提升到91%,一条工单的平均处理时长从40分钟降到12分钟。用户说“退款没到账”,系统自动识别为退款查询,转派给退款专家Agent,它在毫秒级查完订单状态后调用支付接口触发补单,最后由质检Agent确认话术无误才发送给用户。
市场研究报告自动生产线
阶段:数据采集、内容生成、质量审核
解决的问题:人工写行业报告要查几十个网站、整理数据、反复核对,耗时一周。多Agent流水线上,“调研Agent”并行抓取市场数据,“分析师Agent”做趋势分析,“写作者Agent”生成报告初稿,“审校Agent”核查数据来源并修正事实错误,最终汇总为成稿。
具体案例:一家咨询公司用5个Agent搭建了“周报工厂”:每周五中午自动触发,4小时后产出20页竞品动态周报,包含数据图表和风险提示。过去需要3名分析师全职一天的工作,现在由AI团队接力完成,分析师只负责最后的策略解读。
游戏NPC群像系统
阶段:Agent行为设计、状态同步
解决的问题:传统NPC对话靠脚本树,玩家问两句就没下文。多Agent方案给每个NPC一个独立的“性格Agent”,并共享一个“小镇世界观记忆库”:铁匠Agent知道镇上刚发生盗贼事件,会主动提醒玩家注意安全;酒馆老板Agent消息灵通,会透露盗贼线索。各Agent通过共享记忆保持世界观一致,又通过私有记忆维持性格差异。
具体案例:某开放世界游戏在NPC系统中引入多Agent协作后,玩家对NPC对话的满意度评分从71分升至89分。NPC之间甚至会互相转述玩家的事迹——玩家帮了铁匠,第二天酒馆老板会提起这件事。
Python 演示
import randomimport time class BaseAgent: def __init__(self, name, role): self.name = name self.role = role self.task_count = 0 self.message_count = 0 def process(self, task): time.sleep(random.uniform(0.05, 0.12)) self.task_count += 1 return "[{}]".format(self.name) def send(self, receiver, message): self.message_count += 1 return receiver.receive(self.name, message) def receive(self, sender, message): self.message_count += 1 return "{}<-{}:{}".format(self.name, sender, message) class Worker(BaseAgent): def process(self, task): time.sleep(random.uniform(0.08, 0.16)) self.task_count += 1 return "{}处理了[{}]".format(self.name, task) class Inspector(BaseAgent): def process(self, task): time.sleep(random.uniform(0.05, 0.10)) self.task_count += 1 return "{}验收了[{}]".format(self.name, task) class ShopManager(BaseAgent): def __init__(self, name, member_list): BaseAgent.__init__(self, name, "manager") self.member_list = member_list def dispatch(self, order): result = self.process(order) for member in self.member_list: result += " -> " + self.send(member, result) return result def main(): prep = Worker("配菜师", "prep") cook = Worker("主厨", "cook") critic = Inspector("品控官", "inspector") boss = ShopManager("店长", [prep, cook, critic]) orders = ["订单1:红烧肉", "订单2:清蒸鱼", "订单3:麻婆豆腐"] for order in orders: final_result = boss.dispatch(order) print(final_result) print("---") all_workers = [prep, cook, critic, boss] total_tasks = sum(a.task_count for a in all_workers) total_msg = sum(a.message_count for a in all_workers) print("总任务数:", total_tasks) print("总消息数:", total_msg) if __name__ == "__main__": main()
class BaseAgent:定义所有Agent的公共基类,相当于餐厅员工的“岗位手册”,包含名字、角色、任务计数和消息计数。class ShopManager(BaseAgent):店长Agent继承基类,额外承担编排职责,是中心化架构里的“大脑”。self.member_list = member_list保存所有下属Agent的引用列表,方便后续按顺序派单。def dispatch(self, order):编排核心方法:接收一笔订单,分发给每一位团队成员处理。result += " -> " + self.send(member, result)关键协作动作:把当前进度消息发送给下一个成员,形成接力式的流水线。total_msg = sum(a.message_count for a in all_workers)统计整个团队的通信总量,帮助我们直观感受多Agent协作中的消息开销。
常见误区
误区看到多Agent系统强大,就觉得Agent数量越多效果越好,把一个简单任务拆成十几个Agent,结果又慢又贵还经常出错。
正解多Agent的收益与数量不是线性关系,通信链路按N²增长,协作摩擦也随之放大。正确做法是“按需设岗”——任务需要几个角色就配几个Agent,像餐厅根据客流定岗,高峰才加兼职,而不是让20个厨师挤进一个小厨房。
为何常见:多Agent架构图总是画着密密麻麻的节点,让人直觉上认为“节点多=能力强”,加上“人多力量大”的朴素的直觉,忽视了协作成本。
误区既然多Agent这么强,所有AI应用都应该上多Agent架构,单Agent已经过时了。
正解简单任务(如单轮问答、短文本改写)用单Agent更高效。多Agent有编排成本、通信成本、失败重试成本,这些开销需要任务本身的复杂度来摊销。杀鸡不用牛刀——让一个面馆转型成满编餐厅团队,前提是有那么多顾客。
为何常见:这是典型的“锤子效应”:学会了一个新工具,看什么任务都像钉子,缺少了对任务复杂度的量化评估意识。
误区以为把全部上下文、全部中间结果都传给其他Agent,协作一定会更准确,信息越全越不容易出错。
正解过度通信会导致上下文爆炸、Token成本飙升、无关信息污染推理。好的设计是“按需传递”——像传菜口只传成品菜,不传厨房噪音;用精简摘要或结构化消息替代全量复制,让每个Agent只看到与自己职责相关的信息。
为何常见:工程师习惯“信息越多越保险”的直觉,却忽略了模型的注意力是有限的,上下文窗口不是无限仓库。
误区只要搭好框架,多Agent就会像自动化流水线一样永不犯错,全程无人值守地完成所有任务。
正解真实生产环境必须有超时、重试、最大轮次、人工审批等兜底机制。Agent会陷入无意义对话循环、会互相抬杠、会把幻觉层层传递放大。餐厅再成熟,也要有店长随时处理纠纷和投诉,还要有食品安全检查。
为何常见:演示Demo通常会把失败过程剪辑掉,只展示成功路径,让人误以为Agent系统天然可靠。
误区觉得多Agent就是“循环调用好几遍大模型”,和单Agent没有本质区别,只要会调API就会做多Agent。
正解多Agent的核心难点在架构设计、角色定义、记忆管理、策略编排,而不在于底层调用了几个模型。同一套LLM API,不同的编排方式效果天差地别。调用模型是“买菜”,多Agent协作是“经营一整家餐厅”。
为何常见:从单Agent迁移时,视角还停留在“模型调用”的层面,没有上升到“系统设计”的高度,低估了协作机制的复杂度。
面试题
Q1. 采用多Agent协作处理复杂任务的核心出发点是什么?
- A.让系统架构显得更加高级
- B.用多模型摊薄算力成本
- C.拆解复杂任务并行处理← 正确答案
- D.取代全部人工审核流程
答案:C。多Agent的核心是把复杂任务拆成多个子任务,交给各司其职的Agent并行或协作完成,就像餐厅招工是为了分工而非显摆排场。A是虚荣心,B是伪需求,D只是附带效果而非出发点。
Q2. 中心化多Agent架构的最突出特点是什么?
- A.所有Agent地位完全平等
- B.由编排Agent统一调度← 正确答案
- C.各Agent自行决定行动
- D.Agent之间无任何通信
答案:B。中心化架构中,编排Agent就像店长,所有任务由它统一拆解和派发。A描述的是去中心化,C是无政府状态,D在协作系统里不可能也不应该存在。
Q3. N个Agent两两互联的通信链路数量级是?
- A.随N线性增长
- B.恒等于二倍N条
- C.N(N-1)/2条← 正确答案
- D.随N指数级膨胀
答案:C。每个Agent和其余N-1个Agent连接,得到N(N-1)条有向关系,折半后就是两两互联的无向链路数。后厨人数翻倍时,消息关系从10条涨到45条,这正是N²通信问题的来源。
Q4. 在多Agent系统中,Agent的角色定义主要依赖什么实现?
- A.扩大基座模型参数
- B.编写系统提示词设定← 正确答案
- C.更换更强的模型供应商
- D.增加更多任务训练数据
答案:B。角色通过System Prompt设定,相当于给Agent发“岗位说明书”,让它知道自己的职责边界。改模型参数、换模型、加训练数据都是更重的手段,且不能精确指定“这个Agent只负责切菜”。
Q5. 下列哪些属于多Agent的常见协作策略?
- A.顺序编排流水作业← 正确答案
- B.并行协同提高吞吐← 正确答案
- C.投票表决解决分歧← 正确答案
- D.无限重试直至成功
答案:ABC。顺序编排(接力式流水线)、并行协同(同时处理独立子任务)、投票表决(多方案择优)都是设计好的协作策略。无限重试是工程故障不是策略,它只会让成本和延迟无限失控。
Q6. Amdahl定律在多Agent系统中揭示了什么?
- A.Agent越多加速一定越快
- B.串行部分决定性能上限← 正确答案
- C.通信开销可以完全忽略
- D.并行比例与N无关紧要
答案:B。加速比 S=1/((1-p)+p/N),当N趋向无穷时,S趋向于1/(1-p),串行部分就是天花板。就像餐厅点单和上菜无法并行,再加灶台也突破不了这个上限。
Q7. 多Agent记忆管理中进行信息隔离的意义有哪些?
- A.防止上下文互相污染← 正确答案
- B.保护隐私敏感数据← 正确答案
- C.降低不必要的Token消耗← 正确答案
- D.彻底消灭Agent间通信
答案:ABC。信息隔离避免A Agent的闲聊内容影响B Agent的核心推理,保护密码等敏感数据,也减少无谓信息传递带来的Token开销。但隔离只是“限制通信范围”,不可能也没必要彻底消灭通信。
Q8. 多Agent中“工具调用”的主要作用是什么?
- A.让Agent能对接外部系统← 正确答案
- B.代替全部模型训练过程
- C.直接修改模型的参数权重
- D.充当最终答案的唯一来源
答案:A。工具调用让Agent访问数据库、API、计算器等外部系统,就像厨师使用烤箱和切菜机。它不改变模型本身(B、C错误),也不取代最终答案的生成逻辑(D错误)。
Q9. 下面哪些属于多Agent成本控制的有效手段?
- A.精简Agent角色数量← 正确答案
- B.小模型处理简单子任务← 正确答案
- C.缓存高频重复的查询结果← 正确答案
- D.无条件增加重试次数
答案:ABC。精简角色能减少通信链路,小模型处理简单判定能省Token,缓存中间结果能避免重复计算——这三者是实打实的省钱。无限重试只增加成本不提高质量,是反面操作。
Q10. 以下哪个现象最能体现多Agent的“幻觉传递”?
- A.请求超时不断重试
- B.上游编造下游沿用← 正确答案
- C.上下文长度发生溢出
- D.模型温度参数过高
答案:B。“幻觉传递”指一个Agent编造了不存在的“事实”,下游Agent不核查就当作依据继续推导,类似以讹传讹。这是多Agent特有的故障放大链条,需要在节点间加入事实核查机制来阻断。A是网络问题,C是资源限制,D是生成参数问题。