单 Agent 还是多 Agent:四家生产结论对撞
一句话:这个问题没有通用答案,但有一个非常清晰的判据——你的子任务之间有没有共享的隐式决策。
一、正面对撞
2025 年 6 月,两篇博客隔了几天先后发出来,标题几乎是对 着干的。
Cognition:《Don't Build Multi-Agents》
他们的论证是两条原则:
原则 1:Share context, and share full agent traces, not just individual messages 原则 2:Actions carry implicit decisions, and conflicting decisions carry bad results
第 2 条是全文的核心:动作里携带着隐式决策,而互相冲突的决策会产出垃圾。
他们给的例子非常具体:让两个子 Agent 一起做一个 Flappy Bird 克隆。
- 子 Agent A 去做背景,它做成了超级马里奥风格的背景,而不是 Flappy Bird 要的绿水管
- 子 Agent B 去做小鸟,做出来的鸟长得和动起来都不像 Flappy Bird
- 父 Agent 拿到这两个东西,面临一个不可能完成的任务:把两坨风格不搭的东西缝成一个产品
问题的根源不是子 Agent 笨。是**「Flappy Bird 长什么样」这个决策是隐式的**,没人显式写进任务描述里,而两个子 Agent 各自补全了这个空白,补得不一样。
他们进一步指出:把原始任务复制给子 Agent 是不够的。真实生产系统里是多轮对话 + 工具调用 + 大量细节,这些上下文没法压缩成一句任务描述。
推荐做法:
- 单线程线性 Agent,保持连续上下文
- 任务太长就用上下文压缩模型——专门训一个 LLM 把对话历史总结成关键细节和决策
Anthropic:《How we built our multi-agent research system》
同期 Anthropic 给的是相反的结论和一组数字:
| 指标 | 数值 |
|---|---|
| 多 Agent vs 普通聊天的 token 消耗 | 约 15 倍 |
| 并行子 Agent 带来的研究耗时下降 | 最多 90% |
| token 用量对评测效果方差的解释力 | 80% |
而且他们的做法恰恰是 Cognition 反对的那个:子 Agent 拿全新上下文、互相不知道对方存在、无法中途协调。
二、为什么两边都对
关键在于任务形态,两家做的产品根本不一样:
| Cognition(Devin) | Anthropic(Research) | |
|---|---|---|
| 任务类型 | 写代码 | 查资料 |
| 子任务之间 | 强依赖,改同一份代码 | 弱依赖,各查各的 |
| 操作性质 | 写为主 | 读为主 |
| 隐式决策 | 极多(风格、架构、命名) | 极少(事实就是事实) |
| 结果能否机械合并 | 不能,要缝合 | 能,拼起来就行 |
判据是三条,而且很好用:
① 子任务之间是只读的还是要写同一份东西? 只读 → 多 Agent 安全。写同一份 → 隔离会打架。
② 有没有大量没法写进任务描述的隐式决策? 有 → 单线程。没有 → 可以拆。
③ 结果能不能机械合并? 能(列表、表格、事实集合)→ 拆。要人工缝合风格和逻辑 → 别拆。
Flappy Bird 三条全中,所以拆了就崩。研究任务三条全反,所以拆了提速 90%。
一个更有意思的证据:Anthropic 自己两边都做
04 那篇 里提到的一个细节值得再说一遍:
- Anthropic 的研究系统:子 Agent 互相不知道对方存在
- Anthropic 的 Claude Code:子智能体默认可以嵌套 3 层,而且有
SendMessage可以给兄弟发消息
同一家公司,两个产品,两种架构。 研究是只读并行,所以隔离;写代码有共享状态,所以给了通信通道。
这不是自相矛盾,这是最好的证据:架构由任务形态决定,不由信仰决定。