多智能体协作:分工、编排与涌现
9.1 引言:一个Agent解决不了的问题
在前面的章节中,我们构建了功能越来越强的单个智能体:它能规划、能记忆、能调用工具。但当你真正把它丢进一个复杂业务场景——比如"从零撰写一篇深度行业报告"——你会发现它很快就会力不从心。
问题不在于模型不够聪明,而在于角色过载。一个Agent同时承担调研、写作、校对、排版、事实核查,就像让公司里唯一的那名员工既当销售、又写代码、还做财务报表——每件事他都懂一点,但每件事都做不精。即使能力够,上下文窗口也会被撑爆,注意力会被稀释,工具列表会膨胀到难以管理。
💡 小贴士:什么是"角色过载"? 想象一个人同时兼任记者、编辑、校对和美编。你让他先去采访、回来写稿、再自己校对、最后排版——不是做不到,而是每切换一次角色,他都要重新"进入状态",精力被反复拉扯。Agent也一样:当你把太多职责塞进一个System Prompt,模型的注意力会被分散,输出质量随职责数量增加而下降。解决之道就是像公司一样分工。
人类社会的解法是分工:把复杂任务拆给不同角色的专家,再通过流程把他们串起来。一家公司里有市场部、技术部、财务部,各部门各司其职,通过例会和流程协作完成单个部门搞不定的大项目。多智能体系统(Multi-Agent System, MAS)正是把这套思路搬到AI世界——让多个专精的Agent各司其职,通过通信协调,共同完成单个Agent难以胜任的任务。
更有意思的是,当多个Agent协作时,往往会涌现出设计中没有显式规划的行为:一个研究员Agent无意中提到的角度,激发了作者Agent的灵感;两个Agent在辩论中互相反驳,最终结论比任何一方都更严谨。这种涌现(Emergence) 是多智能体系统最迷人、也最难预测的部分。
💡 小贴士:什么是"涌现"? “涌现"指系统整体表现出任何单个组件都不具备的特性。好比一支篮球队,五个球员各自只有运球、传球、投篮的基本功,但组合在一起却能打出精妙的战术配合——这种配合不是任何一个球员单独能完成的,它"涌现"自团队的协作与互动。多智能体系统中的涌现同理:Agent间的对话与交锋,会产生超越任何一个Agent单独能力的洞察。
本章我们将从架构模式讲起,落到CrewAI和AutoGen两个主流框架的实战代码,最后讨论工程落地中的真实挑战。读完本章,你将能用两个框架各搭一个可运行的多智能体系统,并知道在什么场景下选哪个。
9.2 多智能体协作模式
多智能体怎么组织,本质上是一个编排(Orchestration) 问题——就像公司怎么排兵布阵,谁向谁汇报、谁和谁并行、谁给谁兜底,都属于编排的范畴。下面是四种最经典的协作模式。
💡 小贴士:什么是"编排(Orchestration)"? 编排源自交响乐——指挥不演奏任何乐器,但他决定谁在什么时候进入、什么时候停下、什么时候渐强。在多智能体语境下,编排就是"决定谁先发言、谁后发言、谁听谁的、什么时候结束"的那套规则。编排可以由代码硬编码(声明式),也可以交给一个"Manager Agent"动态决策。
9.2.1 串行流水线(Pipeline)
最直观的模式:Agent像工厂流水线一样依次处理任务,前一个的输出是后一个的输入。就好比报社的采编流程:记者采访→编辑改稿→校对终审,一步接一步。
|
|
优点是流程清晰、易于调试、每一步可独立优化。缺点是串行执行延迟高,任何一个环节卡住整条线都停摆——记者没交稿,后面所有人都得干等。适合任务边界清晰、有天然先后顺序的场景,如内容生产、数据处理管线。
9.2.2 并行分工(Parallel)
把一个任务拆成若干互不依赖的子任务,多个Agent同时处理,最后汇总。就像公司要写一份年度报告,市场、技术、财务三个部门同时分头写各自的部分,最后由总办合并成一份。
|
|
优点是延迟低、吞吐高——三个人同时干,总时间取决于最慢的那个人而非三人之和。难点在于子任务之间确实要无强依赖,且汇总Agent需要有能力融合异构结果(市场给的是趋势描述,财务给的是数字表格,怎么捏到一起是个技术活)。适合调研、多维评估、批量处理等场景。
9.2.3 层级委派(Hierarchical)
模仿企业组织架构:一个"Manager"Agent负责拆解任务和分派,多个"Worker"Agent负责执行,结果逐层上报。就像部门经理接到一个大项目,拆成子任务分给组员,组员干完汇报,经理验收后整合。
|
|
Manager承担规划与质量控制,Worker专注执行。优点是可扩展性强,能处理超大规模任务——实在忙不过来,Manager还能再拆一层子团队。缺点是Manager容易成为瓶颈和单点故障,层级过深时信息逐层失真,就像传话游戏传了五轮就面目全非。适合复杂项目管理、大型软件工程。
9.2.4 辩论式(Debate)
多个Agent围绕同一问题给出不同立场,通过多轮交锋收敛出更优答案。就像公司开会做重大决策时,有人扮演"乐观派"力推上线,有人扮演"魔鬼代言人"挑刺找漏洞,最后由裁判综合拍板。
|
|
这是最接近"涌现"的模式:Agent间的反驳会暴露单方忽略的漏洞——正方说"这个功能用户很喜欢”,反方马上追问"但成本是不是超预算了?"。代价是Token消耗大、收敛不可控——辩论可能跑偏成吵架,十轮还没结论。适合高风险决策、科学推理、安全审查等需要"对冲单点偏见"的场景。
四种模式对比
| 模式 | 拓扑结构 | 延迟 | Token消耗 | 典型场景 | 难点 |
|---|---|---|---|---|---|
| 串行流水线 | 链式 | 高(串行累加) | 中 | 内容生产、数据管线 | 瓶颈传播 |
| 并行分工 | 扇出-扇入 | 低(并行) | 中高 | 多维调研、批量任务 | 结果融合 |
| 层级委派 | 树形 | 中 | 高 | 项目管理、软件工程 | Manager瓶颈 |
| 辩论式 | 网状 | 高 | 很高 | 决策审查、科学推理 | 收敛控制 |
实际工程中很少用单一模式,往往是混合:外层层级委派,内部某条流水线用串行,关键决策点嵌入一轮辩论——就像一家大公司既有层级汇报,部门内又有流水线作业,重大决策还要开会辩论。
9.3 通信机制
模式决定"谁和谁说话",通信机制决定"怎么说"。就好比公司里同事之间沟通:可以发邮件(点对点)、可以往公告栏贴便签(共享黑板)、也可以在微信群里@全体成员(发布订阅)。
9.3.1 消息传递(Message Passing)
Agent之间直接发送结构化消息,最常见的是JSON。就像同事之间互发邮件,每封邮件都有发件人、收件人、主题和正文:
|
|
优点是语义清晰、可路由、易审计——每条消息都有明确的收发记录,出了问题能追溯到具体哪一封。CrewAI和AutoGen底层都基于消息传递。缺点是Agent数量多时点对点通信会组合爆炸(N个Agent两两通信是O(N²)条链路),需要引入路由层或消息总线来管理。
9.3.2 共享黑板(Blackboard)
所有Agent读写同一个共享数据结构——“黑板”。谁有新发现就写上去,谁需要就取走,无需知道对方是谁。就像办公室走廊里的那块大白板:研究员贴上调研笔记,作者路过看到了就拿来写稿,编辑写完评语也贴上去,三方互不见面却完成了协作。
|
|
黑板模式解耦了生产者和消费者——研究员不需要知道作者是谁,只要把笔记贴上白板就行。适合信息逐步累积、Agent角色动态加入的场景。挑战是并发写入的冲突与一致性(两个人同时改同一段怎么办),以及"谁该看哪部分"的权限控制。
9.3.3 发布订阅(Pub/Sub)
Agent订阅感兴趣的事件类型,发布者广播事件,中间件负责分发。就像公司邮件组:你订阅了"产品上线通知"组,只要有人往这个组发消息,所有订阅者都会收到,发布者不需要逐个@人。
|
|
Pub/Sub天然支持动态扩缩容——新增一个订阅者(比如再加个"翻译Agent")无需改动发布方,只要订阅事件就行。适合Agent数量多、角色经常变化的开放式系统。代价是引入消息中间件(Broker),调试链路变长——“这条消息到底被谁消费了"需要查日志才能确认。
工程上三种机制常组合使用:黑板做共享状态,Pub/Sub做事件通知,点对点消息做定向请求——就像公司里既有公告栏(黑板)、又有邮件组(Pub/Sub)、还有一对一私聊(消息传递),各司其职。
9.4 CrewAI实战:内容创作团队
CrewAI是目前最流行的"角色化"多智能体框架,核心抽象是三个:Agent(角色)、Task(任务)、Crew(团队)。它把"分工"这件事做成了声明式API,几行代码就能搭起一个团队——就像写一份岗位说明书加任务清单,剩下的交给框架执行。
💡 小贴士:什么是"声明式API”? 声明式API的意思是"你只管描述想要什么,框架负责怎么做"。你告诉CrewAI"有三个角色、三个任务、按顺序执行",至于怎么调度、怎么传上下文、怎么调LLM,都是框架的事。与之相对的是"命令式API"——你得自己写循环、自己管状态、自己控制流程。声明式上手快但灵活性低,命令式可控性强但代码量大。
9.4.1 安装与基础概念
|
|
CrewAI的三个核心概念,可以用公司来类比理解:
- Agent:一个有角色(role)、目标(goal)、背景故事(backstory)和工具集的智能体——相当于公司里的一位员工,有职位、有KPI、有简历、有工具。
- Task:一个有描述、期望输出、指派Agent的具体任务——相当于一份任务工单,写明了做什么、交付什么、派给谁。
- Crew:把多个Agent和Task组装成一个团队,指定流程模式(process)和执行顺序——相当于组建一个项目组,定好协作流程。
9.4.2 完整示例:内容创作团队
我们来搭一个"研究员 + 作者 + 编辑"三人团队,输入一个主题,输出一篇可发布的长文。这就像给一个微型编辑部下达选题:研究员负责跑腿采访,作者负责执笔,编辑负责把关。
|
|
运行后你会看到CrewAI按顺序执行三个任务:研究员先调用SerperDevTool联网搜索,把笔记交给作者;作者产出初稿;编辑审校输出终稿。整个流程的中间产物可以通过result.tasks_output逐个取出,方便审计和调试——就像项目完成后还能翻看每一步的中间稿。
💡 小贴士:LiteLLM 是什么? CrewAI底层用LiteLLM做模型适配层。LiteLLM是一个统一接口库,让你用同一套API调用OpenAI、Anthropic、Google等几十家模型商。所以你传
{"model": "gpt-5.4"}它能识别,传{"model": "claude-sonnet-4"}它也能路由。换模型只改字符串,不用改代码。
注意几个关键设计:
context=[...]显式声明任务依赖,CrewAI会自动把上游输出注入下游Agent的上下文,这是串行流水线的"数据总线"——相当于研究员把笔记递给作者时,不用作者自己再去查一遍。Process.sequential让任务按列表顺序执行;若改成Process.hierarchical,CrewAI会自动生成一个Manager Agent负责分派,相当于从"流水线"模式切换到"层级委派"模式(需额外指定manager_llm)。- 角色三件套(role/goal/backstory)不是装饰,它直接拼进System Prompt,深刻影响Agent的行为风格——研究员的backstory强调"引用必带来源",会显著降低幻觉率。这就像招人时看简历,有十年咨询经验的人做事风格就是和应届生不一样。
9.5 AutoGen实战:代码开发团队
如果说CrewAI的强项是"角色化分工",AutoGen的强项就是"对话式协作"。AutoGen把每个Agent看成一个会话参与者,通过多轮GroupChat让Agent们自己讨论出结果,更接近"会议室协作"的体验——不是你预先排好流水线,而是让几个专家坐进会议室,自己商量着干。
💡 小贴士:CrewAI vs AutoGen 的核心差异 CrewAI是"你定流程,Agent照着走"——像导演拿着剧本喊"第一场Action"。AutoGen是"你定参与者和规则,Agent自己聊"——像把几个专家关进会议室,告诉他们"讨论完出来交结果"。前者可控性强,后者灵活度高。
9.5.1 安装与基础概念
|
|
AutoGen 0.4+(重构版,也称AG2)的核心概念:
- AssistantAgent:能思考、能调用工具的智能体——相当于会议室里的专家。
- UserProxyAgent:代表人类或外部环境的代理,可执行代码、调用函数、在需要时把人拉进对话——相当于会议室里那个"能动手敲键盘"的人。
- GroupChat + GroupChatManager:把多个Agent放进一个群聊,由Manager决定谁下一个发言——相当于会议室的主持人。
9.5.2 完整示例:代码开发团队
我们搭一个"架构师 + 程序员 + 测试工程师"的群聊团队,输入需求,输出可运行并通过测试的代码。就像拉了一个三人群聊:架构师定接口→程序员写实现→测试跑用例,谁不满意就在群里@对方改。
|
|
💡 小贴士:为什么 AutoGen 要用
async/await? AutoGen 0.4 全面采用Python异步编程。异步的好处是:当一个Agent在等LLM回复时,其他Agent或工具可以并行工作,不会傻等。但代价是你不能直接team.run(),必须用await并在asyncio.run()里调用。如果你在Jupyter Notebook里跑,Notebook原生支持await,可以直接写result = await team.run(task=task)。
执行时你会看到一轮轮对话:架构师先给出接口设计,程序员按接口写实现,测试工程师写pytest并执行——如果失败,错误信息会回到程序员那轮,他修复后再次提交,直到Tester打出"APPROVED",群聊终止。这其实就是一个小型软件团队的完整开发闭环。
AutoGen的几个设计要点:
- RoundRobinGroupChat 是最简单的发言调度(按列表轮询Architect→Programmer→Tester→Architect…),就像圆桌开会按座位顺序依次发言。更复杂场景可换用
SelectorGroupChat(让LLM自己决定下一个该谁发言),这其实就实现了"层级委派"中Manager的功能。 - 终止条件至关重要:
TextMentionTermination靠关键词"APPROVED"终止,还可以叠加MaxMessageTermination、TokenUsageTermination等做多重保险——就像会议规定"有人说散会就散,或者超过两小时强制散"。多重终止条件用|或&组合,如TextMentionTermination("APPROVED") | MaxMessageTermination(30)。 - AutoGen的Agent天然支持工具调用(如代码执行器),这是它能做"写代码-跑测试-改代码"闭环的关键——测试工程师不只是"说"要跑测试,而是真的能执行代码并拿到结果。
9.6 多智能体系统的挑战
把多智能体从Demo推向生产,有几座绕不开的山。这些挑战不是"模型不够聪明"能解决的,而是系统工程问题。
9.6.1 通信开销与Token消耗
N个Agent两两通信的链路数是O(N²)量级,加上多轮对话,Token消耗会迅速膨胀。一个5-Agent的辩论系统跑一轮决策,烧掉的Token可能是单Agent方案的10倍以上。就像公司越大,内部沟通成本越高——5个人的团队沟通顺畅,50个人的公司天天开会,真正干活的时间反而少了。多智能体系统也有同样的困境:Agent之间互相对话的轮数一多,Token账单就会让你怀疑人生。
对策:尽量用串行或层级结构代替全连接(不是所有Agent都需要互相说话);让Agent之间传递"摘要"而非"原始上下文"(别把100页报告全文转发,给个摘要就行);给每个Agent单独的Token预算并监控,超了就报警。
9.6.2 一致性与冲突解决
两个Agent对同一事实给出矛盾结论时怎么办?比如研究员说"市场规模500亿",财务分析师说"只有300亿"。常见做法:引入"裁判Agent"做仲裁;在黑板模式中加版本号与冲突检测;对关键决策采用"辩论+投票"机制。
更重要的是事前约束:在System Prompt里明确每个Agent的职责边界,减少正面冲突的概率——就像公司里写清楚"市场数据以财务部为准,技术评估以CTO办公室为准",谁说了算提前定好,避免各说各话。
9.6.3 可观测性与调试
多Agent系统的执行轨迹是网状的——A调B、B调C、C又回头问A——“为什么最终结果是错的"极难定位。就像一个10人团队协作出了bug,你很难说是哪个环节哪个人搞错的。
💡 小贴士:什么是"可观测性(Observability)"? 可观测性指从外部推断系统内部状态的能力。在单Agent时代,你看一眼Prompt和回复就知道发生了什么。到了多Agent时代,Agent之间你来我往十几轮,只看最终结果完全没法定位问题。可观测性就是给系统装上"监控摄像头”:每条消息谁发给谁、第几轮、用了多少Token,全都记录在案。
对策:为每条消息打上trace_id和turn编号;把所有Agent的输入/输出落盘成结构化日志;用LangSmith、Langfuse等可观测平台可视化调用图。调试时先定位"哪个Agent哪一轮偏离了预期",再深入看它的Prompt和上下文。
9.6.4 成本控制
多智能体很容易把"省钱"变成"烧钱"——你以为多请几个Agent帮忙效率更高,结果账单翻了十倍。建议:对低成本决策用小模型(如gpt-5.4-mini),对关键推理才上大模型(gpt-5.4);给每个Crew/GroupChat设总Token上限和单轮上限;用缓存复用重复推理结果;对幂等任务做并发限流,防止失败重试时的成本雪崩。
💡 小贴士:什么是"幂等"? 幂等指同一个操作执行一次和执行多次效果相同。比如"设置开关为开"是幂等的——你调一次和调十次结果都是"开"。但"余额加100"不是幂等的——调十次就变成加1000了。对幂等任务做重试是安全的,对非幂等任务重试前要先检查状态。
9.7 框架对比
CrewAI、AutoGen、LangGraph是当前最主流的三个多智能体框架,定位各有侧重。选框架就像选管理工具:CrewAI是"任务看板",AutoGen是"群聊工具",LangGraph是"流程引擎"——它们都能帮你把多人协作管起来,但风格截然不同。
| 维度 | CrewAI | AutoGen | LangGraph |
|---|---|---|---|
| 核心抽象 | 角色+任务+团队 | 会话Agent+群聊 | 状态图+节点+边 |
| 编排方式 | 声明式(sequential/hierarchical) | 对话式(GroupChat) | 显式图(DAG/循环) |
| 通信机制 | 任务上下文传递 | 消息传递 | 共享State + 边的更新 |
| 适合场景 | 内容生产、流程化分工 | 代码协作、讨论式任务 | 复杂流程、需精确控制 |
| 流程可控性 | 中(声明式) | 低(LLM决定发言) | 高(图结构显式) |
| 学习曲线 | 平缓 | 中等 | 较陡 |
| 工具生态 | crewai-tools | autogen-ext | LangChain全家桶 |
| 持久化/人机协同 | 后期支持 | 原生支持(UserProxy) | 原生支持(checkpoint) |
💡 小贴士:什么是 DAG? DAG(Directed Acyclic Graph,有向无环图)是一种数据结构:节点之间有方向地连接,且不存在"绕回原点"的环路。LangGraph用它来描述Agent执行流程——每个节点是一步操作,边定义执行顺序。虽然叫"无环",但LangGraph实际支持条件循环(通过状态判断是否回头),所以它比纯DAG更灵活。
选型建议:
- 要快速搭一个分工明确的流程,选CrewAI,它的角色化抽象最贴近业务直觉——会写岗位说明书就会用。
- 要让多个Agent讨论式协作、能跑代码,选AutoGen,GroupChat体验最好——最接近"拉群开会"的自然交互。
- 要对流程做精细控制、需要循环和条件分支,选LangGraph,它本质是把Agent编排建模成状态机,可控性和可观测性最强——适合那些"一步走错全盘皆输"的高严谨场景。
三者并非互斥:LangGraph可以作为底层的编排引擎,上面跑CrewAI风格的Agent;AutoGen的Agent也可以被封装成LangGraph的节点。工程上更常见的是"以一个为主,借鉴其他"。
9.8 小结
本章我们从"一个Agent解决不了的问题"出发,系统梳理了多智能体协作的全景:
- 四种协作模式:串行流水线(工厂流水线)、并行分工(多部门同时干)、层级委派(经理分派活)、辩论式(开会交锋),各自适合不同形状的任务,工程上常混合使用。
- 三种通信机制:消息传递(发邮件)、共享黑板(贴白板)、发布订阅(群通知),解决"Agent之间怎么说上话"的问题。
- 两个实战框架:CrewAI用"角色+任务+团队"的声明式抽象搭建内容创作团队;AutoGen用"群聊+轮询发言"搭建代码开发团队,各自体现了不同的编排哲学——一个像导演拿剧本喊Action,一个像会议室里专家自由讨论。
- 四类工程挑战:通信开销、一致性冲突、可观测性、成本控制——这些才是把多智能体推向生产的真正难点,比搭Demo难得多。
- 框架选型:CrewAI胜在直觉、AutoGen胜在对话、LangGraph胜在可控,按需选择、混合使用是常态。
值得再次强调的是涌现:多智能体系统最诱人也最危险之处,在于它的整体行为往往超出设计者的显式规划。一个设计良好的协作可能涌现出"研究员无意提到的事实被作者敏锐放大成核心论点"的惊喜;一个设计糟糕的协作也可能涌现出"两个Agent互相吹捧、越走越偏"的灾难。掌控涌现的方向,靠的不是更聪明的模型,而是清晰的职责边界、可观测的执行轨迹、以及随时能把人拉回环路的兜底机制。
9.9 下一章预告:MCP协议
本章所有Agent之间的通信,都发生在同一个进程、同一个框架内。但真实世界里,你的Agent要调用的工具、要协作的伙伴,可能来自不同厂商、不同语言、不同进程。怎么让它们说同一种语言?
第10章我们将走进 MCP(Model Context Protocol) ——一个正在成为行业标准的"Agent与外部世界对话协议"。我们会看到MCP如何把工具、资源、提示统一成一组标准接口,让任何Agent都能即插即用地接入任何MCP服务器,真正实现跨框架、跨语言的智能体生态互联。
本章代码示例已上传配套仓库,建议边读边跑。多智能体的魅力,亲手跑过才体会得深。