心智社会与多智能体辩论 本节摘要:Minsky 1986 的命题——智能是一个专家组成的社会——每十年被重新发现一次。2023 年 Du et al. 把它变成了具体算法:多个 LLM 实例各自给答案、互读答案、互相批判、再更新;经 N 轮收敛到的共识,在六项推理与事实性任务上胜过零样本 CoT 与反思。两条发现至关重要:多 Agent 与多轮各自独立贡献——社会胜过单 Agent 独白,多轮交换胜过一次性投票。本节讲透辩论为何打破自洽性(self-consistency)的饱和(样本不再 i.i.d.,相关误差被去相关),给出异构辩论、NLSOM 129-Agent 扩展,以及三类失败(谄媚级联、话题漂移、算力爆炸),最后用 Python 实现一个 3×3 辩论,让你看到收敛与递减收益。
本节摘要:Minsky 1986 的命题——智能是一个专家组成的社会——每十年被重新发现一次。2023 年 Du et al. 把它变成了具体算法:多个 LLM 实例各自给答案、互读答案、互相批判、再更新;经 N 轮收敛到的共识,在六项推理与事实性任务上胜过零样本 CoT 与反思。两条发现至关重要:多 Agent 与多轮各自独立贡献——社会胜过单 Agent 独白,多轮交换胜过一次性投票。本节讲透辩论为何打破自洽性(self-consistency)的饱和(样本不再 i.i.d.,相关误差被去相关),给出异构辩论、NLSOM 129-Agent 扩展,以及三类失败(谄媚级联、话题漂移、算力爆炸),最后用 Python 实现一个 3×3 辩论,让你看到收敛与递减收益。
阅读完本节,你应当能够:
自洽性——对同一模型采样多次取多数答案——是你能加上的最便宜的推理改进。它有效,但饱和很快。你可以翻倍采样却看不到有意义的提升。
辩论打破饱和。不再是同一模型的 N 次独立采样,而是 N 个 Agent 互读推理并修订。样本间的相关性下降(不再 i.i.d.),收敛点常常在 i.i.d. 投票自信地错了的地方反而是对的。
来自 arXiv:2305.14325(ICML 2024):
论文在 MMLU、GSM8K、传记、MATH、事实性基准上测试,辩论一致胜过 CoT 与自我反思。
同一论文的消融:
A-HMAD 等后续工作用不同基模型做不同 Agent。Llama + Claude + GPT 辩论降低单一文化坍缩(第 23 节),因为一个模型族的相关误差不被其他族共享。
代价:弱模型参与辩论会把共识拖向它的错误答案(见 Should we be going MAD?,arXiv:2311.17371)。
Zhuge et al.(Mindstorms in Natural-Language-Based Societies of Mind,arXiv:2305.17066)把这个想法扩到 129 成员社会。结论:随规模出现专精化与自组织,系统在视觉问答等任务上胜过单 Agent。
⚠️ 辩论是协调机制的典型代表:收益来自 Agent 间的交互,代价也在交互(调用次数爆炸、上下文膨胀)。把它当默认是过度工程;把它当「自洽性饱和后的下一档」才是正解。
code/main.py 跑一个 3×3 辩论:数学题,每个 Agent 起始答案不同(可能错)。Agent 脚本化——每次「更新」是按脚本化置信度加权平均邻居答案。逐轮日志可见收敛。
class DebateAgent: def __init__(self, name, init_answer, confidence): self.name = name; self.answer = init_answer; self.conf = confidence def update(self, others): # 看到其他 Agent 答案,按置信度加权更新 total_w = self.conf + sum(o.conf for o in others) weighted = (self.answer*self.conf + sum(o.answer*o.conf for o in others)) self.answer = weighted / total_w return self.answer def debate(agents, rounds): history = [[a.answer for a in agents]] for r in range(2, rounds+1): for a in agents: others = [o for o in agents if o is not a] a.update(others) history.append([a.answer for a in agents]) return history
设计要点:演示展示两个关键效应——一轮交换就把 Agent 拉近正确答案;第二轮之后收益递减(对应 Du et al. 的平台化)。这就是工程上「轮数封顶 3」的依据。
class AdversarialAgent(DebateAgent): def update(self, others): majority = sum(o.answer for o in others) / len(others) self.answer = self.answer + (self.answer - majority) # 主动偏离多数
对抗槽打破谄媚级联——迫使其他 Agent 要么辩护要么更新,而非默认附和。
| 变体 | 结构 | 优势 | 风险 |
|---|---|---|---|
| 轮询辩论(Du et al.) | N Agent 对称,R 轮,多数投票 | 简单、可复现 | 谄媚级联 |
| 异构辩论(A-HMAD) | 不同基模型混搭 | 去相关、抗单一文化 | 弱模型拖累 |
| 对抗辩论 | 一个 Agent 持反方 | 破谄媚 | 可能永不收敛 |
| 判官主导 | 一个判官 Agent 听多方再裁决 | 收敛快 | 判官成单点 |
| 辩论链(chain-of-debate) | 辩论输出串成下一辩论 | 复杂任务 | 误差沿链累积 |
| NLSOM(129 Agent) | 大规模社会,自组织 | 涌现专精 | 算力巨大、难调试 |
💡 心法:轮数封顶 3、Agent 数封顶 5、默认异构、留一个对抗槽、每轮都记日志。 这是 Du et al. 平台化结论与生产经验的交集。超过这些上限,代价涨得比质量快。
outputs/skill-debate-configurator.md:为新任务配置辩论——Agent 数、轮数、异构度(同模型 vs 混合)、角色分配(对称 vs 一对抗)。并在跑之前估算 token 成本。
code/main.py,把轮数设 5,看递减收益。到第几轮起额外收敛停止?下一节,我们聚焦辩论与监督者背后的角色设计——规划者、批判者、执行者、验证者四类专职角色如何分工,以及角色边界的清晰程度如何决定系统质量。