Multi-Agent 架构模式
5.1 Multi-Agent 的核心价值
Multi-Agent 不是”更高级”,而是处理复杂性的工具:
Single-Agent 的局限:
- 上下文窗口有限
- 角色切换导致行为不一致
- 难以并行处理
- 难以独立扩展/测试各组件
Multi-Agent 解决:
- 专业化分工
- 独立上下文管理
- 并行执行
- 独立部署和迭代
5.2 Multi-Agent 通信模式
白皮书总结了三种主要的 Multi-Agent 通信模式:
模式一: Orchestrator-Workers(编排者-执行者)
┌─────────────────┐
│ Orchestrator │
│ (编排者) │
│ - 理解任务 │
│ - 分配工作 │
│ - 汇总结果 │
└────────┬────────┘
│
┌─────────────┼─────────────┐
↓ ↓ ↓
┌────────┐ ┌────────┐ ┌────────┐
│Worker 1│ │Worker 2│ │Worker 3│
│(专家A) │ │(专家B) │ │(专家C) │
└────────┘ └────────┘ └────────┘
特点: - Orchestrator 持有全局视图 - Workers 只关注自己的任务 - 适合流水线式工作流
挑战: - Orchestrator 成为瓶颈 - 单点失败风险 - Workers 间无法协作
最佳实践: - Orchestrator 只做路由,不做执行 - Workers 结果应该结构化返回 - 设置 Orchestrator 超时和 fallback
模式二: Hierarchical(分层架构)
┌─────────────────┐
│ Supervisor │
│ (监督者) │
└────────┬────────┘
│
┌──────────────┼──────────────┐
↓ ↓ ↓
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Manager A │ │ Manager B │ │ Manager C │
│ (领域A) │ │ (领域B) │ │ (领域C) │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
↓ ↓ ↓ ↓ ↓ ↓
┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐
│ A-1 │ │ A-2 │ │ B-1 │ │ B-2 │ │ C-1 │ │ C-2 │
└─────┘ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘
特点: - 每层只与直接上下级通信 - Manager 负责领域内协调 - Supervisor 负责跨领域协调
适用场景: - 组织结构复杂 - 需要权限隔离 - 不同团队负责不同层级
挑战: - 通信延迟累积 - 调试困难(跨多层) - 需要精心设计接口
模式三: Peer-to-Peer(对等协作)
┌──────────────────────────────────┐
│ Shared State │
│ (共享状态/消息总线) │
└──────────────────────────────────┘
↑ ↑ ↑
┌─────────┼───┼───┼─────────┐
│ │ │ │ │
┌────┴────┐ ┌──┴───┴──┐ ┌────┴────┐
│ Agent A │ │ Agent B │ │ Agent C │
│ (平等) │ │ (平等) │ │ (平等) │
└─────────┘ └─────────┘ └─────────┘
特点: - 没有中心控制器 - Agent 通过共享状态或消息总线协作 - 更灵活、更去中心化
适用场景: - Agent 需要动态发现和协作 - 去中心化需求 - 容错性要求高
挑战: - 一致性保证困难 - 可能出现死锁或活锁 - 需要冲突解决机制
5.3 Multi-Agent 状态管理
核心原则: 永远不要用 LLM 上下文做状态存储
┌─────────────────────────────────────────────────────────────┐
│ Multi-Agent 状态管理架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ External State Store (外部状态存储) │ │
│ │ - 数据库 (PostgreSQL, MongoDB) │ │
│ │ - KV Store (Redis) │ │
│ │ - 文件系统 │ │
│ │ - 消息队列 (Kafka, RabbitMQ) │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↑↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ State Schema (状态模式) │ │
│ │ { │ │
│ │ session_id: string, │ │
│ │ status: "planning" | "executing" | "done", │ │
│ │ plan: [...], │ │
│ │ current_step: number, │ │
│ │ results: [...], │ │
│ │ errors: [...] │ │
│ │ } │ │
│ └─────────────────────────────────────────────────────┘ │
│ ↑↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Agents (无状态) │ │
│ │ - 启动时读取状态 │ │
│ │ - 执行任务 │ │
│ │ - 写入更新 │ │
│ │ - 不持有任何持久状态 │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
5.4 Multi-Agent 的陷阱
白皮书警告了 Multi-Agent 的常见陷阱:
| 陷阱 | 表现 | 解决方案 |
|---|---|---|
| Agent Proliferation | Agent 数量失控 | 定期审查,合并相似职责 |
| Chat Protocol Chaos | Agent 间消息格式混乱 | 定义标准消息 Schema |
| State in Context | 在上下文中传递状态 | 使用外部状态存储 |
| Orchestrator Bottleneck | 所有决策都经过编排者 | 赋予 Worker 更多自主权 |
| Silent Failures | Agent 失败但系统不知情 | 强制结果校验和心跳 |