多智能体系统¶
虽然单个智能体可以处理许多任务,但复杂的现实问题通常受益于 多个专业智能体协同工作。多智能体系统为不同的智能体分配不同的角色、能力和通信协议,实现单个智能体无法完成的协作。
为什么需要多智能体?¶
| 场景 | 单智能体 | 多智能体 |
|---|---|---|
| 研究 + 写报告 | 任务过载,质量下降 | 研究员 + 作家 |
| 代码审查 | 视角单一 | 编码员 + 审查员 + 安全分析师 |
| 客户服务 | 一刀切 | 分流 + 产品 + 升级 |
| 模拟社会 | 不可能 | 每个人 = 一个智能体 |
关键优势:专业化、并行性、分工和真实感。
1. OpenAI Swarm¶
类型: 轻量级多智能体编排框架
仓库: openai/swarm
发布: 2024 年 10 月
核心: 智能体之间的轻量级交接(handoff)
OpenAI Swarm 是一个**实验性框架**,用于多智能体编排——管理智能体之间的交接和上下文传递,而非依赖固定流水线。
核心概念¶
Agent — 具有指令(系统提示词)和工具的单元:
from swarm import Swarm, Agent
client = Swarm()
sales_agent = Agent(
name="Sales Agent",
instructions="你是一个友好的销售助手。简洁且有帮助。",
tools=[lookup_product, check_inventory]
)
support_agent = Agent(
name="Support Agent",
instructions="你是一个技术支持专家。严谨且准确。",
tools=[diagnose_issue, escalate_ticket]
)
Handoff(交接) — 将对话移交给另一个智能体:
def transfer_to_sales():
"""交接给销售智能体"""
return sales_agent
def transfer_to_support():
"""交接给支持智能体"""
return support_agent
sales_agent.tools.append(transfer_to_support)
support_agent.tools.append(transfer_to_sales)
核心洞察: Swarm 使用两个原始操作——handoff 和 function calling。没有中央协调器。LLM 根据函数返回值决定何时交接。
完整示例:客户服务流水线¶
from swarm import Swarm, Agent
client = Swarm()
triage_agent = Agent(
name="Triage Agent",
instructions="""你是一个客户服务分流智能体。
将用户路由到合适的智能体:
- 购买、账单、产品信息 → transfer_to_sales
- 技术问题、故障、报错 → transfer_to_support
""",
tools=[]
)
sales_agent = Agent(
name="Sales Agent",
instructions="你帮助用户处理购买、账单和产品信息。",
tools=[lookup_product, process_order]
)
support_agent = Agent(
name="Support Agent",
instructions="你帮助用户解决技术问题。严谨处理。",
tools=[diagnose_issue, create_ticket]
)
triage_agent.tools.extend([
lambda: sales_agent,
lambda: support_agent,
])
response = client.run(
agent=triage_agent,
messages=[{"role": "user", "content": "我的机械臂发出奇怪的噪音"}]
)
print(response.messages[-1]["content"])
设计哲学¶
OpenAI 刻意避免"智能编排"——让 LLM 决定流程会让调试变成"黑箱"。相反,Swarm 暴露底层原语(handoff + function calling),让开发者可以观察和干预每一步。
"Swarm 和自己写 if-else 的区别是:三年后你会想知道为什么当时没写成 Swarm 那样。" — GitHub 评论
优势与局限¶
| ✅ 优势 | ❌ 局限 |
|---|---|
| 极其轻量(~800 行代码) | 无内置持久化 |
| Agent-as-tool 灵活性 | 无原生多智能体记忆共享 |
| 易于理解和原型开发 | 实验性(不适合生产) |
| 原生 OpenAI API 集成 | 错误处理和恢复有限 |
2. Microsoft AutoGen → Microsoft Agent Framework (MAF)¶
类型: 多智能体会话框架
论文: AutoGen (2023) | MAF (2025)
演进: AutoGen v0.4 (2025) → 与 Semantic Kernel 合并 → Microsoft Agent Framework (MAF) (2025 年 10 月)
AutoGen 首创了**智能体是对话的参与者**这一理念。到 2025 年,它已演变为 Microsoft Agent Framework (MAF),将 AutoGen 的多智能体模式与 Semantic Kernel 的企业级可靠性相结合。
核心概念:ConversableAgent¶
from autogen import ConversableAgent
assistant = ConversableAgent(
name="assistant",
system_message="你是一个有用的 Python 编程助手。",
llm_config={"model": "gpt-4o"},
)
user_proxy = ConversableAgent(
name="user",
human_input_mode="NEVER", # NEVER / ALWAYS / TERMINATE
max_consecutive_auto_reply=10,
code_execution_config={"work_dir": "coding", "use_docker": False},
)
user_proxy.initiate_chat(
assistant,
message="写一个 Python 函数计算矩阵的逆。",
)
群聊:多个智能体讨论¶
from autogen import GroupChat, GroupChatManager
group_chat = GroupChat(
agents=[user_proxy, researcher, critic, writer],
messages=[],
max_round=12,
)
manager = GroupChatManager(
groupchat=group_chat,
speaker_selection_method="auto", # or "round_robin"
)
user_proxy.initiate_chat(
manager,
message="写一篇关于 2026 年 SMR 核能进展的 800 字文章。",
)
MAF:生产级多智能体¶
# Microsoft Agent Framework (2025+)
from agent_framework import GroupChat, GroupChatManager, AssistantAgent
group = GroupChat(
agents=[user_proxy, researcher, critic, writer],
max_rounds=15,
# MAF 新增:持久化会话 ID、检查点
)
manager = GroupChatManager(group=group)
await user_proxy.initiate_chat(
manager,
message="研究和撰写关于 2026 年 AI 智能体发展的 600 字文章"
)
MAF 在群聊基础上新增了确定性 DAG 工作流:
AutoGen vs. MAF vs. Swarm¶
| 特性 | AutoGen | MAF | Swarm |
|---|---|---|---|
| 通信方式 | 会话式(消息传递) | 会话式 + DAG | 基于交接 |
| 代码执行 | 原生 | 原生 | 通过工具 |
| 群聊 | 内置 GroupChat |
内置 + 持久化 | 手动编排 |
| 生产就绪度 | v0.4 成熟 | RC 阶段(2025) | 实验性 |
| 企业特性 | 有限 | 内置(检查点、OpenTelemetry) | 无 |
| 语言 | Python | Python + .NET | Python |
3. 斯坦福生成式智能体(Smallville)¶
类型: 模拟 / 研究框架
论文: Generative Agents (2023)
演示: Stanford Smallville
创业公司: Simile — 获 1 亿美元融资(Index Ventures、a16z、李飞飞、Karpathy)
这是一个**研究原型**,展示如何在没有明确编程的情况下从 LLM 驱动的智能体中产生可信的人类行为。
核心思想¶
给虚拟世界中的每个"人": 1. 一个**名字**、职业**和**性格 2. 记忆流(累积的经验) 3. **反思**和**规划**的能力
→ 智能体会自发形成关系、协调活动并表现出涌现的社会行为。
架构:记忆流 → 反思 → 规划¶
┌─────────────────────────────────────────────────────────────┐
│ 记忆流 → 反思 → 规划 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 记忆流(按时间顺序) │ │
│ │ [observation] → [observation] → [reflection] → ... │ │
│ │ "Isabella 在咖啡馆" │ │
│ │ "Tom 邀请 Isabella 参加聚会" │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 反思:将观察综合为高层洞察 │ │
│ │ "Isabella 似乎喜欢组织社交活动和人际交往" │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 规划:基于当前状态创建日程 │ │
│ │ 08:00 - 起床吃早餐 │ │
│ │ 09:00 - 开咖啡馆 │ │
│ │ 13:00 - 在 Hobbs Cafe 吃午饭 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
关键机制¶
1. 感知 — 智能体观察世界和他人:
2. 记忆检索 — 给定当前情境,检索相关记忆:
def retrieve_relevant(memory_stream, current_situation, k=5):
importance = score_relevance(memory.content, current_situation)
recency = score_recency(memory.timestamp)
relevance = alpha * importance + beta * recency
return top_k(memories, by=relevance, k=k)
3. 反思 — 周期性将观察综合为高层洞察。
4. 规划 — 基于当前状态和目标创建日程。
情人节聚会(涌现行为)¶
最著名的演示之一:
- 种子: Isabella 收到指令"你想办一个情人节聚会"
- 传播: 她有机地传播这个消息——其他智能体根据性格决定是否参加
- 协调: 一些智能体主动帮忙装饰;另一些讨论穿什么、带什么礼物
- 结果: 5 个智能体在计划的时间准时到场
没有任何硬编码规则。 一切都从智能体的记忆、反思和规划中涌现。
Simile:从 25 个到 1,000+ 个智能体¶
原论文作者(Joon Sung Park 等人)于 2026 年创立了 Simile,将智能体规模从 25 个扩展到 1,000+ 个,用于模拟真实人类群体。应用于预测客户行为、品牌信息影响和政策决策。Wealthfront 报告使用 Simile 后用户研究范围扩大了 15 倍。
对机器人的意义¶
- 在人类环境中运行的机器人需要**建模其他智能体**
- 涌现行为意味着机器人不需要为每种情况编写显式规则
- 记忆 + 反思支持**长时域任务规划**
4. CrewAI¶
类型: 角色驱动多智能体框架
仓库: crewaiinc/crewAI
安装: pip install crewai crewai-tools
CrewAI 采用**角色导向**的多智能体方法。每个智能体都有明确的角色、目标和背景故事——模拟真实团队。
核心概念¶
Agent — 具有工具和特定目标的角色:
from crewai import Agent
from crewai_tools import SerperDevTool, FileReadTool
researcher = Agent(
role="高级研究分析师",
goal="发现机器人操作领域的最新进展",
backstory=(
"你是一个有 10 年经验监测最新论文、专利和行业动态的 "
"机器人学博士研究人员。"
),
tools=[SerperDevTool(), FileReadTool()],
verbose=True,
)
writer = Agent(
role="技术作家",
goal="撰写有吸引力的机器人技术内容",
backstory=(
"你是一个技术作家,将复杂的研究转化为 "
"工程师可以理解的、结构良好的文章。"
),
tools=[FileReadTool()],
verbose=True,
)
Task — 分配给智能体的工作单元:
from crewai import Task
research_task = Task(
description="研究灵巧操作的最新进展",
agent=researcher,
expected_output="5 篇关键论文及其贡献的摘要",
)
write_task = Task(
description="撰写关于研究发现的技术博客文章",
agent=writer,
expected_output="一篇 1000 字的技术准确性博客",
context=[research_task], # 作家可以看到研究员输出
)
Crew — 执行任务的智能体团队:
from crewai import Crew, Process
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, write_task],
process=Process.sequential, # 或 Process.hierarchical
)
result = crew.kickoff()
print(result)
层级流程(经理智能体)¶
crew = Crew(
agents=[researcher, writer, reviewer],
tasks=[task1, task2, task3],
process=Process.hierarchical,
manager_llm=ChatOpenAI(model="gpt-4o"),
)
CrewAI vs. AutoGen vs. Swarm¶
| 特性 | CrewAI | AutoGen | Swarm |
|---|---|---|---|
| 方法 | 角色驱动团队 | 会话式 | 基于交接 |
| 最适合 | 结构化流水线 | 复杂协商 | 轻量级路由 |
| 代码执行 | 通过工具 | 原生 | 通过工具 |
| 记忆 | 内置 | 通过自定义 | 无 |
| 复杂度 | 中等 | 高 | 低 |
| 生产 | ✅ 增长中 | ✅ 成熟 | ❌ 实验性 |
5. LangGraph¶
类型: 基于图的工作流智能体框架
仓库: langchain-ai/langgraph
安装: pip install langgraph langchain
LangGraph 将智能体工作流建模为**有向图**(DAG)。每个节点是一个步骤(智能体、工具或条件),边定义流程。
核心概念¶
State — 流经图的共享 TypedDict:
from typing import TypedDict, Annotated
from langgraph.graph import add_messages
class AgentState(TypedDict):
messages: Annotated[list, add_messages] # 追加式消息
search_results: list[str]
retry_count: int
final_answer: str
Nodes — 转换状态的函数:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o")
def planner(state: AgentState) -> dict:
response = llm.invoke([
{"role": "system", "content": "创建研究计划。"},
*state["messages"]
])
return {"messages": [response]}
def searcher(state: AgentState) -> dict:
last_msg = state["messages"][-1].content
results = web_search(last_msg)
return {"search_results": results}
def writer(state: AgentState) -> dict:
context = "\n".join(state["search_results"])
response = llm.invoke([
{"role": "system", "content": f"基于以下内容撰写报告:\n{context}"},
*state["messages"]
])
return {"messages": [response], "final_answer": response.content}
条件边 — 基于状态路由:
def should_continue(state: AgentState) -> str:
if state.get("is_done"):
return "end"
elif state["retry_count"] < 2:
return "searcher"
else:
return "writer"
构建和编译图¶
from langgraph.graph import StateGraph, START, END
from langgraph.checkpoint.memory import MemorySaver
graph = StateGraph(AgentState)
graph.add_node("planner", planner)
graph.add_node("searcher", searcher)
graph.add_node("writer", writer)
graph.add_edge(START, "planner")
graph.add_edge("planner", "searcher")
graph.add_conditional_edges(
"searcher",
should_continue,
{"writer": "writer", "searcher": "searcher"}
)
graph.add_edge("writer", END)
memory = MemorySaver()
app = graph.compile(checkpointer=memory)
config = {"configurable": {"thread_id": "research-001"}}
result = app.invoke(
{"messages": [{"role": "user", "content": "分析 2026 年 AI 智能体趋势"}]},
config=config,
)
Human-in-the-Loop:中断与审批¶
# 在 "writer" 节点前中断,等待人工审核
app = graph.compile(
checkpointer=memory,
interrupt_before=["writer"], # 暂停,等待审批
)
# 第一次运行:执行到 writer 前暂停
result = app.invoke(input, config=config)
# 人工审核搜索结果
print("搜索结果:", result["search_results"])
# 人工审批或修改
app.update_state(config, {"search_results": result["search_results"] + ["额外信息"]})
# 恢复执行
final = app.invoke(None, config=config) # None = 从中断点恢复
LangGraph 用于机器人:任务规划图¶
class RobotState(TypedDict):
command: str
plan: list[str]
current_step: int
observation: str | None
approved: bool
def parse_command(state: RobotState) -> RobotState:
steps = llm.invoke(f"分解:{state['command']}")
return {"plan": steps, "current_step": 0}
def execute_step(state: RobotState) -> RobotState:
step = state["plan"][state["current_step"]]
obs = robot.execute(step)
return {"observation": obs, "current_step": state["current_step"] + 1}
def should_continue(state: RobotState) -> str:
if not state.get("approved"):
return "interrupt"
return "end" if state["current_step"] >= len(state["plan"]) else "execute_step"
LangGraph vs. CrewAI vs. AutoGen¶
| 特性 | LangGraph | CrewAI | AutoGen |
|---|---|---|---|
| 模型 | DAG / 状态图 | 角色驱动 | 会话式 |
| 灵活性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| 学习曲线 | 中等 | 低 | 高 |
| Human-in-the-loop | 原生(中断) | 有限支持 | 支持 |
| 持久化 | PostgreSQL / Redis | 有限 | 通过自定义 |
| 可视化 | 内置 Mermaid | LangSmith | 有限 |
| 生产成熟度 | 高 | 增长中 | 成熟 |
6. 架构模式总结¶
┌─────────────────────────────────────────────────────────────┐
│ 多智能体架构模式 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 模式 1: 顺序流水线 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │研究员 │───→│写作者 │───→│编辑 │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ (CrewAI sequential, LangGraph 线性) │
│ │
│ 模式 2: 交接 / 路由 │
│ ┌──────────┐ ┌─────────┐ │
│ │ 分流 │────→│ 销售 │ │
│ │ 智能体 │────→│ 支持 │ │
│ │ (根) │────→│ 账单 │ │
│ └──────────┘ └─────────┘ │
│ (OpenAI Swarm, Hermes 委托) │
│ │
│ 模式 3: 群聊 / 圆桌讨论 │
│ ┌──────────────────────────────────────┐ │
│ │ ┌──────┐ ┌──────┐ ┌──────┐ │ │
│ │ │智能体1│ │智能体2│ │智能体3│ │ │
│ │ └──┬───┘ └──┬───┘ └──┬───┘ │ │
│ │ └─────────┼─────────┘ │ │
│ │ ▼ │ │
│ │ 群组聊天 │ │
│ └──────────────────────────────────────┘ │
│ (AutoGen GroupChat, MAF) │
│ │
│ 模式 4: 层级 / 经理制 │
│ ┌────────────┐ │
│ │ 经理 │ │
│ └──┬──────┬──┘ │
│ ┌───┴───┐ ┌───┴───┐ │
│ │员工1 │ │员工2 │ │
│ └───────┘ └───────┘ │
│ (CrewAI hierarchical, MAF supervisor) │
│ │
│ 模式 5: 模拟 / 涌现 │
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
│ │ A │ │ B │ │ C │ │ D │ │ E │ │
│ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ │
│ └─────┼─────┼─────┼─────┘ │
│ ▼ ▼ ▼ │
│ 共享世界 / 记忆流 │
│ (Stanford 生成式智能体 → Simile) │
│ │
└─────────────────────────────────────────────────────────────┘
7. 基准测试表现¶
多智能体系统始终优于单智能体:
| 基准 | 单智能体 | 多智能体 | 提升 |
|---|---|---|---|
| GAIA(通用 AI 助手) | 40–60% | 70–85% | +25–40% |
| SWE-bench Verified(软件工程) | 基线 | +25–40% | 显著 |
| 真实项目(Novo Nordisk) | — | 迭代周期缩短约 25% | — |
参考资料¶
框架论文与仓库¶
- OpenAI Swarm — GitHub 仓库
- AutoGen 论文 — 微软研究院,2023
- Microsoft Agent Framework — 官方文档
- 生成式智能体论文 — Stanford HAI,2023
- Simile (生成式智能体创业公司) — 2026 年获 1 亿美元融资
- CrewAI 文档 — 官方文档
- LangGraph 文档 — 官方文档
研究与综述¶
- AI 智能体时代的记忆:综述 — NUS、人民大学、复旦、北大,2025
- Iconiq Capital: 2025 AI 现状报告 — 企业采用数据
- AutoGen 架构演进(2024–2026) — MAF 全面历史
- 构建有效智能体 (Anthropic) — 生产模式
Hermes Agent¶
- Hermes Agent — Nous Research