跳转到内容

8.5 多Agent协作模式总结与选型指南

经过前面四节的深入探讨,我们已经全面了解了 LangGraph 中三种核心的多Agent协作模式——Supervisor(主管)、Map-Reduce(并行分发汇聚)和 Hand-off(接力)。这一节作为第8章的收尾,我们会把三种模式放在一起比较分析,提供一套系统的选型决策框架,并讨论一些高级的组合策略和工程化最佳实践。

三种模式的横向对比

让我们先用一个统一的场景来对比三种模式的行为差异。假设任务是"分析一份年度财报并生成投资建议":

Supervisor 模式下的执行流程

用户输入 → [Supervisor: 分析任务] 
         → 判断: 需要研究 + 需要财务分析
         → [研究员] (研究行业背景)
         → [Supervisor: 研究完成, 下一步?]
         → [财务分析师] (分析财报数据)
         → [Supervisor: 财务完成, 需要综合)
         → [综合分析师] (生成最终建议)
         → 完成

特点:Supervisor 在每步之间做决策,可以动态调整顺序或跳过某些步骤。

Map-Reduce 模式下的执行流程

用户输入 → [分发器]
         ├──→ [财务分析师] (并行)
         ├──→ [风险评估师] (并行)
         ├──→ [行业对比专家] (并行)
         └──→ [合规审查员] (并行)
         ↓ (全部完成后)
      [聚合器] (汇总四份报告)
         → [终审官] (给出最终判断)
         → 完成

特点:多个 Worker 同时工作,总耗时取决于最慢的那个 Worker。

Hand-off 模式下的执行流程

用户输入 → [数据收集员]
         → [预处理员]
         → [分析师]
         → [报告撰写员]
         → [质量审核员]
         → 完成

特点:严格的线性顺序,每个 Agent 完成后交接给下一个。

关键差异总结

维度SupervisorMap-ReduceHand-off
控制流复杂度高(条件路由/LLM路由)中(固定扇出扇入)低(纯线性)
并行能力低(通常串行)(天然并行)
灵活性最高(可动态调整)中(Worker集合相对固定)低(顺序固定)
延迟特性取决于步骤数和LLM调用次数取决于最慢的Worker所有步骤之和
容错性中(某步失败可重试或跳过)(其他Worker不受影响)低(某步失败阻塞后续)
实现难度最低
通信开销中(共享状态)中(共享状态)低(只传给下一个)

选型决策框架

当你在面对一个需要多Agent的场景时,可以按照以下决策树来选择合适的模式:

第一步:任务是否有明确的先后依赖?

├─ 是 → 考虑 Hand-off 或 Supervisor
│   │
│   ├─ 步骤数 > 7 且可能需要回退? → Supervisor(带循环)
│   └─ 步骤数 ≤ 7 且顺序固定?     → Hand-off(最简单)

└─ 否(各子任务独立) → 考虑 Map-Reduce

    ├─ 子任务数量 ≥ 3 且需要全面视角? → Map-Reduce(最佳)
    └─ 子任务数量 < 3?              → 单个 Agent 就够了

除了这个基本框架外,还需要考虑以下因素:

因素一:延迟要求

  • 如果用户等待时间有严格限制(如 < 10秒),Map-Reduce 的并行优势能显著减少总延迟
  • 如果允许较长时间运行(如后台批处理),Hand-off 的简单性更有价值

因素二:成本预算

  • Supervisor 模式每次路由决策可能涉及 LLM 调用,增加 token 成本
  • Map-Reduce 同时调用多个 LLM,峰值成本高但总时间短
  • Hand-off 串行调用 LLM,成本最低但总时间最长

因素三:可靠性要求

  • 如果某个 Worker 失败不能影响其他 Worker → Map-Reduce 最优
  • 如果需要在失败时灵活调整策略 → Supervisor 更合适
  • 如果任何一步失败都需要整体重做 → Hand-off(配合 checkpoint 可恢复)

因素四:团队协作方式

  • 如果不同 Agent 由不同团队/人员维护 → Hand-off 的清晰边界有利于分工
  • 如果需要一个中央团队协调全局 → Supervisor 符合组织架构

高级组合策略

在实际的大型系统中,往往不是单一模式就能满足所有需求的。更常见的做法是组合使用多种模式

组合一:Supervisor + Map-Reduce 嵌套

Supervisor 作为顶层编排器,其中某些步骤内部使用 Map-Reduce 来并行处理子任务。

[Supervisor]
    → [阶段1: 信息收集] (Hand-off)
    → [阶段2: 多维分析] (Map-Reduce 内部)
    │   ├── [财务Worker]
    │   ├── [技术Worker]
    │   └── [市场Worker]
    → [阶段3: 综合判断] (Supervisor 决策)
    → [阶段4: 报告生成] (Hand-off)
    → 完成

这种组合在复杂分析类任务中非常常见——宏观上按顺序推进(Hand-off),微观上的每个分析步骤并行执行(Map-Reduce)。

组合二:Supervisor + Hand-off 带回退

Supervisor 编排主要流程,但某些关键节点如果失败会触发 Hand-off 式的修复循环。

[Supervisor]
    → [Worker A]
    → {A成功?} → [Worker B]
    → {B成功?} → [Worker C]
    → {C失败?} → [Fixer Agent] → 回到 C 重试 (Hand-off loop)
    → [Finalizer]
    → 完成

组合三:分层 Supervisor

对于特别复杂的系统,可以用多层 Supervisor —— 顶层 Supervisor 协调几个 "部门级" Supervisor,每个部门级 Supervisor 再协调自己部门的 Worker Agents。

[Chief Supervisor] (项目级别)
    → [Tech Supervisor] (技术部门)
    │   → [Backend Dev]
    │   → [Frontend Dev]
    │   → [DevOps]
    → [Business Supervisor] (业务部门)
    │   → [Analyst]
    │   → [PM]
    → [Chief Finalizer]
    → 完成

多Agent 系统的常见陷阱

在构建多Agent系统时,有几个容易踩坑的地方:

陷阱一:状态污染(State Contamination)

当多个 Agent 共享同一个 State 类型时,一个 Agent 写入的错误数据可能会影响后续 Agent 的行为。防御方法:

  • 每个 Agent 只写入自己负责的字段
  • 使用 Annotated 类型和正确的合并操作符
  • 对外部输入进行验证和清洗

陷阱二:上下文窗口溢出

每个 Agent 都需要看到之前 Agent 的产出作为上下文。随着链路增长,最后面的 Agent 可能收到超长的输入导致质量下降。解决方法:

  • 在 Hand-off 时传递摘要而非全文
  • 在 Supervisor/Reducer 阶段做信息压缩
  • 让每个 Agent 只关注与自己相关的信息片段

陷阱三:错误传播放大

在一个 Agent 中产生的错误(如幻觉、格式错误)会被后续 Agent 放大和固化。比如研究员产生了不准确的数据,架构师基于它设计了错误的方案,开发者实现了有 bug 的代码,测试师基于错误代码给出了误导性的测试报告。解决方法:

  • 每个 Agent 内部做自我验证
  • 关键节点加入人工审核(Interrupt)
  • 设计"质疑"环节让后续 Agent 可以挑战前序结果

陷阱四:过度设计

不要因为有多Agent的能力就为每个小功能创建一个独立的 Agent。如果一个逻辑块用 10 行代码就能完成,把它做成一个 Agent(含 prompt、LLM 调用、输出解析)就是过度工程化。经验法则:只有当 Agent 的角色定义、prompt 和工具集与其他 Agent 有本质区别时才值得拆分

总结:构建高效多Agent团队的原则

综合本章的所有内容,构建高效的多Agent协作系统应遵循以下原则:

  1. 从简单开始:先跑通单Agent版本,确认核心逻辑正确后再拆分为多Agent
  2. 明确职责边界:每个 Agent 的职责应该能用一句话描述清楚
  3. 最小化共享状态:Agent 之间通过明确定义的接口通信,避免隐式耦合
  4. 选择合适的模式:根据任务的依赖关系、并行性和灵活性需求选择 Supervisor / Map-Reduce / Hand-off
  5. 设计好交接协议:Hand-off 时传递什么信息、用什么格式,要有清晰的约定
  6. 加入监控和日志:记录每个 Agent 的输入输出、耗时、token消耗,便于优化
  7. 预留人工介入点:关键决策节点考虑加入 Interrupt 让人类可以审核和干预
  8. 测试每种路径:不仅测试正常路径,还要测试异常路径和边界情况

基于 MIT 许可发布