一、为什么单 Agent 不够用了?
先讲一个真实场景。
你让一个 AI Agent 帮你写一篇技术调研报告,它需要:搜索资料 → 整理要点 → 撰写初稿 → 校对润色 → 排版输出。一个 Agent 从头干到尾,结果往往是:搜索不深、写作不精、校对走过场。
问题出在哪?一个 Agent 同时扮演五个角色,每个角色都不专业。
这就是 Multi-Agent(多智能体)要解决的核心问题——让专业的 Agent 干专业的事,通过协作完成复杂任务。
2025-2026 年,Multi-Agent 已经从学术概念走向生产落地:Anthropic 推出 Claude Managed Agents、OpenAI 发布 Agents SDK、微软 AutoGen 重构为异步 Actor 模型、LangGraph 成为编排事实标准。Jensen Huang 直接说"拐点已到"。
这篇文章,我会用最直白的方式讲清楚:Multi-Agent 到底是什么、有哪些架构模式、三大框架怎么选、以及一份可以直接跑的实战代码。
二、Multi-Agent 到底是什么?用人话讲
2.1 核心定义
Multi-Agent 系统 = 多个具备独立感知、决策和行动能力的 Agent,通过信息交换和任务协作,共同完成单个 Agent 难以高效完成的复杂任务。
拆开来看,三个关键词:
| 独立 | 每个 Agent 有自己的角色、工具、提示词和决策逻辑 | 公司里不同岗位的员工 |
| 协作 | Agent 之间能传递信息、委派任务、互相评审 | 团队开会、交接工作 |
| 共同目标 | 所有 Agent 围绕同一个最终任务运转 | 项目组共同交付一个产品 |
2.2 单 Agent vs Multi-Agent
| 角色 | 全能选手,什么都干 | 专业分工,各有所长 |
| 上下文 | 所有信息塞一个窗口,容易溢出 | 每个 Agent 只看自己需要的信息 |
| 容错 | 一步错步步错 | 可以互相检查、纠错 |
| 并行能力 | 串行执行 | 可并行处理多个子任务 |
| 复杂度 | 适合简单、线性任务 | 适合多步骤、多领域任务 |
| Token 消耗 | 相对可控 | 协作有"沟通成本",消耗更高 |
一句话总结:单 Agent 是"一个人干所有活",Multi-Agent 是"组建一个团队干活"。
三、Multi-Agent 的五种核心架构模式
不是所有 Multi-Agent 都长一个样。根据协作方式的不同,主流架构有以下五种:
3.1 Supervisor 模式(主管模式)
最常用、最稳妥的模式。 一个"主管 Agent"负责任务拆解和分配,下面挂多个"执行 Agent",主管收到结果后汇总或继续分配。
用户请求 → Supervisor(规划/分配)
├── Researcher(搜索资料)
├── Coder(写代码)
└── Reviewer(审核)
↓
汇总输出
适用场景:任务可以明确拆解为子任务,需要中心化控制。
3.2 Pipeline 模式(流水线模式)
Agent 之间按固定顺序串联,前一个的输出是后一个的输入。像工厂流水线。
输入 → Agent A → Agent B → Agent C → 输出
适用场景:流程固定、步骤清晰的任务,如"搜索→摘要→翻译→排版"。
3.3 Swarm 模式(蜂群模式)
Agent 之间平等,通过"交接(Handoff)"互相传递任务。没有中心调度者,谁觉得自己能处理就接过来。
用户 → Agent A →(处理不了)→ Agent B →(需要补充)→ Agent C
适用场景:客服路由、多领域问答,任务边界模糊但每个 Agent 有明确专长。
3.4 Debate 模式(辩论模式)
两个或多个 Agent 对同一问题给出不同答案,通过互相质疑、反驳,最终收敛到更优解。
Agent A(正方)↔ Agent B(反方)→ 评审 Agent → 最终结论
适用场景:需要深度推理、多视角分析的决策类任务。研究表明,辩论模式在数学推理和代码审查上能显著提升准确率。
3.5 Map-Reduce 模式(并行聚合模式)
将一个大任务拆成 N 个独立子任务,并行分配给 N 个 Agent 同时处理,最后由一个聚合 Agent 合并结果。
┌→ Agent 1 ─┐
任务 → ├→ Agent 2 ─┤→ Aggregator → 结果
└→ Agent 3 ─┘
适用场景:可并行拆分的任务,如多文档摘要、多源信息聚合。
四、三大主流框架怎么选?
目前 Multi-Agent 编排框架三足鼎立:LangGraph、CrewAI、AutoGen。它们代表了三种完全不同的设计哲学。
4.1 一句话定位
| LangGraph | 状态机驱动 | 画流程图,节点=Agent,边=流转 | 中等 |
| CrewAI | 角色分工驱动 | 组建团队,Agent=员工,Task=任务 | 最低 |
| AutoGen | 对话协商驱动 | 开研讨会,Agent=参会者,Message=发言 | 较高 |
4.2 详细对比
| 核心抽象 | StateGraph(状态图) | Agent + Task + Crew | ConversableAgent + GroupChat |
| 状态管理 | 显式状态容器,支持检查点/持久化 | 隐式状态传递,Manager 管理上下文 | 对话历史缓存,序列化状态 |
| 协作模式 | 节点流转,支持循环/分支/并行/Send API | 顺序执行 + 层级管理 + Handoff | 群聊对话,GroupChatManager 动态调度 |
| 灵活性 | 极高,完全自定义流程 | 中等,流程相对固定 | 高,自由对话可 backtrack |
| 可预测性 | 高,流程由代码定义 | 高,任务链明确 | 低,运行时动态决定发言顺序 |
| Token 效率 | 较好,按需传递状态 | 好,角色隔离减少冗余 | 较差,对话历史累积消耗大 |
| 生产就绪 | 高,支持断点续跑、人机交互 | 中,Enterprise 版增强 | 中,微软背书,v0.4 重构后更稳 |
| 学习曲线 | 需理解图和状态概念 | 最低,配置式开发 | 需理解异步 Actor 模型 |
| 最佳场景 | 复杂流程控制、工业级应用 | 快速原型、角色分工明确的任务 | 代码生成、多 Agent 讨论、研究探索 |
4.3 选型建议
- 选 LangGraph:你需要精细控制执行流程、要做生产级应用、需要断点续跑和人工介入。这是目前最推荐的框架。
- 选 CrewAI:你想快速验证想法、任务可以明确拆成"角色+任务"、不想纠结底层状态管理。20 分钟就能跑起来。
- 选 AutoGen:你在微软/Azure 生态、任务本质是多 Agent 对话讨论、需要代码执行 Agent。
我的建议:生产环境用 LangGraph,快速 Demo 用 CrewAI,研究探索用 AutoGen。如果只能学一个,学 LangGraph。
五、实战:用 LangGraph 搭建一个 Multi-Agent 写作系统
光说不练假把式。下面用 LangGraph 实现一个**“研究员 + 批评家 + 总结员”**三 Agent 协作系统,完整可运行。
5.1 系统设计
用户输入主题
↓
研究员(Researcher):搜集资料、给出论证
↓
批评家(Critic):指出漏洞和反例
↓ (循环最多 3 轮)
总结员(Summarizer):综合双方观点,输出最终报告
5.2 完整代码
from typing import TypedDict, Annotated
from langgraph.graph import StateGraph, START, END
from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage
# ========== 1. 定义共享状态 ==========
class DebateState(TypedDict):
topic: str # 讨论主题
research: str # 研究员的论证
critique: str # 批评家的反馈
history: str # 讨论历史
round_count: int # 当前轮次
final_report: str # 最终报告
# ========== 2. 初始化 LLM ==========
llm = ChatOpenAI(
model="deepseek-chat",
api_key="your-api-key",
base_url="https://api.deepseek.com",
temperature=0.7
)
MAX_ROUNDS = 3 # 最大辩论轮次
# ========== 3. 定义三个 Agent 节点 ==========
def researcher_node(state: DebateState) –> dict:
"""研究员:基于主题和批评意见,给出或修正论证"""
prompt = f"""你是一位资深研究员,正在研究主题:{state['topic']}
之前的讨论历史:
{state['history']}
批评家上次的反馈:{state.get('critique', '(第一轮,暂无反馈)')}
请根据批评意见修正和完善你的论证,要求:
1. 论点清晰,论据充分
2. 回应批评家提出的每一个质疑
3. 字数控制在 300 字以内
"""
response = llm.invoke([HumanMessage(content=prompt)])
new_research = response.content
return {
"research": new_research,
"history": state["history"] + f"\\n【研究员第{state['round_count']+1}轮】\\n{new_research}",
"round_count": state["round_count"] + 1
}
def critic_node(state: DebateState) –> dict:
"""批评家:指出论证中的漏洞"""
prompt = f"""你是一位严格的批评家,正在评审主题:{state['topic']}
研究员最新的论证:
{state['research']}
请用 3 句话指出论证中的具体漏洞、逻辑缺陷或反例,不要泛泛而谈。
如果论证已经足够完善,请回复"论证充分,无需修改"。
"""
response = llm.invoke([HumanMessage(content=prompt)])
critique = response.content
return {
"critique": critique,
"history": state["history"] + f"\\n【批评家第{state['round_count']}轮】\\n{critique}"
}
def summarizer_node(state: DebateState) –> dict:
"""总结员:综合讨论历史,输出最终报告"""
prompt = f"""你是一位总结专家,请基于以下讨论历史,输出一份结构化的最终报告。
主题:{state['topic']}
讨论历史:
{state['history']}
要求:
1. 先给出核心结论(100字以内)
2. 再列出主要论点(3-5条)
3. 最后说明尚存的争议或局限
4. 用 Markdown 格式输出
"""
response = llm.invoke([HumanMessage(content=prompt)])
return {"final_report": response.content}
# ========== 4. 定义路由逻辑 ==========
def should_continue(state: DebateState) –> str:
"""判断是否继续辩论:达到最大轮次 或 批评家认为论证充分"""
if state["round_count"] >= MAX_ROUNDS:
return "summarizer"
if "论证充分" in state.get("critique", ""):
return "summarizer"
return "researcher"
# ========== 5. 构建图 ==========
workflow = StateGraph(DebateState)
# 添加节点
workflow.add_node("researcher", researcher_node)
workflow.add_node("critic", critic_node)
workflow.add_node("summarizer", summarizer_node)
# 定义边
workflow.add_edge(START, "researcher")
workflow.add_edge("researcher", "critic")
workflow.add_conditional_edges(
"critic",
should_continue,
{
"researcher": "researcher", # 继续辩论
"summarizer": "summarizer" # 进入总结
}
)
workflow.add_edge("summarizer", END)
# 编译
app = workflow.compile()
# ========== 6. 运行 ==========
if __name__ == "__main__":
initial_state = {
"topic": "Multi-Agent 系统是否会成为 AI 应用开发的主流范式?",
"research": "",
"critique": "",
"history": "",
"round_count": 0,
"final_report": ""
}
result = app.invoke(initial_state)
print("=" * 60)
print("最终报告:")
print("=" * 60)
print(result["final_report"])
print(f"\\n(共进行 {result['round_count']} 轮辩论)")
5.3 代码要点解读
State(状态)是核心:所有 Agent 通过共享的 DebateState 传递信息,每个节点只读写自己关心的字段。这是 LangGraph 与 CrewAI/AutoGen 最大的区别——状态显式、可控、可持久化。
条件边实现循环:add_conditional_edges 让批评家节点后可以选择"回到研究员"或"进入总结员",实现辩论循环。这在普通链式调用里很难做到。
最大轮次防止死循环:MAX_ROUNDS = 3 是必须的,否则 Agent 可能无限辩论下去。
每个 Agent 独立提示词:研究员、批评家、总结员各有各的角色设定和输出要求,这就是"专业分工"的体现。
六、落地踩坑与最佳实践
6.1 五个常见坑
| 上下文爆炸 | Agent 越聊越慢,Token 飙升 | 每个 Agent 只传必要信息,用摘要代替完整历史 |
| 死循环 | 两个 Agent 互相甩锅,永不结束 | 设置最大轮次、超时机制、明确的终止条件 |
| 角色模糊 | Agent A 干了 Agent B 的活 | 提示词里明确职责边界和"不该做什么" |
| 信息丢失 | 交接时关键信息没传过去 | 用结构化状态而非自然语言传递,关键字段必填 |
| 成本失控 | 一次任务烧掉几万 Token | 监控每轮 Token 消耗,小模型做简单 Agent,大模型做核心决策 |
6.2 六条最佳实践
先单 Agent,再多 Agent:不要上来就搞 5 个 Agent。先确认单 Agent 搞不定,再拆分。很多任务一个好的 ReAct Agent 就够了。
Agent 数量控制在 2-5 个:Agent 越多,协作成本越高。超过 5 个 Agent 的系统,调试和维护成本会指数级上升。
用小模型做"工人",大模型做"主管":搜索、格式化等简单任务用便宜模型,规划和决策用强模型。能省 60% 以上成本。
必须有人工介入点:在关键决策节点(如"是否发送邮件"“是否执行删除”)设置 human-in-the-loop,让用户确认后再继续。LangGraph 的 interrupt_before 原生支持。
持久化状态:用检查点(Checkpointer)把状态存到 Redis/PostgreSQL,支持断点续跑。生产环境必备。
可观测性:每个 Agent 的输入输出、Token 消耗、耗时都要记录。推荐用 LangSmith 或自建日志面板。
七、2026 年的新趋势
7.1 Agent 基础模型(Agent Foundation Model)
2025 年底出现的 Chain-of-Agents 等研究表明,可以把多 Agent 协作的能力"蒸馏"到单个模型里,让一个模型在推理时动态激活不同的"工具 Agent"和"角色 Agent",端到端完成多步任务。这可能改变 Multi-Agent 的形态——从"多个模型协作"变成"一个模型内部模拟多角色协作"。
7.2 MCP 协议成为基础设施
Anthropic 推出的 MCP(Model Context Protocol) 正在把工具调用从 Prompt 工程升级为协议层。Agent 可以通过 MCP 动态发现和调用外部工具,这让 Multi-Agent 系统的工具共享变得标准化。
7.3 开源模型集体协作
SMACS 等研究证明,多个开源小模型通过 Multi-Agent 协作,可以在某些任务上匹配甚至超越闭源大模型。这为成本敏感的场景提供了新思路——不是追求更大的模型,而是追求更聪明的协作。
7.4 跳过文本对话的高效协作
斯坦福和英伟达联合提出的 RecursiveMAS,通过轻量级的 RecursiveLink 模块直接在模型隐状态层面传递信息,跳过了"生成文本→解析文本"的低效环节,推理速度提升 2.4 倍。未来 Agent 之间的通信可能不再是自然语言。
八、总结
回顾一下全文的核心要点:
最后说一句:Multi-Agent 不是银弹。 它能提升复杂任务的质量,但也带来了更高的成本、更复杂的调试和更难的可控性。在决定用 Multi-Agent 之前,先问自己三个问题:
- 这个任务单 Agent 真的搞不定吗?
- 能明确拆成几个独立的子任务吗?
- 我有能力调试和监控多 Agent 系统吗?
三个都答"是",再上 Multi-Agent。
如果这篇文章对你有帮助,欢迎点赞、收藏、关注!有问题可以在评论区交流。 参考资料:




