1. 先别急着选框架:你的业务真的需要多智能体吗
1.1 我见过最多的一类失败:把一堆Agent硬凑成一个平台
上个月有个做供应链产品的朋友来找我,说想搭建多智能体协作平台,理由很直接:老板看到了多智能体相关的行业报告,觉得别人都在做,我们也必须得做。他原来系统里已经有三个Agent在跑,分别处理订单问答、物流查询、售后安抚,效果都还行。现在的问题是想把这几个Agent串起来,再加几个新角色,组成一个“AI团队”。
我问他一个问题:你现在的单Agent方案,具体卡在哪个环节?他想了半天说,好像也不卡,但老板觉得不够先进。
这不是个例。过去一年我看了不少多智能体项目,有一半以上属于“为了协作而协作”。三个Agent都能独立工作,相互之间甚至没有强依赖关系,硬要用编排框架把它们拉到一个平台里,只会多出三类成本:
- 消息传递和上下文切换的Token成本,可能占整体调用量的30%到50%;
- Agent之间来回确认导致的延迟,用户反而觉得变笨了;
- 互相“客气”或“互相甩锅”式的低质量对话,需要大量调优。
所以我想先花一整节把一个问题说透:什么时候你才真的需要多智能体,而不是一个更强的大模型,或者一个更好的Prompt。
1.2 多智能体的典型适用场景,三句话能说清
我自己的判断标准比较简单,如果你的需求同时满足下面几个特征,那考虑multi-agent架构是合理的:
第一个特征是“一条任务线上有多个专业角色,且每个角色需要独立的上下文”。比如做一个面向企业的研报生成系统,一个Agent只负责查数据,另一个Agent负责判断数据可信度,第三个Agent负责写报告。这三个角色职责完全不同,如果塞进同一个Context里,会互相干扰。查数据的Agent不需要考虑文风,审核数据的Agent需要“怀疑一切”,写报告的Agent又被要求“通俗易懂”。这种角色冲突在单Agent里是没法长期共存,容易导致今天输出偏保守、明天输出偏激进。
第二个特征是“同一个任务内部存在并行子任务”。拿“对竞品做全面分析”来说,你需要同时分析功能、价格、市场声量、技术路线。单Agent只能串行做,时间被拉长;多Agent能把四条线并行铺开,各自维护一套调研笔记,最后汇总。
第三个特征是“决策链路需要可回溯和多人监督”。比如金融领域的合规审查或者医疗问诊建议,你不能让一个模型一口气给出终稿,中间要有人工审核点。多智能体协作平台能很自然地把流程切分成:发起任务、分工、执行、交叉审核、最终输出几个阶段,在每个阶段都能留痕和介入。
反过来,如果任务只是一个简单的问答、一次文本翻译、或者一次数据结构固定的表单填写,那请务必不要上多智能体,直接用单Agent加工具,效果更稳、成本更低。
1.3 想清楚平台要解决什么,再去看AI工具
在多智能体协作平台里,核心从来不是某个大模型有多聪明,而是“多个具备工具的智能角色之间如何组织、编排、共享信息、避免冲突”。
这也是为什么我建议你先画一张“角色与流程草图”,而不是先下框架。草图至少包含四个要素:
- 你打算设置哪几个Agent角色,每个角色拥有什么独立工具;
- 任务进入平台后,第一站是谁,后续按什么条件流转;
- 哪些环节需要汇合,汇合后由谁做决策;
- 哪些环节需要人工介入审批,哪些完全自动化。
这张图画完,你才知道自己需要的是编排引擎、消息总线、MCP工具接入层,还是完整的企业级Agent平台。不然直接去翻开源项目,很容易被MetaGPT、AutoGen、CrewAI这些项目带跑偏,装了又删,删了又装,浪费一整个周末。
2. 拆开看一台“多智能体协作平台”到底由哪些零件组成
2.1 六个模块,少一个后期都要补课
如果要把多智能体平台拆成零件,我的分类是下面六大块,选型时对照着看,非常省事:
| 模块 | 职责 | 典型问题 | 对应工具/方案 |
|---|---|---|---|
| 编排引擎 | 决定任务的流转路径,谁先执行、谁后执行、满足什么条件跳到哪个分支 | 流程死板或过于自由 | LangGraph、CrewAI、自研状态机 |
| Agent运行时 | 定义Agent的角色、Prompt、可用模型、上下文窗口 | Agent角色感弱、上下文混用 | LangChain、AutoGen、AG2 |
| 记忆与状态 | 多轮协作中的短期任务上下文和长期业务记忆 | 状态丢、无法断点续跑 | LangGraph的Checkpointer、向量数据库 |
| 工具与协议层 | 让Agent能调用外部API、数据库、搜索、内部系统 | 工具接入重复造轮子 | MCP协议、函数调用、插件体系 |
| 可观测性 | 记录每次调用的输入输出、Token消耗、决策链路 | 出了问题无法排查、无法复盘 | LangSmith、Langfuse、Phoenix |
| 人机协同 | 在关键节点插入人工审核、确认、修正入口 | Agent自作主张、失控 | LangGraph的interrupt、自定义审批界面 |
很多入门者只关心第一行“编排引擎”,觉得框架选好了平台就搭了一大半。实际从我踩坑的经验来看,真正决定项目能不能落地的是记忆状态、工具体系和可观测性这三块。
2.2 四种交互模式:这是所有选型决策的源头
多智能体到底怎么协作?我总结下来就四种模式,你脑子里有这四张图,看任何工具手册都很快:
串行流水线模式。Agent A的输出,是Agent B的输入,一个接一个,像工厂流水线。优点是简单、可控、好排查;缺点是慢,而且错误会向下游传导。适合文档处理流程,比如“信息抽取Agent”输出结构化字段,交给“审核Agent”校验,最后交给“格式化Agent”生成报告。
编排者-执行者模式(Orchestrator/Worker)。一个“主导Agent”负责拆解任务,几个“执行Agent”分别领活。这是目前落地最广的模式,因为它最接近真实项目管理。规划Agent只做规划,执行Agent只做执行,互不越权。
对等协作/辩论模式。多个Agent围绕同一个议题各自给出结论,再互相评价或辩论,最后汇总。适合头脑风暴、方案评审、安全风险识别这类任务。例如两个Agent一个扮“进攻方”一个扮“防守方”,反复攻防找出需求漏洞。
共享黑板/事件总线模式。所有Agent共享一块可读写的信息区域,谁看到新消息就去处理,Agent之间没有直接调用关系,解耦性最高。适合事件驱动的系统,比如舆情监控,一个Agent负责抓取,另一个Agent负责判断是否触发预警。
这里有一个热搜词叫“多智能体的四种交互模式包括哪些”,其实指的就是上面这套。你可能也发现了,有些AI工具适合流水线,有些天然支持辩论,有些支持黑板模式。选型第一步不是比工具列表,而是明确你要用哪种模式。
2.3 通信协议:是时候了解MCP了
平台里每个Agent都要干活,但“伸手够东西”这件事不能每个Agent都自己用自己的方言来。过去最常见的做法,是在每个Agent的Prompt里写清楚:当你想查询物流时,调用query_logistics(express_id)这个函数。每个Agent都要接入一遍函数定义,换一个模型供应商又得重新适配。
MCP(Model Context Protocol)解决的就是这种“每个模型都要重新发明一次工具接入方式”的问题。它把工具、数据源封装成标准化的MCP Server,Agent运行时只需要实现MCP Client就能访问任意工具,和USB接口的思路几乎一模一样。
我见过有人问,某些冷门系统怎么集成进多智能体平台?实际上只要把对应功能封装成一个MCP Server,注册到Agent工具列表里,就能被任意角色调用。
这部分的选型建议很简单:
- 如果只是快速验证Demo,直接用各种模型自带的Function Calling就够了;
- 一旦你的平台要考虑多种模型、多个部门系统、后续要复用工具资产,尽早统一到MCP协议上。国内像DeepSeek、Kimi这些模型本身已经兼容了工具调用格式,配合MCP Client也很顺。
3. 主流的AI工具盘点:四类框架和它们适合的人群
3.1 轻量快速原型:CrewAI和AutoGen/AG2
对刚接触多智能体的人,我一般先推荐CrewAI,因为它最像“写游戏剧本”。你只需要给每个Agent设定角色Role、目标Goal和背景Backstory,再把任务的流转Process定义成顺序执行或层级执行,CrewAI就能把整个流程跑起来。
比如定义一个“行业研究员”和“报告撰写人”的Crew,几十行代码就能看到一个Agent先调研,另一个Agent基于调研结果写长文。对初学者来说,这种直观的“角色扮演”式API最容易建立心智模型。
但CrewAI的问题在于流程表达力有限,图分支和条件判断远不如LangGraph灵活。一旦业务逻辑复杂,你会被迫在Crew里塞各种“任务回调”,整个代码很快变得拧巴。
AutoGen是另一个方向。它的核心抽象是ConversableAgent,两个或多个Agent可以在一段“群聊”里自由对话,直到任务收敛。最经典的例子就是“程序员Agent”和“代码执行Agent”来回沟通,一个写代码一个跑代码,发现问题打回去改。
这里有个关键提醒:微软原版AutoGen的更新节奏在2024年下半年明显变慢,目前社区活跃度高的主要是由原团队一部分人分叉出来的AG2项目。如果你从零开始,我建议直接用AG2,而不是教程还停留在一年前AutoGen API的老资料。
AutoGen系列的优点是把“辩论”“群聊”这类多Agent交互做得非常自然,适合头脑风暴、多角色审核;缺点是自由对话容易失控,token消耗也高,不适合生产环境下的固定流程。
3.2 严格流程控制:LangGraph几乎是必选项
如果你要处理的是银行、医疗、供应链这类对流程和合规有严格要求的场景,我的首选是LangGraph。
它和CrewAI/AutoGen最大的区别在于:不把Agent当成第一公民,而是把“图”当第一公民。你的业务逻辑被建模成一张有向图,节点是Agent或工具调用,边是状态转移条件。每个节点执行完,更新共享状态,然后根据状态决定下一步走哪条边。
这种设计带来两个好处:
- 你一定能看懂流程:整张图就是你的流程图,出了事故画出来就能复盘,而不是黑盒里两个Agent互相对话;
- 你可以随时插人工:图上任意两个节点之间都能放一个interrupt(中断点),让系统停下来等人工审批。这个能力对于金融合规太关键了,AI可以生成建议,但最终指令必须由人在系统里点确认按钮。
代价是开发门槛更高。你需要理解状态Schema、条件边、持久化Checkpoint这些概念,学习曲线比CrewAI陡不少。写代码量也大,一个简单三节点图都要几十行样板。我可以接受这个成本,因为可控性带来的长期维护收益远高于初期的那点开发投入。
3.3 特定领域大而全:MetaGPT和托管式平台
MetaGPT从名字就能看出它的野心——它模仿一家软件公司的工作方式,把Agent设计成产品经理、架构师、项目经理、工程师等角色。你输入一个产品需求,它按内部SOP把需求一步步转成PRD、设计任务、技术方案和代码。如果团队要快速做软件外包方案、AI辅助开发,MetaGPT的价值立竿见影。
但MetaGPT的缺点也很明显:角色职责是预设好的,它们为“软件公司”而设计,想硬改成别的业务领域,灵活性很低。它更像一个解决特定问题的重型装备,不是多用途平台。
另一条路线是不写代码直接搭平台,典型代表是Dify和Coze(扣子)。Dify更像是LLMOps平台,能编排工作流、接入知识库、管理多个Agent。Coze则有丰富的插件和发布渠道,适合非技术背景的业务团队快速做聊天机器人。这类托管式平台的优点是上手快,开发负担小,适合在企业内部做MVP验证;缺点是多Agent协作的深度相对有限,真到复杂分支和自定义协议时,还是会回到代码框架。
3.4 周边基建工具:决定你的平台到底好不好用
多智能体平台不是只由“Agent框架”组成的。我平时项目里至少有三分之一的时间在调周边工具:
- MCP Server生态:GitHub上已经有大量现成的Server,覆盖文件操作、数据库、搜索、浏览器自动化、SSH等场景。省去自己从零写工具接入的功夫。
- 向量数据库:用于长期记忆和知识检索,常见选择有Chroma(本地轻量)、Qdrant(性能好)、Milvus(大规模)。如果做平台级长期记忆,建议把向量库独立出来,方便多个Agent共享访问。
- 可观测平台:开源界推荐Langfuse,不仅能看链路Trace和Token成本,还能做Prompt版本管理和质量评估。
4. 实操:从零搭一个最简“一主多从”协作平台
4.1 我们做一个具体的东西
讲再多理论不如直接跑通一个场景。我选一个比较通用、又能体现多智能体价值的例子:给一个产品需求生成一份技术选型报告。
流程这么设计:
- 规划Agent收到需求后,拆分为“调研领域A”“调研领域B”“交叉验证”三个阶段;
- 两个调研Agent并行执行,分别输出带来源的结构化调研结论;
- 评审Agent对两份结论里的矛盾点进行复核;
- 最终由一个写作Agent合并成完整报告。
这其实就是“编排者-执行者模式”的最小落地版。我选择用LangGraph来实现,原因是这个流程有明确的并行和汇聚节点,图模型最贴合。
4.2 核心代码骨架
先定义整体状态。这里用TypedDict作为各节点之间传递的消息结构:
from typing import TypedDict, List from langgraph.graph import StateGraph, END class AgentState(TypedDict): requirement: str plan: str research_a: str research_b: str review: str final_report: str然后定义节点函数。节点函数的输入是AgentState,输出是AgentState的一个片段,LangGraph负责把输出合并回总状态。这么设计的好处是什么呢?每个Agent只看到自己关心的字段,不会把整段Context都塞给模型。
def planner_node(state: AgentState) -> dict: # 此处调用大模型生成调研计划 plan_prompt = f"根据需求拆分调研子任务,输出计划:{state['requirement']}" plan = call_llm(plan_prompt) return {"plan": plan} def research_a_node(state: AgentState) -> dict: result = call_llm(f"按计划执行调研A:{state['plan']}") return {"research_a": result} def research_b_node(state: AgentState) -> dict: result = call_llm(f"按计划执行调研B:{state['plan']}") return {"research_b": result} def reviewer_node(state: AgentState) -> dict: review = call_llm(f"对比以下两份调研的结论差异:\nA:{state['research_a']}\nB:{state['research_b']}") return {"review": review} def writer_node(state: AgentState) -> dict: final = call_llm(f"结合评审意见生成最终报告:{state['review']}") return {"final_report": final}把图连起来,并行分支是LangGraph最擅长的部分:
graph = StateGraph(AgentState) graph.add_node("planner", planner_node) graph.add_node("research_a", research_a_node) graph.add_node("research_b", research_b_node) graph.add_node("reviewer", reviewer_node) graph.add_node("writer", writer_node) graph.set_entry_point("planner") graph.add_edge("planner", "research_a") graph.add_edge("planner", "research_b") graph.add_edge("research_a", "reviewer") graph.add_edge("research_b", "reviewer") graph.add_edge("reviewer", "writer") graph.add_edge("writer", END) app = graph.compile()当planner节点执行完,两个调研节点理论上可以被并行调度,大大节省了多个串行调用所浪费的时间。真实项目里,两个调研节点可以分别调用不同的模型甚至不同的RAG知识库,这就是角色的意义。
4.3 需要特别注意的三个细节
第一,每个节点提示词要写“我只负责这一段”。很多人把多智能体之间的边界破坏掉,方式是一样的——在每个节点里把上下文全盘托出,告诉模型所有信息。结果规划Agent开始帮别人写报告,研究员开始评价文风。正确的做法是把每个Propmt限制在“你现在扮演什么角色、输入什么数据、输出什么格式”,其他字段一概不出现。
第二,输出结构比输出内容更重要。我给每个Agent定义的输出都是JSON字符串或者固定头的Markdown。比如调研Agent的Prompt里写死“必须输出格式为:结论、证据、来源链接、置信度”,这样下游评审Agent才能稳定解析。不要指望大模型“自觉”维护格式,要每次都把格式要求放在Prompt末尾再强调一遍。
第三,一定要有评审和终稿分离。这是我自己早期会忽略的点,写报告如果直接让总Agent汇总,大概率把不同来源的错误信息缝在一起。多了评审这个节点后,至少让不同结论的冲突暴露出来,再由人来决策。
4.4 如何判断这套平台跑成功了
跑Demo成功不算成。我判断一套多智能体协作平台是否真的能交付,会做三件事:
- 把同一个需求跑三轮,检查输出结构是不是基本一致,内容有没有某个角色偶尔“失忆”漏掉关键步骤;
- 故意给一个边界需求(比如需求描述自相矛盾),看是否有Agent能发现矛盾而不是硬编;
- 统计每轮调用消耗了多少Token花了多少时间,算清楚边际成本。
5. 深度踩坑:Agent协作中的四大真实问题
5.1 死循环和Token黑洞:智能体“聊嗨了”不收敛
这类问题在AutoGen那种对话式框架里尤其明显。两个Agent本来是在讨论技术方案,讨论讨论就会变成互相挑错,一个说“你要考虑扩展性”,另一个就说“可扩展性会引入过度设计”,然后无限循环。
我在生产环境里处理这类问题的经验有两条:
- 给所有Agent间对话加一个强制的终止条件,不只是最大轮数,还要有“结果收敛判断”。比如当一个Agent连续两次输出没有新增信息,系统就调用“会议终结者”角色来收尾。
- 更彻底的办法是用LangGraph这类确定性框架,把无限对话变成有限步骤。每一步都有明确的输入输出Schema,不依赖自由对话收敛。
在LangGraph里,如果状态图出现意外循环,它默认会有一个递归限制,超出限制直接抛异常。所以实际系统中,循环不会无限烧钱,最多是报错让你去排查。但如果你用的是自由对话式框架,务必在顶层套一层TotalTokenLimit。
5.2 幻觉污染:下游Agent分不清来源,把瞎话当事实
多智能体系统里真正可怕的问题不是单个Agent产生幻觉,而是幻觉传染。调研Agent本身只负责归纳信息的,它可能把一个不存在的来源写进结论,写作Agent“信任”它的输出,就把这个幻觉当成事实写进最终报告,还包装得漂亮。
解决这个问题的关键用一句话说:每个结论都要有能力追溯上游来源。
我在框架里会给每个Agent的输出定义统一字段,叫做source_ids,它是一个列表,里面存放该结论引用的资料ID或工具调用ID。如果某个结论没有任何来源,下游评审Agent会直接打回。加上这一层之后,系统的可信度提升非常明显。
再进一步,重要数据节点不要只做单Agent判断,可以做“两次独立调研再交叉验证”。从成本上确实翻倍,但你换回的是对幻觉拦截的能力。
5.3 角色感漂移:Agent干着干着就“抢别人活”
多智能体平台上线跑了一周后,你会慢慢发现某个Agent开始越权。原本专注SQL查询的Agent,某一天开始直接给用户道歉或承诺退款,原因多半是开发时把系统级消息和角色提示词在Context里放得太近,Agent学到了不该学的模式。
我自己的约束方式是“提示词层限定行为边界,代码层限定权力边界”。比如以MCP工具权限为例,在代码层明确订单查询Agent只能调用只读接口,不能访问创建订单和退款接口。这样就算大模型真的出现越权意图,它也没有对应的工具去执行。
5.4 排查靠“单步回放”,而不是反复试整体
多智能体系统报错最讨厌的地方在于,网络一抖或者模型输出格式稍微一变,链路某个环节就断了。传统Debug办法是重新跑一次全流程,但全流程可能要跑几十次模型调用,又费时间又费钱。
我的做法是给每个节点都做“单步断点重放”。我利用LangGraph生成的状态轨迹,把历史运行记录存下来,排查时直接拿某一步的实际输入,单独执行该节点的函数,看它是否报错。这样就不用重跑前面的所有Agent了,排查效率至少快好几倍。
这个思路值得复用到手工测试阶段:你给某类脏数据准备好样本,每次只传入一个节点测试Prompt,设计团队会用这个手段做Prompt回归测试。
6. 如果让我重新选型,我会怎么决策
6.1 不同团队规模的推荐组合
- 如果你是一个人开发者,想做多智能体Demo,那么直接CrewAI或者AG2就够了,重点是快速验证想法。接一个DeepSeek/Kimi之类性价比高的模型,把成本压低。
- 如果你在小团队里,要在真实业务里落地,我的推荐是LangGraph做编排,把所有Agent的业务代码写成独立的函数,数据存储用一个轻量数据库和Chroma,可观测先上Langfuse。
- 如果你是非技术团队,想在客服、内容生产上试试水,Coze和Dify几乎是零门槛的入口,先跑起来拿业务反馈比追求架构完美重要得多。
- 如果你在大公司需要高并发和强合规,那就不是套框架的问题了。你需要基于LangGraph的思路做一套有状态、可扩展、可审核的自研编排服务,模型可以用开源模型私有化,中间环节加审批流。
6.2 Token预算必须按“放大系数”算
最后说一个很多人会忽略的事情。单Agent一次调用的Token成本很容易算,多Agent平台的成本绝不是简单的“相加”,而是“相乘”的关系。
模型的一次错误可能会导致某个环节重试,一次重试要重新调用多个Agent,Token消耗是翻倍的。实际运营一个多Agent业务时,平均每个用户请求消耗的成本往往是单Agent方案的5到10倍。
所以在上线前,一定要做预算封顶和熔断机制。我的做法是为按需服务设定单请求Token上限,超过阈值立刻走降级路径,把问题转接给人工或一个兜底单Agent,而不是无限重试。
6.3 我现在的默认技术栈
当前阶段如果让我从零起步搭一个需要交付和迭代的多智能体协作平台,我的默认组合是:LangGraph负责编排,所有的外部能力全部走MCP Server,消息链路用Langfuse记录,长期记忆放在一个独立的向量库里,再配合企业内地模型和商业模型按角色混合使用。前端简单配一个聊天界面或API网关,不要急着做复杂的可视化编排界面。
这套组合未必是最花哨的,但它能把“可控性、可观测性、可维护性”三个核心诉求都照顾到。之后如果出现了新的交互模式和新的Agent协议,只要你的图状态设计得足够清晰,把某个节点替换掉并不是难事。
做多智能体平台最有意思的地方在于,它不是单纯把多个AI堆叠在一个系统里,而是在设计一个微型的“组织”。每个人各司其职,每个人都知道自己的边界和下游是谁,出了问题能追溯到人。这套工程方法论的积累,比任何单一模型的能力升级都更能让系统长期稳定运行。