Agent 架构 · 2025年11月18日 · 5 分钟

Multi-Agent 编排模式:架构选型与生产实践

Supervisor / Pipeline / Debate / Tool 分发四种 Multi-Agent 模式的选型与混合策略,从单 Agent 到多 Agent 的演进路径。

一个月前写了单 Agent 设计(《AI Agent 系统设计》),那篇讲的是"怎么做一个 Agent"。这篇讲"怎么做多个 Agent 协作"。

这不是为了炫技。当系统复杂到一定程度,单 Agent 模式会出现几个硬伤:

1. 上下文窗口不够放
   工具描述 + 角色定义 + 对话历史 + 检索结果
   → 一个 Agent 承载太多,上下文被稀释

2. 职责不清
   同一个 Agent 既要做意图分类、又要做工具选择、又要做回答生成
   → 优化一个能力可能影响其他能力

3. 扩展性差
   新增一个能力路径,可能需要修改整个 System Prompt
   → 牵一发动全身

Multi-Agent 不是目标,是一个解决复杂问题的手段

四种主流架构模式

模式 1:Supervisor(监督者模式)

              ┌─────────────┐
              │  Supervisor  │
              │  (路由/分配) │
              └──────┬──────┘
                     │
            ┌────────┼────────┐
            ▼        ▼        ▼
        ┌──────┐ ┌──────┐ ┌──────┐
        │Agent │ │Agent │ │Agent │
        │ 查询  │ │ 报表  │ │ 操作  │
        └──────┘ └──────┘ └──────┘

Supervisor 负责听懂用户意图,分发给对应的子 Agent。子 Agent 专注完成自己的任务。

特点

  • Supervisor 不做具体工作,只做路由
  • 子 Agent 之间不直接通信
  • 适合:客服助手、企业内部门户

一个实际问题:Supervisor 的路由准确率决定系统上限。如果 Supervisor 把查询路由到操作 Agent,用户就会收到奇怪的回复。实践中用轻量 LLM(如 Haiku 或 Flash)做路由可以节省成本,但准确率会下降一些。需要根据业务容忍度权衡。

模式 2:Pipeline(流水线模式)

输入 → Agent A → Agent B → Agent C → 输出
       (分步)    (执行)    (质量检查)

Agent 按固定顺序执行,前一个的输出是后一个的输入。

特点

  • 流程固定,易于理解
  • 每个 Agent 的职责清晰
  • 适合:内容生成、文档处理、审核流程

经典场景——内容起草流水线

Research Agent → Outline Agent → Writer Agent → Reviewer Agent → Editor Agent
  (调研)         (大纲)         (写作)         (审查)          (编辑)

Pipeline 模式的风险是单点故障——中间任何一个 Agent 输出质量差,后面的 Agent 全受影响。Reviewer 的存在就是为了拦截低质量输出,但如果 Reviewer 本身也不稳定,可能发生"Agent 在审查烂内容,然后批准了"的情况。

模式 3:Debate(辩论模式)

Agent A (观点1) ─┬─ 综合 → 输出
Agent B (观点2) ─┼─ 综合 → 输出
Agent C (观点3) ─┘

多个 Agent 从不同角度分析同一个问题,由汇总 Agent 综合各方意见。

特点

  • 质量高(多方验证)
  • 计算成本高(多个 Agent 独立运行)
  • 适合:代码 Review、争议处理、决策支持

辩论模式在代码审查中的实践

Agent A(安全视角):审查 SQL 注入、XSS、权限问题
Agent B(性能视角):审查慢查询、冗余计算、未优化代码
Agent C(可维护性视角):审查命名、架构耦合、测试覆盖

汇总 Agent:综合三个视角的发现,生成最终的 Review 报告

模式 4:Tool 分发模式(Tool Distribution)

把工具按领域分组,每组由一个 Agent 管理,Supervisor 按需路由。

User Query
    │
    ▼
┌──────────────┐
│  Supervisor  │
│  (意图分析)  │
└──────┬───────┘
       │
   ┌───┼───┬───┐
   ▼   ▼   ▼   ▼
   D1   D2   D3  D4
   │    │    │   │
   │    │    │   └── Agent 设备管理
   │    │    │
   │    │    └────── Agent 数据分析
   │    │
   │    └─────────── Agent 客户管理
   │
   └─────────────── Agent 知识库

这其实就是我做的 IssuePilot 的架构理念:每个 Agent 只管理与自己职责相关的工具,工具按领域分组,不交叉。

实践中的关键:Tool 分发 + 分层。第一层只给 Supervisor 一个"路由到哪个领域的工具"的能力,第二层才把具体工具暴露出来。这样工具定义不会占用过多的上下文窗口。

四种模式的混合使用

实际项目中,很少只用一种模式。

场景:企业内部智能助手

┌────────────────────────────────────────────┐
│               Gateway Agent                 │
│       意图分类 + 用户身份验证               │
└────────────────┬───────────────────────────┘
                  │
     ┌────────────┼────────────┬───────────────┐
     ▼            ▼            ▼               ▼
┌─────────┐ ┌─────────┐ ┌─────────┐   ┌──────────────┐
│ 查询 Agent │ │ 报表 Agent ││ 操作 Agent│   │ 闲聊 Agent    │
│(Supervisor│ │(Pipeline) ││(Debate)  │   │(单 Agent)     │
│ + Tools)  │ │ R→A→R→V  ││安×性×审  │   │ 简单对话      │
│           │ │ 四步流水线 ││ 三路辩论  │   │              │
└─────┬─────┘ └──────────┘ └──────────┘   └──────────────┘
      │
  ┌───┴───┬───┐
  ▼       ▼   ▼
 D1       D2  D3

不同场景用不同模式:

  • 查询:Supervisor → 工具分发(简单、快速)
  • 报表:Pipeline(复杂、需要多步骤、有顺序依赖)
  • 操作:Debate(安全敏感、需要多方确认)
  • 闲聊:单 Agent(不需要复杂编排)

通信与共享状态

Multi-Agent 系统面临的最大工程挑战:Agent 之间怎么通信、怎么共享状态

方案 1:上下文传递

最简单的方案——前一个 Agent 的输出直接作为后一个 Agent 的输入。

Agent A 输出:{"summary": "...", "key_findings": [...]}
Agent B 输入:[System Prompt + Agent A 的输出 + 用户原始问题]

优点:简单,没有额外的存储依赖。 缺点:上下文会越来越大;Agent B 要处理不属于它关心的信息。

方案 2:共享状态存储

所有 Agent 读写同一个状态存储(通常是数据库或分布式缓存)。

Agent A 写入状态:
  db.set("task_123", {"status": "researched", "findings": [...]})

Agent B 读取状态:
  task = db.get("task_123")
  # 处理 findings
  db.set("task_123", {"status": "drafted", ...})

优点:状态结构化;Agent 只读取自己需要的信息。 缺点:需要额外的存储和并发控制(如果两个 Agent 同时写同一个 key)。

方案 3:事件总线

Agent 通过事件(Event)通信,松耦合。

Agent A 完成调研后发布事件:
  event_bus.publish("task.researched", { task_id: "123", findings: [...] })

订阅了 "task.researched" 事件的 Agent B 自动启动:
  Agent B 收到事件 → 处理 findings → 发布 "task.drafted"

优点:松耦合;可以独立扩展单个 Agent。 缺点:调试困难(事件流不易追踪);非确定性执行顺序可能带来问题。

编制 vs 编排(Orchestration vs Choreography)

编制(Orchestration):
  有一个中央控制器(Supervisor),统一调度所有 Agent
  流程由 Supervisor 定义和驱动
  优点:可控、可审计
  缺点:Supervisor 是单点

编排(Choreography):
  没有中央控制器,Agent 之间通过事件自发协作
  每个 Agent 知道自己该做什么
  优点:松耦合、可扩展
  缺点:不可预测的行为

哪个更好?取决于场景。

需要流程确定性、审计追踪 → 用编制(Orchestration)
  如:金融交易处理、订单流程

需要高扩展性、灵活性 → 用编排(Choreography)
  如:客服对话、自动化运维

实践中,大部分生产系统是混合的——核心流程用编制,外围流程用编排。

Multi-Agent 系统的陷阱

陷阱 1:不必要的拆分

一个 Agent 能做的事,拆成三个 Agent。结果:

以前(单 Agent):
  上下文:4000 tokens
  延迟:2 秒
  
现在(三个 Agent):
  路由 Agent500 tokens + 0.5 秒
  执行 Agent4000 tokens + 2 秒
  验证 Agent2000 tokens + 1 秒
  总延迟:3.5 秒
  + Agent 间通信开销
  + 反序列化和状态传递

成本增加了 3 倍,延迟增加了 2 倍——如果质量没有显著提升,这个拆分就是失败的。

陷阱 2:幻觉传递

前一个 Agent 产生了幻觉,后一个 Agent 基于幻觉继续推理:

Agent A(意图识别):
  "用户想要删除数据库" ← 错误(实际上用户想查数据)

Agent B(执行):
  "正在生成删除表结构的 SQL" ← 基于 Agent A 的错误输出继续扩大

这是一个级联错误。每一个后续 Agent 都增加了错误的置信度。

防御方式:

  • 每个 Agent 在关键决策点输出置信度(confidence score)
  • 低置信度的结果标记给人类审核
  • 关键路径上的结果需要多个 Agent 交叉验证

陷阱 3:成本失控

Multi-Agent 的 token 消耗可能比单 Agent 高 3-6 倍。如果每个 Agent 都用最强模型,成本可能高得离谱。

成本优化策略:

低价模型(Haiku / Flash)做路由和分类
中价模型(Sonnet / V4)做核心推理
高价模型(Opus / Pro)只做最关键的综合和验证

从单 Agent 到多 Agent 的演进路径

阶段 1:单 Agent1-2 个月)
  ✓ 跑通核心功能
  ✓ 发现 Agent 的能力瓶颈在哪里

阶段 2:Supervisor + 子 Agent3-4 个月)
  ✓ 拆出第一个专用 Agent
  ✓ 验证拆分带来了质量提升

阶段 3:专业化(6-9 个月)
  ✓ 根据数据确定哪些场景需要专业 Agent
  ✓ 逐步添加安全 Agent、审查 Agent

阶段 4:标准化通信(12 个月+)
  ✓ MCP 标准化工具
  ✓ A2A 标准化 Agent 间通信
  ✓ 持续优化成本结构

不要跳过阶段 1。在没有数据证明单 Agent 不够之前,不要进入阶段 2。

总结

Multi-Agent 架构的核心不是"多个 Agent",而是让每个 Agent 专注做一件事并做好。拆分的信号不是"我觉得可以拆",而是"数据证明不拆不行"。

如果你的系统:
  - Agent 上下文窗口经常打满
  - 修改一个功能会影响其他功能
  - 某个 Agent 的工具太多(> 15 个)
  - 需要在不同场景用不同模型(成本优化)
  
→ 考虑拆成多 Agent,按 Supervisor + 子 Agent 模式起步

如果你的系统没有这些问题 → 别拆

2026 年的 Multi-Agent 趋势是标准化通信(MCP + A2A)和工具分发而非 Agent 拆分。工具分发让每个 Agent 管理自己领域内的工具,效果好、成本低,比不分青红皂白地拆 Agent 更实用。

继续阅读

评论