跳转至

多智能体系统

虽然单个智能体可以处理许多任务,但复杂的现实问题通常受益于 多个专业智能体协同工作。多智能体系统为不同的智能体分配不同的角色、能力和通信协议,实现单个智能体无法完成的协作。

为什么需要多智能体?

场景 单智能体 多智能体
研究 + 写报告 任务过载,质量下降 研究员 + 作家
代码审查 视角单一 编码员 + 审查员 + 安全分析师
客户服务 一刀切 分流 + 产品 + 升级
模拟社会 不可能 每个人 = 一个智能体

关键优势:专业化、并行性、分工和真实感。


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 使用两个原始操作——handofffunction 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 工作流

# 订单处理的 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. 感知 — 智能体观察世界和他人:

[Isabella Rodriguez] 观察到 [Tom Moreno] 当前位于 [Willow 市场和熟食店]

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. 规划 — 基于当前状态和目标创建日程。

情人节聚会(涌现行为)

最著名的演示之一:

  1. 种子: Isabella 收到指令"你想办一个情人节聚会"
  2. 传播: 她有机地传播这个消息——其他智能体根据性格决定是否参加
  3. 协调: 一些智能体主动帮忙装饰;另一些讨论穿什么、带什么礼物
  4. 结果: 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%

参考资料

框架论文与仓库

研究与综述

Hermes Agent