主题
8.5 多Agent协作模式总结与选型指南
经过前面四节的深入探讨,我们已经全面了解了 LangGraph 中三种核心的多Agent协作模式——Supervisor(主管)、Map-Reduce(并行分发汇聚)和 Hand-off(接力)。这一节作为第8章的收尾,我们会把三种模式放在一起比较分析,提供一套系统的选型决策框架,并讨论一些高级的组合策略和工程化最佳实践。
三种模式的横向对比
让我们先用一个统一的场景来对比三种模式的行为差异。假设任务是"分析一份年度财报并生成投资建议":
Supervisor 模式下的执行流程
用户输入 → [Supervisor: 分析任务]
→ 判断: 需要研究 + 需要财务分析
→ [研究员] (研究行业背景)
→ [Supervisor: 研究完成, 下一步?]
→ [财务分析师] (分析财报数据)
→ [Supervisor: 财务完成, 需要综合)
→ [综合分析师] (生成最终建议)
→ 完成特点:Supervisor 在每步之间做决策,可以动态调整顺序或跳过某些步骤。
Map-Reduce 模式下的执行流程
用户输入 → [分发器]
├──→ [财务分析师] (并行)
├──→ [风险评估师] (并行)
├──→ [行业对比专家] (并行)
└──→ [合规审查员] (并行)
↓ (全部完成后)
[聚合器] (汇总四份报告)
→ [终审官] (给出最终判断)
→ 完成特点:多个 Worker 同时工作,总耗时取决于最慢的那个 Worker。
Hand-off 模式下的执行流程
用户输入 → [数据收集员]
→ [预处理员]
→ [分析师]
→ [报告撰写员]
→ [质量审核员]
→ 完成特点:严格的线性顺序,每个 Agent 完成后交接给下一个。
关键差异总结
| 维度 | Supervisor | Map-Reduce | Hand-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协作系统应遵循以下原则:
- 从简单开始:先跑通单Agent版本,确认核心逻辑正确后再拆分为多Agent
- 明确职责边界:每个 Agent 的职责应该能用一句话描述清楚
- 最小化共享状态:Agent 之间通过明确定义的接口通信,避免隐式耦合
- 选择合适的模式:根据任务的依赖关系、并行性和灵活性需求选择 Supervisor / Map-Reduce / Hand-off
- 设计好交接协议:Hand-off 时传递什么信息、用什么格式,要有清晰的约定
- 加入监控和日志:记录每个 Agent 的输入输出、耗时、token消耗,便于优化
- 预留人工介入点:关键决策节点考虑加入 Interrupt 让人类可以审核和干预
- 测试每种路径:不仅测试正常路径,还要测试异常路径和边界情况