多智能体辩论与协作 本节摘要:第 05 节的 Self-Refine 是「一个模型批判自己」——有群体思维(groupthink)风险;CRITIC 把批判锚定在外部工具上——但工具并非总有。Du 等人(ICML 2024,《Society of Minds》)给出了第三条路:N 个模型实例独立提出答案,然后在 R 轮里互相批判,最终收敛。机制是:每个实例读其他实例的提案并批判,据批判更新自己的答案,R 轮后返回收敛答案。它在事实性、规则遵从、推理上都有提升——N 份独立提案的交叉核对降低幻觉,一个模型漏掉的规则被其他模型抓住,多种框架的碰撞收敛到更鲁棒的结论。原始实验因成本用 N=3、R=2;且跨模型组合(ChatGPT+Bard)胜过单模型辩论。
本节摘要:第 05 节的 Self-Refine 是「一个模型批判自己」——有群体思维(groupthink)风险;CRITIC 把批判锚定在外部工具上——但工具并非总有。**Du 等人(ICML 2024,《Society of Minds》)**给出了第三条路:N 个模型实例独立提出答案,然后在 R 轮里互相批判,最终收敛。机制是:每个实例读其他实例的提案并批判,据批判更新自己的答案,R 轮后返回收敛答案。它在事实性、规则遵从、推理上都有提升——N 份独立提案的交叉核对降低幻觉,一个模型漏掉的规则被其他模型抓住,多种框架的碰撞收敛到更鲁棒的结论。原始实验因成本用 N=3、R=2;且**跨模型组合(ChatGPT+Bard)胜过单模型辩论**。《Improving Multi-Agent Debate with Sparse Communication Topology》(arXiv:2406.11776)进一步指出:**全连接(full mesh)并非最优**——稀疏拓扑(星形、环形、中心辐射)能在更低 token 成本下达到同等准确率(每个辩手只看部分同伴)。本节吃透辩论协议、稀疏拓扑的成本算术(N=5/R=3 全连接 60 次批判操作 vs 星形 12 次)、辩论何时有效(事实/规则/开放推理)何时有害(延迟敏感、成本敏感、简单查找),并用标准库实现全连接与稀疏两种辩论,测量 token 成本 vs 准确率。读完本节,你应能避免「收敛崩塌、中心失效、提示同质化」三种失败。
对应原课程:Phase 14 · Lesson 25 ·
multi-agent-debate(原英文phases/14-agent-engineering/25-multi-agent-debate/docs/en.md)。前置:第 12 节(工作流模式)、第 05 节(Self-Refine 与 CRITIC)。
阅读完本节,你应当能够:
三种「自我/交叉修正」模式的区别:
原始实验因成本用 N=3、R=2。准确率随 Agent 数与轮数增加而提升(在 MMLU、GSM8K、国际象棋走子合法性、传记生成上)。**跨模型组合胜过单模型辩论**:ChatGPT + Bard 一起 > 任一单独。
《Improving Multi-Agent Debate with Sparse Communication Topology》(arXiv:2406.11776,2024-2025)指出:全连接并非总最优。稀疏拓扑(星形、环形、中心辐射)能在更低 token 成本下达到同等准确率——每个辩手只看一部分同伴。
成本算术:
省 80% 的批判操作,准确率往往持平——因为辐条之间若意见相同,看中心(汇总)就够了。
⚠️ 三种失败模式:① 收敛崩塌(Convergence collapse)——所有 Agent 收敛到第一个错误答案上;用「强制分歧轮」缓解(前几轮要求每个辩手产出不同提案)。② 中心失效(Hub failure)——星形拓扑里,坏中心污染所有人;轮换中心或用多中心。③ 提示同质化(Prompt homogenization)——所有 Agent 用同一提示,产出相同答案;用多样提示和/或不同模型。
原课程 code/main.py 实现标准库辩论:
Debater 类(脚本化 LLM,带每辩手的意见漂移)。FullMeshDebate 与 SparseDebate 运行器。class Debater: def __init__(self, name, bias): self.name, self.bias = name, bias self.answer = None def propose(self, question): self.answer = scripted_llm(question, bias=self.bias) # 各自带偏差 return self.answer def critique_and_update(self, question, peers): critiques = [critique(self.answer, p.answer) for p in peers] self.answer = update(self.answer, critiques) # 据批判更新 return self.answer
def full_mesh_round(debaters, question): ops = 0 for d in debaters: peers = [o for o in debaters if o is not d] # 每个看所有其他 N-1 个 d.critique_and_update(question, peers) ops += len(peers) return ops def star_round(debaters, question, hub): ops = 0 spokes = [d for d in debaters if d is not hub] hub.critique_and_update(question, spokes) # 中心看所有辐条 ops += len(spokes) for s in spokes: # 辐条只看中心 s.critique_and_update(question, [hub]); ops += 1 return ops
def debate(debaters, question, rounds, topology): for d in debaters: d.propose(question) total_ops = 0 for r in range(rounds): total_ops += topology(debaters, question) if converged(debaters): break # 提前收敛即停 return debaters[0].answer, r+1, total_ops
运行 python3 code/main.py 会输出每协议的准确率与成本;稀疏在 2/3 的问题上以更低成本匹配全连接。
💡 设计要点:辩论的收益是「N 份独立性的交叉核对」,但独立性会被提示同质化破坏——N 个用同一提示的 Agent 几乎等于 1 个。真正有效要求多样性:不同提示、不同模型、甚至不同的温度采样。没有多样性的辩论,只是更贵的 Self-Refine。
| 方式 | 机制 | 适合 | 成本 |
|---|---|---|---|
| Self-Refine(第 05 节) | 单模型自批自改 | 廉价修正 | 1× |
| CRITIC(第 05 节) | 批判锚外部工具 | 有工具可查时 | 1× + 工具 |
| 辩论(全连接) | N 提案者互看互批 | 高价值、可并行、要鲁棒 | N×R×(N-1) |
| 辩论(稀疏/星形) | 辐条只看中心 | 同上但要控成本 | N×R 左右 |
| 跨模型辩论 | 不同模型互批 | 准确率最高 | N×R,多模型 |
原课程 outputs/skill-debate.md:脚手架一个多智能体辩论,可配置拓扑、N、R 与收敛规则,含强制分歧轮与多样性检查(提示是否同质)。
下一节,我们直面生产 Agent 的失败模式——循环、幻觉工具调用、上下文中毒、成本失控等系统性失效,以及如何在架构层而非靠运气来防住它们。