心智社会与多 agent 辩论
Minsky 1986 年的前提——智能是一群专家组成的社会——每隔十年就被重新发现一次。2023 年 Du 等人把它变成了一个具体算法:多个 LLM 实例提出答案、读彼此的答案、批判、更新。经过 N 轮,它们收敛到一个共识,在六项推理和事实性任务上打败了零样本 CoT 和反思(reflection)。两个发现很关键:多个 agent 和多轮各自独立地带来贡献。社会打败单 agent 的独白;多轮交换打败一次性投票。
类型: Learn + Build 语言: Python(标准库) 前置要求: Phase 16 · 04(原语模型) 预计时间: ~60 分钟
问题背景
自洽性(self-consistency)——对一个模型采样多次、取多数答案——是你能加上去的最便宜的推理增强。它管用,但很快就饱和。你可以把采样数翻倍,却再也看不到一次有意义的跃升。
辩论打破了这种饱和。不是从一个模型独立采样 N 次,而是 N 个 agent 读彼此的推理再修订。样本之间的相关性下降了(它们不再是 i.i.d. 的),而收敛点往往在 i.i.d. 投票自信地搞错的地方反而正确。
核心概念
Du 等人 2023 年的算法
出自 arXiv:2305.14325(ICML 2024):
- N 个 agent 各自对问题产出一个初始答案。
- 对第 r = 2..R 轮:给每个 agent 看其他 agent 第 r-1 轮的答案,问「考虑到这些,给出你更新后的答案」。
- R 轮之后,对最终答案做多数投票。
论文在 MMLU、GSM8K、人物传记、MATH 和事实性基准上测试。辩论一致地打败 CoT 和自我反思(Self-Reflection)。
两个独立的旋钮
同一篇论文的消融实验:
- 只加 agent 数量(1 轮,对 N 个做多数投票)在大多数任务上打败单 agent,但会触顶。
- 只加轮数(1 个 agent 看自己之前的推理)几乎没帮助——这是反思已知的弱点。
- 两个一起才产生大跃升。多个 agent 之间的多轮交换驱动了收益。
它为什么管用
两个机制:
- 暴露于分歧。 当一个 agent 看到另一个 agent 的推理链得出不同结论时,它要么得辩护、要么得更新。无论哪种,第 r+1 轮的上下文都比第 r 轮更丰富。
- 降低相关误差。 在自洽性里,所有样本都来自同一个模型,于是误差相关——你把它们平均成一个自信的错答案。不同模型或不同种子能去相关。不同的被辩论过的观点能进一步去相关。
异质辩论
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 都倒向听起来最自信的那个。辩论塌缩成嗓门最大的那个声音。提示 agent 扮演对抗角色(「必须有一个 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 通过对邻居答案按脚本化置信度加权平均来「更新」。收敛过程在逐轮日志里看得见。
演示展示两个关键效应:
- 单单一轮交换就把 agent 推得更接近正确答案。
- 第 2 轮之后的额外轮次呈现收益递减(与 Du 等人的触顶吻合)。
运行:
python3 code/main.py实际使用
outputs/skill-debate-configurator.md 为一个新任务配置一场辩论:agent 数量、轮数、异质性(同模型 vs 混合)、角色分配(对称 vs 一个对抗)。它还在你运行前估算 token 成本。
拿去用
如果你要上辩论:
- 把轮数限制在 3。 Du 等人表明 3 轮就拿到了大部分收益。更多只是成本,不是质量。
- 把 agent 数限制在 5。 超过 5,上下文膨胀和成本就会占主导。
- 默认异质。 池子里至少放两个不同的基础模型。
- 对抗席位。 提示一个 agent 无论如何都唱反调。打破谄媚。
- 逐轮记录。 藏起中间轮次的辩论系统无法调试也无法审计。
练习
- 跑
code/main.py,然后把轮数设成 5,看收益递减。从哪一轮起,额外的收敛就停了? - 加第四个带对抗角色的 agent:永远跟当前多数唱反调。这是打破还是改善了收敛?
- 打印(绘制)每轮的一致度分数(处于多数答案上的 agent 比例)。它什么时候触及 1.0,那等同于「正确」吗?
- 读 Du 等人第 4 节的消融实验。用这份代码复现「只加 agent」对「只加轮数」对「两个都加」的结果。
- 读《Should we be going MAD?》(arXiv:2311.17371),列出轮询之外的两个辩论变体——比如裁判主导、辩论链(chain-of-debate)、对抗式。
关键术语
| 术语 | 大家嘴上怎么说 | 它实际是什么意思 |
|---|---|---|
| Society of Mind | 「Minsky 的想法」 | 智能即互相交互的专家;1986 年的提法如今通过 LLM 辩论落地。 |
| Multi-agent debate | 「agent 吵架」 | N 个 agent 提出、互相批判、跨 R 轮修订、多数投票。 |
| Consensus | 「它们达成一致」 | 不是认识论上的真理——只是处于多数答案上的比例。可能自信地错。 |
| Rounds | 「交换步」 | 一轮 = 每个 agent 读其他人并更新一次。 |
| Heterogeneous debate | 「混合模型家族」 | 用不同基础模型来给误差去相关。 |
| Sycophancy cascade | 「人人都附和嗓门大的」 | 辩论故障,agent 不顾对错都倒向最自信的那个 agent。 |
| NLSOM | 「129 agent 社会」 | 基于自然语言的心智社会;Zhuge 等人的扩展版本。 |
| Correlated error | 「同一个模型,同一个 bug」 | 自洽性为何饱和;跨不同观点的辩论能去相关。 |
延伸阅读
- Du et al. — Improving Factuality and Reasoning in Language Models through Multiagent Debate —— 参考论文,ICML 2024
- Zhuge et al. — Mindstorms in Natural Language-Based Societies of Mind —— 129 agent 的 NLSOM
- Should we be going MAD? A Look at Multi-Agent Debate Strategies for LLMs —— 对各种辩论变体做基准测试
- Debate project page —— Du 等人的代码、演示和消融细节