心智社会与多 Agent 辩论

Learn + Build~60 minutesPython (stdlib)先修要求: Phase 16 · 04 (Primitive Model)
明斯基(Minsky)1986 年的命题——智能是专家组成的社会——每隔十年就会被重新发现一次。2023 年,Du 等人把它变成了一个具体算法:多个 LLM 实例各自提出答案,阅读彼此的答案,互相批评并更新。经过 N 轮之后,它们收敛到的共识在六项推理与事实性任务上胜过 zero-shot CoT 和反思(reflection)。有两个发现值得注意:多个 Agent和多轮交互各自独立地带来收益。Agent 社会胜过单个 Agent 的独白;多轮交流胜过一次性的投票。

问题

自一致(self-consistency)——对同一个模型多次采样,取多数答案——是你能加上的最便宜的推理提升手段。它有效,但很快饱和。样本数翻倍,也可能看不到另一次有意义的跃升。

辩论打破了这种饱和。不再是同一模型的 N 个独立样本,而是 N 个 Agent 互相阅读推理过程并修正。样本之间的相关性下降(它们不再是独立同分布),收敛点常常是正确的——而在同样的地方,独立同分布投票却自信地选错了。

概念

Du 等人 2023 年的算法

出自 arXiv:2305.14325(ICML 2024):

  1. N 个 Agent 各自对问题给出初始答案。
  2. 对于第 r = 2..R 轮:每个 Agent 会看到其他 Agent 在第 r-1 轮的答案,并被要求「考虑这些答案,给出你的更新答案」。
  3. R 轮结束后,对最终答案进行多数投票。

论文在 MMLU、GSM8K、人物传记、MATH 和事实性基准上做了测试。辩论一致地胜过 CoT 与自我反思(Self-Reflection)。

两个独立的调节旋钮

同一篇论文的消融实验:

  • 只增加 Agent 数量(1 轮,N 个答案多数投票)在大多数任务上胜过单 Agent,但会进入平台期。
  • 只增加轮数(1 个 Agent 看自己先前的推理)几乎没有帮助——这是反思的已知弱点。
  • 两者结合才带来大幅提升。多个 Agent 之间的多轮交流才是收益来源。

为什么有效

两个机制:

  1. 暴露于分歧。 当一个 Agent 看到另一条得出不同结论的推理链时,它必须要么辩护,要么更新。无论哪种,第 r+1 轮的上下文都比第 r 轮更丰富。
  2. 降低相关误差。 在自一致方法中,所有样本都来自同一模型,误差彼此相关——平均下来得到一个自信的错误答案。不同的模型或不同的随机种子可以解相关。不同的辩论视角则能进一步解相关。

异构辩论

A-HMAD 及相关后续工作让不同 Agent 使用不同的基座模型。Llama + Claude + GPT 一起辩论,可以缓解「单一文化崩塌」(monoculture collapse,第 26 课),因为一个模型家族的相关误差不会被其他家族共享。

缺点:一个弱模型参与辩论,可能把共识拖向它的错误答案(参见 "Should we be going MAD?",arXiv:2311.17371)。

NLSOM —— 扩展到 129 个 Agent

Zhuge 等人("Mindstorms in Natural Language-Based Societies of Mind",arXiv:2305.17066)把这一思路扩展到 129 个成员的社会。结果是:专业化与自组织随规模涌现,系统在视觉问答等任务上超过单 Agent。

失效模式

  • 谄媚级联(sycophancy cascade)。 所有 Agent 都听从听起来最自信的那个。辩论坍缩成最大声者的独白。用 prompt 设定对抗角色(「必须有一个 Agent 为相反立场辩护」)会有所帮助。
  • 话题漂移。 多轮辩论会偏离原问题。缓解办法:每一轮都重新注入原问题。
  • 计算量爆炸。 N 个 Agent × R 轮 = N·R 次 LLM 调用,而且上下文还在增长。5 个 Agent、5 轮的辩论就是 25 次调用,且上下文不断膨胀。单题成本可能超过一次 CoT 调用的 10 倍。
multi-agent-debate静态版本未包含此交互图

构建它

code/main.py 在一个数学问题上运行 3 个 Agent × 3 轮的辩论,每个 Agent 从不同(可能错误)的答案出发。Agent 是脚本化的——每次「更新」都是按预设置信度对邻居答案加权平均。逐轮日志中可以清楚看到收敛过程。

演示展示了两个关键效应:

  • 一轮交流就能让 Agent 更接近正确答案。
  • 第 2 轮之后的额外轮次收益递减(与 Du 等人的平台期一致)。

运行:

python3 code/main.py

使用它

outputs/skill-debate-configurator.md 为新任务配置一场辩论:Agent 数量、轮数、异构程度(同一模型还是混合模型)、角色分配(对称还是单方对抗)。它还会在运行前估算 token 成本。

交付它

如果你要交付辩论系统:

  • 轮数上限设为 3。 Du 等人表明 3 轮就能拿到大部分收益。再多是成本,而不是质量。
  • Agent 数量上限设为 5。 超过 5 个之后,上下文的膨胀与成本会成为主导因素。
  • 默认采用异构。 池中至少要有两个不同的基座模型。
  • 保留一个对抗席位。 让一个 Agent 被提示为无论如何都要持反对意见,用以打破谄媚。
  • 记录每一轮。 隐藏中间轮次的辩论系统既无法调试,也无法审计。

练习

  1. 运行 code/main.py,然后把轮数改为 5,观察收益递减。从第几轮开始额外的收敛停止?
  2. 增加第四个具有对抗角色的 Agent:永远反对当前的多数意见。这会破坏收敛还是改善收敛?
  3. 打印每一轮的一致度分数(持多数答案的 Agent 占比)。它在什么时候达到 1.0,而 1.0 是否等同于「正确」?
  4. 阅读 Du 等人论文第 4 节的消融实验。用这份代码复现「只加 Agent」「只加轮数」「两者都加」的结果。
  5. 阅读 "Should we be going MAD?"(arXiv:2311.17371),列出轮询(round-robin)之外的两种辩论变体——例如裁判主导(judge-led)、辩论链(chain-of-debate)、对抗式(adversarial)。

关键术语

术语常见说法实际含义
心智社会(Society of Mind)「明斯基的想法」智能是相互作用的专家;这一 1986 年的构想如今通过 LLM 辩论得到操作化。
多 Agent 辩论(Multi-agent debate)「Agent 互相争论」N 个 Agent 提出答案、互相批评、经 R 轮修订,最后多数投票。
共识(Consensus)「它们达成一致」不是认识论上的真理——只是落在多数答案上的比例。共识也可能自信地出错。
轮(Rounds)「交流步数」一轮 = 每个 Agent 阅读其他人并更新一次。
异构辩论(Heterogeneous debate)「混合模型家族」使用不同的基座模型来解相关误差。
谄媚级联(Sycophancy cascade)「大家都听嗓门最大的」一种辩论失效:Agent 不论对错都听从最自信的那个。
NLSOM「129 个 Agent 的社会」自然语言心智社会(Natural-language society of mind);Zhuge 等人的规模化版本。
相关误差(Correlated error)「同一个模型,同一个 bug」自一致方法为何饱和;跨不同视角的辩论可以解相关。

延伸阅读

示意图共 1 张

debate-rounds diagram
debate-rounds

“Stay hungry, stay foolish.”

— Steve Jobs

esc
↑↓切换↵打开esc关闭