多智能体协作:从编排到协商

单 Agent 处理复杂任务会遇到天花板:知识单一、上下文有限、一个环节错全盘错。多智能体(Multi-Agent)把任务拆给多个专职 Agent 协作。但"多个 Agent 一起干活"不是把代码拆几个文件那么简单——协作模式决定成败

一、什么时候需要多智能体

先泼冷水:单 Agent 能干的,别上多智能体(成本×N、延迟×N、失控面×N)。

真正需要的场景:

场景 为什么单 Agent 不行
研究任务(检索+分析+写作) 一个 Agent 上下文装不下全部阶段
复杂业务流程(面试官+记录员+评分) 职责要隔离,角色会互相污染
长任务(项目规划+执行+验收) 中途上下文漂移,阶段要独立上下文
需要"不同视角"(方案评审) 一个 Agent 只有一个视角

二、三种协作模式

模式 1:编排(Orchestration)——最常见

A A g g e e n n t t O A r A A g c g g e h e e n e n n t s t t t r 稿 a t o A r g e n t

特点:中心化控制、职责清晰、可追踪。

适用:任务可以明确拆分为阶段的场景(研究报告、面试流程)。

关键设计:主 Agent 只做"调度和汇总",不做具体业务(否则退化成单 Agent)。

模式 2:协商(Negotiation)——观点碰撞

A A g g e e n n t t A g e n t A g e n t

特点:多个视角独立分析同一问题,协调者综合裁决。

适用:方案评审、代码审查、风险评估(需要多视角)。

关键设计:每个 Agent 有独立的 system prompt(立场)、独立上下文,不能互相看对话(否则观点趋同,失去协商意义)。

模式 3:黑板(Blackboard)——共享状态

A A A g g g e e e n n n t t t A B C

特点:无中心、松耦合、支持并发。

适用:流水线型任务(ETL、多阶段处理),或者不确定顺序的任务(谁准备好谁干)。

关键设计:黑板要有"状态协议"(每个条目:待处理/处理中/完成),否则 Agent 重复处理。

三、选型决策树

A g e n t A g e n t 线

四、工程化要点

1. 上下文隔离

每个子 Agent 只给它需要的上下文,别全量传:

1
2
3
4
# 错误:把整个任务上下文传给每个 Agent(上下文爆炸 + 互相污染)
researcher.run(task_full_context)
# 正确:只给"这一阶段"需要的
researcher.run({"question": q, "documents": [d1, d2]})

2. 结构化交接

Agent 之间的产物用结构化数据(JSON/表格),不用自然语言:

1
2
3
4
5
6
7
8
{
  "agent": "researcher",
  "output": {
    "findings": [...],
    "sources": [...],
    "confidence": 0.9
  }
}

自然语言交接 = 信息损耗 + 不可校验

3. 收敛控制

多 Agent 循环会发散(互相扯皮、无限迭代):

A g e n t 3 0 s " 3 "

4. 可观测性

A g e n t A g e n / t t r a c e

五、踩坑记录

  1. Agent 互相复读:协商时 B 只是复述 A 的观点(因为看到了 A 的输出)→ 强制独立推理(先各自出结论,再互看)
  2. 上下文膨胀:每个 Agent 都带全量历史 → 用独立上下文 + 只传结构化交接物
  3. 协调者被架空:协调者只是"传话的",没有裁决能力 → 协调者要有自己的判断标准(评审规则、质量标准)
  4. 成本失控:5 个 Agent × 10 轮 = 50 次 LLM 调用 → 设总预算,超了就降级(少 Agent 多轮次 → 多 Agent 少轮次)

总结

多智能体协作的核心认知:

  1. 先问"要不要":单 Agent 能干的别上多 Agent
  2. 三种模式:编排(拆阶段)、协商(多视角)、黑板(并发流水线)
  3. 工程化三件套:上下文隔离 + 结构化交接 + 收敛控制
  4. 可观测是底线:没有 trace 的多 Agent 是黑盒,出事没法查

多智能体的价值不是"多个模型",是"多个职责 + 清晰的协作协议"。 协议设计比 Agent 本身更重要。