核心摘要

三种多智能体编排模式各有适用场景:Supervisor(集中协调者)适合中等复杂度的确定性流水线;Swarm(对等 Handoff)适合动态灵活的对话式场景;Hierarchical(多级管理树)适合大规模复杂系统。本文通过 LangGraph、OpenAI Swarm 和 CrewAI 的完整可运行代码,深入对比三者在架构、延迟、容错和可扩展性上的实际表现。


目录

  1. 核心要点
  2. 什么是多智能体编排模式
  3. 模式一:Supervisor 集中协调者
  4. 模式二:Swarm 对等 Handoff
  5. 模式三:Hierarchical 多级管理
  6. 决策矩阵:如何选择编排模式
  7. 生产环境注意事项
  8. 最佳实践
  9. 常见问题
  10. 总结与相关资源

核心要点

  • Supervisor 模式:单一中心节点路由分派,最适合 3-8 个 Agent 的确定性任务流
  • Swarm 模式:去中心化 handoff,无单点故障,适合客服、多轮对话等灵活场景
  • Hierarchical 模式:树状管理结构,适合 15+ Agent 的企业级复杂系统
  • 选择依据:Agent 数量 × 任务动态性 × 容错需求共同决定最佳模式
  • 生产关键:无论哪种模式,超时控制、可观测性和优雅降级是必备基础设施

本文是 多智能体系统入门指南 的进阶实战篇。建议先了解多Agent基础概念后再阅读。


什么是多智能体编排模式

多智能体编排模式(Multi-Agent Orchestration Pattern)定义了多个 AI Agent 之间如何协调任务分配、控制权流转和结果聚合的架构规范。不同于简单的 Agent 链式调用,编排模式关注的是拓扑结构——谁决定下一步该做什么、谁执行、结果如何汇总。

为什么编排模式如此重要

场景痛点 无编排的后果 正确编排的收益
任务路由 消息在 Agent 间无序流转 明确的控制流,可预测
错误处理 一个 Agent 失败导致全链崩溃 局部重试 + 优雅降级
可观测性 无法追踪决策路径 完整 Trace 链路
扩展性 新增 Agent 需重写逻辑 插件式注册即可扩展

三种核心模式概览

graph TB subgraph S1["Supervisor"] S[Supervisor] --> A1[Agent A] S --> A2[Agent B] S --> A3[Agent C] A1 --> S A2 --> S A3 --> S end subgraph S2["Swarm"] B1[Agent A] -->|handoff| B2[Agent B] B2 -->|handoff| B3[Agent C] B3 -->|handoff| B1 end subgraph S3["Hierarchical"] M[Top Manager] --> M1[Team Lead 1] M --> M2[Team Lead 2] M1 --> W1[Worker A] M1 --> W2[Worker B] M2 --> W3[Worker C] M2 --> W4[Worker D] end

模式一:Supervisor 集中协调者

架构设计

Supervisor 模式由一个中央协调者 Agent 负责接收用户请求、分解任务、调度子 Agent 执行、收集结果并汇总输出。所有通信都经过 Supervisor 中转,子 Agent 之间不直接通信。

graph TD User[用户请求] --> SUP[Supervisor Agent] SUP -->|分派任务1| R[Researcher Agent] SUP -->|分派任务2| W[Writer Agent] SUP -->|分派任务3| C[Critic Agent] R -->|返回结果| SUP W -->|返回结果| SUP C -->|返回结果| SUP SUP --> Output[汇总输出]

LangGraph 实现

python
from typing import Annotated, TypedDict, Literal
from langgraph.graph import StateGraph, START, END
from langgraph.types import Command
from langchain_openai import ChatOpenAI

# 定义共享状态
class AgentState(TypedDict):
    messages: list
    next_agent: str
    research_output: str
    draft_output: str
    final_output: str

# 初始化模型
llm = ChatOpenAI(model="gpt-4o", temperature=0)

# Supervisor 节点:决定下一步路由
def supervisor_node(state: AgentState) -> Command:
    system_prompt = """你是一个 Supervisor,负责协调以下 Agent:
    - researcher:负责信息搜索和数据收集
    - writer:负责撰写内容
    - critic:负责审查和改进
    
    根据当前进度决定下一步应该交给哪个 Agent,
    或者返回 FINISH 表示任务完成。"""
    
    response = llm.invoke([
        {"role": "system", "content": system_prompt},
        *state["messages"]
    ])
    
    # 解析路由决策
    next_agent = parse_routing_decision(response.content)
    
    if next_agent == "FINISH":
        return Command(goto=END, update={"final_output": state["draft_output"]})
    
    return Command(goto=next_agent, update={"next_agent": next_agent})

# Researcher Agent 节点
def researcher_node(state: AgentState) -> Command:
    response = llm.invoke([
        {"role": "system", "content": "你是一个研究专家,负责搜集和整理信息。"},
        {"role": "user", "content": state["messages"][-1]["content"]}
    ])
    return Command(
        goto="supervisor",
        update={"research_output": response.content,
                "messages": state["messages"] + [{"role": "assistant", "content": response.content}]}
    )

# Writer Agent 节点
def writer_node(state: AgentState) -> Command:
    response = llm.invoke([
        {"role": "system", "content": "你是一个写作专家,根据研究资料撰写高质量内容。"},
        {"role": "user", "content": f"基于以下研究撰写文章:\n{state['research_output']}"}
    ])
    return Command(
        goto="supervisor",
        update={"draft_output": response.content,
                "messages": state["messages"] + [{"role": "assistant", "content": response.content}]}
    )

# 构建 Graph
workflow = StateGraph(AgentState)
workflow.add_node("supervisor", supervisor_node)
workflow.add_node("researcher", researcher_node)
workflow.add_node("writer", writer_node)
workflow.add_node("critic", critic_node)

workflow.add_edge(START, "supervisor")

app = workflow.compile()

# 执行
result = app.invoke({
    "messages": [{"role": "user", "content": "写一篇关于 AI Agent 编排模式的技术分析"}],
    "next_agent": "",
    "research_output": "",
    "draft_output": "",
    "final_output": ""
})

TypeScript 版本(LangGraph.js)

typescript
import { StateGraph, START, END } from "@langchain/langgraph";
import { ChatOpenAI } from "@langchain/openai";
import { BaseMessage, HumanMessage } from "@langchain/core/messages";

// 定义状态类型
interface AgentState {
  messages: BaseMessage[];
  nextAgent: string;
  researchOutput: string;
  draftOutput: string;
}

const llm = new ChatOpenAI({ model: "gpt-4o", temperature: 0 });

// Supervisor 节点
async function supervisorNode(state: AgentState) {
  const response = await llm.invoke([
    { role: "system", content: "Route to: researcher | writer | critic | FINISH" },
    ...state.messages,
  ]);

  const nextAgent = parseRoute(response.content as string);
  return { nextAgent };
}

// 条件路由
function routeFromSupervisor(state: AgentState): string {
  if (state.nextAgent === "FINISH") return END;
  return state.nextAgent;
}

// 构建 Graph
const workflow = new StateGraph<AgentState>({
  channels: {
    messages: { default: () => [] },
    nextAgent: { default: () => "" },
    researchOutput: { default: () => "" },
    draftOutput: { default: () => "" },
  },
});

workflow.addNode("supervisor", supervisorNode);
workflow.addNode("researcher", researcherNode);
workflow.addNode("writer", writerNode);

workflow.addEdge(START, "supervisor");
workflow.addConditionalEdges("supervisor", routeFromSupervisor);

const app = workflow.compile();

优缺点分析

维度 优势 劣势
控制力 完全集中控制,流程可预测 Supervisor 成为瓶颈
可观测性 所有消息经过中心节点,天然可追踪
容错性 单一故障点(Supervisor 挂则全挂) 需额外实现 Supervisor 高可用
延迟 每步需经过 Supervisor 中转 多跳开销大
适用规模 3-8 个 Agent 超过 10 个时路由逻辑变复杂

模式二:Swarm 对等 Handoff

架构设计

Swarm 模式取消了中心协调者,每个 Agent 可以自主判断何时将控制权移交(handoff)给另一个 Agent。OpenAI Swarm 框架是这种模式的典型实现——Agent 通过函数调用机制返回目标 Agent 对象来完成 handoff。

graph LR User[用户] --> T[Triage Agent] T -->|"handoff: 技术问题"| Tech[Tech Support Agent] T -->|"handoff: 订单问题"| Order[Order Agent] Tech -->|"handoff: 需要退款"| Order Order -->|"handoff: 技术咨询"| Tech Tech --> User Order --> User

OpenAI Swarm 实现

python
from swarm import Swarm, Agent

client = Swarm()

# 定义 handoff 函数
def transfer_to_tech_support():
    """将用户转接给技术支持 Agent"""
    return tech_agent

def transfer_to_order_agent():
    """将用户转接给订单处理 Agent"""
    return order_agent

def escalate_to_human():
    """升级到人工客服"""
    return "ESCALATE: 已转接人工客服,工单号 #" + generate_ticket_id()

# Triage Agent - 入口分流
triage_agent = Agent(
    name="Triage Agent",
    instructions="""你是客服入口分流员。根据用户问题类型:
    - 技术问题(安装、配置、Bug)-> 转接技术支持
    - 订单问题(退款、物流、支付)-> 转接订单处理
    - 无法分类 -> 升级人工""",
    functions=[transfer_to_tech_support, transfer_to_order_agent, escalate_to_human],
)

# Tech Support Agent
tech_agent = Agent(
    name="Tech Support",
    instructions="""你是技术支持专家。解决用户的技术问题。
    如果涉及退款或订单操作,调用 transfer_to_order_agent。
    如果问题超出能力范围,调用 escalate_to_human。""",
    functions=[transfer_to_order_agent, escalate_to_human],
    model="gpt-4o",
)

# Order Agent
order_agent = Agent(
    name="Order Agent",
    instructions="""你是订单处理专员。处理退款、物流查询、支付问题。
    如果涉及技术排查,调用 transfer_to_tech_support。""",
    functions=[transfer_to_tech_support, escalate_to_human,
              process_refund, check_order_status],
)

# 执行对话
response = client.run(
    agent=triage_agent,
    messages=[{"role": "user", "content": "我的订单显示已发货但三天没收到,而且 App 一直闪退"}],
)

print(response.messages[-1]["content"])
# Agent 会自动在 triage -> order -> tech 之间流转

TypeScript 自定义实现

typescript
interface SwarmAgent {
  name: string;
  instructions: string;
  functions: AgentFunction[];
  model?: string;
}

interface AgentFunction {
  name: string;
  description: string;
  handler: (args: any) => SwarmAgent | string;
}

class SwarmOrchestrator {
  private currentAgent: SwarmAgent;
  private conversationHistory: Message[] = [];
  private maxHandoffs = 10; // 防止无限循环

  constructor(entryAgent: SwarmAgent) {
    this.currentAgent = entryAgent;
  }

  async run(userMessage: string): Promise<string> {
    this.conversationHistory.push({ role: "user", content: userMessage });
    let handoffCount = 0;

    while (handoffCount < this.maxHandoffs) {
      const response = await this.callLLM(this.currentAgent);

      // 检查是否有 handoff
      if (response.functionCall) {
        const fn = this.currentAgent.functions.find(
          f => f.name === response.functionCall!.name
        );
        const result = fn!.handler(response.functionCall!.arguments);

        if (typeof result === "object" && "name" in result) {
          // handoff 到新 Agent
          console.log(`[Handoff] ${this.currentAgent.name} -> ${result.name}`);
          this.currentAgent = result;
          handoffCount++;
          continue;
        }
        // 普通函数调用结果
        this.conversationHistory.push({ role: "function", content: result });
        continue;
      }

      // 无 handoff,返回最终回答
      return response.content;
    }

    throw new Error("Exceeded maximum handoff limit");
  }
}

优缺点分析

维度 优势 劣势
灵活性 Agent 自主决策 handoff,适应动态场景 流转路径难以预测
容错性 无单点故障,局部 Agent 失败不影响其他 需设置 handoff 上限防循环
延迟 直接 Agent 到 Agent,无中间人开销 复杂场景可能多次 handoff
可观测性 需额外实现 Trace 注入 去中心化使追踪更难
适用场景 客服、多轮对话、动态决策 不适合严格顺序的流水线

模式三:Hierarchical 多级管理

架构设计

Hierarchical 模式在 Supervisor 基础上引入多级管理层级。顶层 Manager 做战略分解,中层 Team Lead 做战术分配,底层 Worker 执行具体任务。这种模式借鉴了企业管理结构,特别适合 15+ Agent 的大规模系统。

graph TD PM[Project Manager] --> TL1[Research Team Lead] PM --> TL2[Engineering Team Lead] PM --> TL3[QA Team Lead] TL1 --> R1[Web Researcher] TL1 --> R2[Data Analyst] TL2 --> E1[Backend Dev] TL2 --> E2[Frontend Dev] TL2 --> E3[DevOps] TL3 --> Q1[Unit Tester] TL3 --> Q2[Integration Tester]

CrewAI 实现

python
from crewai import Agent, Task, Crew, Process

# 顶层 Manager(自动由 CrewAI hierarchical 模式管理)
manager_llm = "gpt-4o"

# 中层 Team Lead Agents
research_lead = Agent(
    role="Research Team Lead",
    goal="协调研究团队,收集并验证所有相关数据",
    backstory="你是一位资深研究负责人,擅长分配搜索任务和交叉验证信息。",
    llm="gpt-4o",
    allow_delegation=True,  # 可以向下委派
)

engineering_lead = Agent(
    role="Engineering Team Lead",
    goal="协调工程团队,确保代码质量和架构合理性",
    backstory="你是一位技术总监,负责协调前后端开发和运维部署。",
    llm="gpt-4o",
    allow_delegation=True,
)

# 底层 Worker Agents
web_researcher = Agent(
    role="Web Researcher",
    goal="搜索并提取网络上的最新技术文献",
    backstory="你擅长网络信息检索,能快速定位高质量信息源。",
    llm="gpt-4o-mini",  # Worker 用小模型降低成本
    allow_delegation=False,
)

data_analyst = Agent(
    role="Data Analyst",
    goal="分析数据并生成可视化洞察",
    backstory="你是数据分析专家,擅长统计分析和趋势识别。",
    llm="gpt-4o-mini",
    allow_delegation=False,
)

backend_dev = Agent(
    role="Backend Developer",
    goal="实现后端 API 和业务逻辑",
    backstory="你是资深后端工程师,精通 Python 和分布式系统。",
    llm="gpt-4o-mini",
    allow_delegation=False,
)

# 定义任务
research_task = Task(
    description="调研当前多智能体编排模式的最新进展,包括论文、开源项目和企业实践",
    expected_output="结构化的调研报告,包含至少 10 个关键发现",
    agent=research_lead,
)

implementation_task = Task(
    description="基于调研结果,设计并实现一个多模式编排引擎的原型",
    expected_output="可运行的原型代码和架构文档",
    agent=engineering_lead,
    context=[research_task],  # 依赖研究任务的输出
)

# 构建层级 Crew
crew = Crew(
    agents=[research_lead, engineering_lead, web_researcher, 
            data_analyst, backend_dev],
    tasks=[research_task, implementation_task],
    process=Process.hierarchical,  # 关键:启用层级模式
    manager_llm=manager_llm,
    verbose=True,
)

# 执行
result = crew.kickoff()
print(result)

TypeScript 版本(AutoGen 风格)

typescript
import { AutoGenGroupChat, Agent, UserProxy } from "autogen";

// 定义层级结构
const projectManager = new Agent({
  name: "ProjectManager",
  systemMessage: `你是项目经理。将复杂任务分解为子任务,
    分配给对应的 Team Lead。监控进度并处理跨团队依赖。`,
  model: "gpt-4o",
});

const researchLead = new Agent({
  name: "ResearchLead",
  systemMessage: `你是研究负责人。接收 PM 的研究任务,
    将其拆解为具体检索任务分配给 Worker,汇总结果后向上汇报。`,
  model: "gpt-4o",
});

const webResearcher = new Agent({
  name: "WebResearcher",
  systemMessage: "你是网络调研员。执行具体的搜索和信息提取任务。",
  model: "gpt-4o-mini",
});

// 多级 GroupChat 配置
const researchTeam = new AutoGenGroupChat({
  agents: [researchLead, webResearcher],
  maxRound: 5,
  speakerSelectionMethod: "round_robin",
});

const topLevelChat = new AutoGenGroupChat({
  agents: [projectManager, researchLead],
  maxRound: 10,
  speakerSelectionMethod: "auto",
  nestedChats: {
    ResearchLead: researchTeam, // 嵌套子团队
  },
});

await topLevelChat.initiate(
  "设计一个支持三种编排模式热切换的 Agent 框架"
);

优缺点分析

维度 优势 劣势
可扩展性 支持 15+ Agent,层级隔离 架构复杂度高
控制力 分层管理,职责清晰 层级过深影响效率
成本 中间层可用小模型,Worker 成本低 管理层本身消耗 Token
延迟 多级中转,延迟累加 不适合实时场景
适用场景 复杂项目、大团队模拟 简单任务杀鸡用牛刀

决策矩阵:如何选择编排模式

综合对比表

维度 Supervisor Swarm Hierarchical
复杂度 中等
Agent 规模 3-8 2-15 10-50+
延迟 中(2跳/步) 低(1跳/步) 高(3+跳/步)
容错性 低(单点) 高(分布式) 中(需冗余设计)
可预测性
动态适应
实现难度 ★★☆ ★★★ ★★★★
调试难度 ★☆☆ ★★★ ★★☆
典型框架 LangGraph OpenAI Swarm CrewAI
典型场景 数据管道、报告生成 客服、对话助手 软件开发团队模拟

决策流程图

graph TD Start[开始选型] --> Q1{Agent 数量?} Q1 -->|"< 5"| Q2{任务是否动态?} Q1 -->|"5-15"| Q3{需要严格控制流?} Q1 -->|"> 15"| H[Hierarchical] Q2 -->|是| SW[Swarm] Q2 -->|否| SV[Supervisor] Q3 -->|是| SV2[Supervisor] Q3 -->|否| Q4{需要高容错?} Q4 -->|是| SW2[Swarm] Q4 -->|否| SV3[Supervisor] SV --> Done[确定模式] SW --> Done H --> Done SV2 --> Done SW2 --> Done SV3 --> Done

生产环境注意事项

超时与重试

无论哪种编排模式,Agent 调用都可能因 LLM 限流、网络波动或模型幻觉而超时。

python
import asyncio
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(3), wait=wait_exponential(min=1, max=10))
async def call_agent_with_timeout(agent_fn, state, timeout=30):
    """带超时和重试的 Agent 调用"""
    try:
        result = await asyncio.wait_for(agent_fn(state), timeout=timeout)
        return result
    except asyncio.TimeoutError:
        # 记录超时日志并尝试降级
        logger.warning(f"Agent {agent_fn.__name__} timed out after {timeout}s")
        raise
    except Exception as e:
        logger.error(f"Agent {agent_fn.__name__} failed: {e}")
        raise

可观测性集成

python
from opentelemetry import trace
from opentelemetry.trace import StatusCode

tracer = trace.get_tracer("multi-agent-orchestrator")

def traced_agent_call(agent_name: str):
    """为每次 Agent 调用创建 Span"""
    def decorator(fn):
        async def wrapper(state):
            with tracer.start_as_current_span(f"agent.{agent_name}") as span:
                span.set_attribute("agent.name", agent_name)
                span.set_attribute("agent.input_tokens", count_tokens(state))
                try:
                    result = await fn(state)
                    span.set_attribute("agent.output_tokens", count_tokens(result))
                    span.set_status(StatusCode.OK)
                    return result
                except Exception as e:
                    span.set_status(StatusCode.ERROR, str(e))
                    span.record_exception(e)
                    raise
        return wrapper
    return decorator

优雅降级策略

故障类型 Supervisor 策略 Swarm 策略 Hierarchical 策略
Agent 超时 跳过该步 + 用默认值 Handoff 回上一个 Agent Team Lead 接管 Worker 任务
LLM 限流 全局排队等待 局部 Agent 暂停 按层级优先级排队
结果异常 Supervisor 判断重做 下游 Agent 自行校验 Manager 触发审查流程

最佳实践

  1. 从 Supervisor 开始,按需演进:大多数项目初期 3-5 个 Agent 即可覆盖需求,Supervisor 模式最易实现和调试
  2. 限制 handoff 深度:Swarm 模式务必设置 max_handoffs(建议 ≤ 10),防止 Agent 之间无限循环
  3. 中间层用小模型:Hierarchical 模式的 Team Lead 主要做路由决策,使用 GPT-4o-mini 可节省 80% 成本
  4. 实现 Dead Letter Queue:无法处理的消息进入死信队列,而非直接丢弃
  5. 状态持久化:长时间运行的编排流程需要 checkpoint 机制,LangGraph 原生支持
  6. 端到端测试:使用 JSON 格式化工具 验证 Agent 间消息的结构正确性

工具推荐:使用 AI Agent 工具导航 快速找到适合你编排需求的 Agent 框架。


常见问题

Supervisor、Swarm、Hierarchical 三种模式可以混合使用吗?

可以,也推荐在大型系统中混合使用。例如顶层用 Hierarchical 管理多个团队,每个团队内部用 Supervisor 协调,而客服入口使用 Swarm 做动态分流。LangGraph 的 SubGraph 机制天然支持这种嵌套组合。

Swarm 模式中如何防止 Agent 之间无限 handoff?

三重保护措施:(1) 设置全局 max_handoffs 计数器;(2) 在 handoff 函数中加入 visited_agents 集合,禁止回退到已经处理过的 Agent;(3) 添加兜底的 escalate_to_human 函数作为逃逸阀。

性能对比:三种模式的实际延迟差异有多大?

以一个 4-Agent 的任务为例(单次 LLM 调用约 1.5 秒):

  • Supervisor: 4 × 1.5s (Agent) + 5 × 1.5s (Supervisor 路由) = ~13.5s
  • Swarm: 4 × 1.5s (Agent) = ~6s(Agent 间直接 handoff)
  • Hierarchical (2层): 4 × 1.5s (Worker) + 2 × 1.5s (Lead) + 1 × 1.5s (PM) = ~10.5s

哪种模式最适合构建企业内部的 AI 自动化平台?

对于企业级平台,建议 Hierarchical 模式为主干架构。原因:(1) 企业通常有明确的组织架构映射需求;(2) 权限控制可以按层级隔离;(3) 支持渐进式扩展——先部署一个团队,再逐步增加。关于 Agent 生产化的更多挑战,参见 Agent 从验证到上线的十大陷阱

编排模式与 MCP 协议的关系是什么?

MCP 协议 解决的是 Agent 与外部工具之间的通信标准化问题,而编排模式解决的是 Agent 与 Agent 之间的协作拓扑问题。两者是正交的——无论使用哪种编排模式,Agent 都可以通过 MCP 调用外部工具。详细了解 MCP 请阅读我们的 MCP 协议深入解析


总结与相关资源

三种编排模式没有绝对优劣,选择取决于具体场景。Supervisor 适合快速交付中等复杂度项目,Swarm 适合需要高灵活性和容错性的动态场景,Hierarchical 适合大规模企业级系统。生产环境下,超时控制、可观测性和优雅降级是三种模式都必须具备的基础能力。

内部资源

外部参考