对应 Maps to:CMU 17-630 Prompt Engineering(Prof. Travis Breaux),第 11 周 · Agent Interaction: Collaboration and Debate。原课 Schedule 对这一讲的说明(意译):用多智能体提示来改进搜索和表现的策略,包括多角色计算(multi-role computation)以及多智能体辩论的设计策略。 依据说明:原课的 slides 和阅读清单不公开。Schedule 点名的两项——多角色计算(§4、§5)和多智能体辩论的设计(§2、§3)——是这一讲的主体;§1(为什么多个智能体可能比一个好)和 §6(多智能体系统怎样失败)是讲义补充的背景。材料来自 Du et al.(2024,多智能体辩论)、Liang et al.(2024,MAD)、Smit et al.(2024)、Wang et al.(2024,Rethinking the Bounds)、Zhang et al.(2024,从社会心理学看协作)、Wang et al.(2024,Solo Performance Prompting)、Li et al.(2023,CAMEL)、Hong et al.(2024,MetaGPT)、Qian et al.(2024,ChatDev)、Chan et al.(2024,ChatEval)、Cemri et al.(2025,MAST)等;引用的数字都核对过原文。全部实验是本讲义自己设计的,不代表课堂上讲了什么。 配套代码 Code:
code/lecture15/(只用 Python 标准库;2 个模块 + 6 个脚本;不需要 API key;每个脚本 3 秒以内) 预计阅读时间:3.5 小时(含运行代码)
0. 本讲导航 · How to read this lecture
0.1 学习目标 Learning goals
学完这一讲,你应该能够:
- 说出多个智能体可能比一个好的三种机制——错误不相关(集成)、相互检查(验证比生成容易)、分工(专门化、更短的上下文)——以及每种机制失效的条件。
- 描述多智能体辩论(Du et al. 2024)和 MAD(Liang et al. 2024)的流程,知道它们报告了什么、对照组是什么。
- 在同样的成本下比较辩论和 self-consistency,并能根据任务的性质(答案能不能被认出来、样本之间是否独立)预测谁更好。
- 识别多智能体系统特有的失败:同质化(错得一样)、从众(对的被说服成错的)、“一致 ≠ 正确”、裁判的偏心、角色之间的信息丢失。
- 说出 CAMEL、MetaGPT、ChatDev、ChatEval、Solo Performance Prompting 的核心设计,以及 MetaGPT 为什么用结构化文档而不是对话。
- 用 MAST 的三类失败(系统设计、智能体之间的不一致、任务验证)分析一个多智能体系统,并据此设计改进。
0.2 先修与本讲范围 Prerequisites & scope
| 默认你已经会 Assumed | 本讲只给直觉,后面再展开 Previewed only |
|---|---|
| 第 4 讲:self-consistency(多数投票) | 用辩论做可扩展监督(第 16 讲) |
| 第 9 讲:分解、错误传播 p^k | 实验设计、按成本比较(第 17 讲) |
| 第 10 讲:自我纠正要靠外部反馈;LLM 当裁判的偏差 | |
| 第 14 讲:智能体循环、角色、AutoGen |
0.3 本讲地图 Map
§1 为什么多个智能体可能比一个好(以及为什么可能不)
§2 多智能体辩论:Du et al. 与 MAD ← 代码 01
§3 辩论什么时候有用:同样的成本、从众、一致 ≠ 正确、规模与成本 ← 代码 02、04
§4 多样性从哪里来:角色、不同的模型、一个模型扮演多个角色;裁判 ← 代码 03
§5 角色分工的协作:CAMEL、MetaGPT、ChatDev ← 代码 05
§6 多智能体系统怎样失败:MAST ← 代码 05
§7 在真实模型上 ← 代码 06(可选)
§8 小结 §9 常见误区 §10 练习 §11 延伸阅读 §12 下一讲预告
0.4 记号与术语 Notation & terms
| 术语 | 本讲义里的意思 |
|---|---|
| 智能体(agent) | 一个带着自己的系统提示(角色)的 LLM 实例;几个智能体可以是同一个模型 |
| 辩论(debate) | 几个智能体先各自作答,然后若干轮”看别人的答案和理由 → 修改自己的答案” |
| 轮(round) | 辩论中所有智能体各更新一次;第 0 轮是各自独立作答 |
| self-consistency(SC) | 同一个模型采样 k 次,多数投票(第 4 讲) |
| 同质化(homogeneity) | 几个智能体的错误高度相关——常常错成同一个答案 |
| 从众(conformity) | 改答案时看重”多少人选了它”,而不是”它对不对” |
| 裁判(judge) | 在辩论结束时决定最终答案的那个智能体 |
| SOP | 标准作业程序(Standardized Operating Procedure):规定每个角色做什么、交付什么 |
0.5 本讲的实验装置 · The setup
debate_lab.py 题目:verifiable(看到正确答案时容易认出,如算术)/ recall(冷门事实);每题有一个"诱饵"错误选项
智能体第一轮作答:家族共享 + 角色 + 样本三部分随机量;家族内相关程度 ρ 是"同质化"的旋钮
辩论更新:score(选项) = c·支持者比例 + t·[认出它是对的] + s·[是自己原来的答案] + 噪声
team_lab.py 一个项目 10 条原子需求,从产品经理经过中间角色传到工程师(聊天 / 结构化文档 / 共享消息池),
工程师实现、QA 检查、追问;每条最终错误都记下原因
辩论的收益、从众的害处、角色带来的多样性,在模拟器里都是按机制设定的;讲义的每个结论都给出论文在真实模型上的数字作对照。代码真正演示的是:这些机制如何相互作用——为什么同一个方法在一篇论文里大胜、在另一篇里落败。
1. 为什么多个智能体可能比一个好 · Why more than one?
1.1 三种机制
错误不相关 → 集成(ensemble)。三个人独立答题、每人答对的概率 0.7,多数投票答对的概率是 ;五个人是 0.837;人越多越接近 1(孔多塞陪审团定理)。关键词是独立:如果三个人总是错得一样,投票等于一个人说了三遍,还是 0.7。第 4 讲的 self-consistency 就是这种机制——同一个模型采样几次,错误部分独立。
相互检查 → 验证比生成容易。一个人想不出正确答案,不等于他看到正确答案时认不出来。辩论把别人的答案和理由摆到桌上:如果正确答案”一看就对”(算术可以验算、代码可以运行),少数派的正确答案就能说服多数派——这是投票做不到的。第 10 讲反复出现的结论”验证比生成容易”,是辩论收益的主要来源。
分工 → 专门化。一个复杂任务拆给几个角色:每个角色的提示更短、更专注,输出可以被下一个角色检查(第 9 讲的分解)。MetaGPT、ChatDev 把软件开发拆成产品经理、架构师、工程师、测试。
1.2 对应的三种失败
| 机制 | 失效的条件 |
|---|---|
| 错误不相关 | 几个智能体是同一个模型的副本,错误高度相关;甚至在辩论中从众,主动放弃独立的答案 |
| 相互检查 | 正确答案”看不出来”(冷门事实);说服力来自措辞和自信,而不是正确性;裁判有偏心 |
| 分工 | 信息在角色之间传递时丢失、走样;没有人对照原始需求检查;对话陷入循环、不知道什么时候结束 |
再加上成本:辩论中每个智能体每轮都要读所有人的发言,输入随智能体数的平方增长。这一讲的大部分篇幅,是在回答”这三种机制在什么条件下成立”。
2. 多智能体辩论 · Multiagent debate
2.1 Du et al.:让几个模型互相辩论
Du et al.(2024)的做法很简单:几个同样的模型实例先各自回答;然后每一轮,把其他实例的回答拼进提示,让每个实例”参考别人的推理,检查自己的和别人的答案,给出更新后的回答”;几轮之后取多数。所有任务用同样的提示,适用于任何黑盒模型。主要实验用 ChatGPT、3 个智能体、2 轮辩论。
推理任务(Table 1;算术是六个两位数的加减乘表达式,例如 12+15*21+0-3*27;国际象棋是预测下一步的优势分):
| 方法 | 算术 | GSM8K | 国际象棋(Δ 优势分) |
|---|---|---|---|
| 单个模型 | 67.0 | 77.0 | 91.4 |
| 单个模型 + 自我反思 | 72.1 | 75.0 | 102.1 |
| 多个答案多数投票 | 69.0 | 81.0 | 102.2 |
| 多智能体辩论 | 81.8 | 85.0 | 122.9 |
事实性任务(Table 2):计算机科学家传记 66.0 → 73.8;MMLU 63.9 → 71.1(自我反思反而降到 57.7);国际象棋走法的合法性 29.3 → 45.2。
论文的几个分析:智能体越多、轮数越多,算术正确率越高,但 4 轮以上和 4 轮差不多;让智能体更坚持己见的长提示,收敛更慢,但最终的一致答案更准;给三个智能体不同的角色(教授、医生、数学家),MMLU 71.1 → 74.2;ChatGPT 和 Bard 在 20 道 GSM8K 题上辩论,Bard 单独 11 道、ChatGPT 14 道、辩论后 17 道。还有一个有意思的观察:模型有把握的事实(多个实例给出同样的答案),很难被说服改变;不确定的事实,各实例答案不同、很快向一个答案靠拢——“容易被说服”本身可以当作置信度的信号。
2.2 MAD:思维退化与”正方、反方、裁判”
Liang et al.(2024)从自我反思的一个问题出发:思维退化(Degeneration-of-Thought)——模型一旦对自己的答案有了信心,反思就产生不了新想法,即使原来的答案是错的。他们的 MAD 框架让两个辩手以”针锋相对”(tit for tat)的方式争论,一个裁判管理辩论(可以在认为已经得到答案时提前结束)并给出最终答案。
在”反直觉的算术推理”上(直觉答案通常是错的):GPT-3.5-Turbo 26.0%,加 CoT 28.0%,self-consistency 29.5%,自我反思 27.5%,MAD 37.0%(GPT-4 是 51.0%)。在常识性机器翻译上,用 GPT-3.5-Turbo 的 MAD 在人工评分上超过了 GPT-4。几个分析很值得记住:
- 需要适度的分歧:要求辩手”在每一点上都必须反对”并不是最好的——持续的分歧会变成”为了赢而辩”;
- 辩手从 2 个加到 3、4 个,翻译质量反而下降:模型处理不好越来越长的辩论记录;
- 辩手来自不同的模型时,裁判偏爱和自己同一个模型的那一方(§4.4)。
2.3 在模拟器里看一场辩论
代码 01 演示 2 用模拟器复现 Du et al. 的表格(每类 300 道题):
| 做法 | 调用次数 | 可验证的题 | 靠记忆的题 |
|---|---|---|---|
| 单个模型 | 1 | 67.7% | 60.0% |
| 单个模型 + 自我反思 2 轮 | 3 | 70.0% | 60.0% |
| 3 个答案多数投票 | 3 | 69.0% | 62.7% |
| 3 个智能体辩论 2 轮 | 9 | 82.0% | 67.3% |
| self-consistency:9 次采样 | 9 | 70.7% | 65.0% |
前四行按论文的量级校准过。最后一行是论文里没有的对照:Du et al. 的”多数投票”只用了 3 个答案,而辩论用了 9 次调用(3 个智能体 × 3 轮)。比较两种做法,要在同样的调用次数下比——§3 会看到,这一行的结果取决于任务。
演示 3 看”思维退化”:自我反思每一轮都有 4–7% 的答案改变,但正确率一直在 67.7%–70.0% 之间来回——没有新信息,改动只是”重新想一遍”的随机波动;辩论第 1 轮有 13.9% 的答案改变,正确率逐轮升到 83.1%,改动逐轮减少到 0.7%(大家达成了一致)。别人的不同答案,是自我反思得不到的外部信息。
3. 辩论什么时候有用 · When does debate help?
3.1 同样的成本:文献里看似矛盾的结果
- Du et al.:辩论在算术上大幅领先——但对照的多数投票只用了 3 个答案。
- Huang et al.(2024,第 10 讲):在 GSM8K 上让辩论和 self-consistency 用同样多的回答(9 个),self-consistency 88.2%,辩论 83.0%。
- Smit et al.(2024,ICML):在多个数据集上比较多种辩论协议,结论是当前形式的多智能体辩论不能稳定地胜过 self-consistency 和多推理路径集成;但辩论协议对超参数更敏感、更难调——调好了,有的协议能超过所有非辩论的方法。
- Wang et al.(2024,ACL):用强提示(带示例)的单个智能体,在多种推理任务和模型上几乎和最好的讨论方法一样好;只有在提示里没有示例时,多智能体讨论才明显更好。
3.2 两个旋钮决定谁赢
代码 02 演示 1 把这件事拆成两个旋钮:样本之间的相关 ρ(同一个模型多采样几次,错误有多独立)和可验证性 v(看到正确答案时有多容易认出来)。同样 9 次调用,辩论减去 self-consistency 的正确率差:
| ρ \ v | 0.05 | 0.15 | 0.4 | 0.7 | 0.9 |
|---|---|---|---|---|---|
| 0.1 | −7.5 | −2.7 | +4.2 | +10.3 | +11.5 |
| 0.3 | −2.3 | +1.7 | +7.8 | +12.7 | +14.0 |
| 0.6 | −1.2 | +2.7 | +8.8 | +12.3 | +13.5 |
| 0.85 | +0.5 | +2.3 | +6.0 | +8.0 | +8.8 |
读法:
- 可验证性越高,辩论越占优。self-consistency 只数票,少数派的正确答案永远赢不了;辩论里,少数派的正确答案如果”一看就对”,就能说服多数派。
- 样本越独立,self-consistency 越强。可验证性很低时(左上角),辩论反而输:从众让智能体放弃自己独立得出的答案,等于减少了投票的”有效样本数”。
- 两篇论文分别落在表的两端,并不矛盾。在自己的任务上、按同样的成本比较,是唯一可靠的办法。
3.3 从众,以及”一致 ≠ 正确”
说服力必须来自正确性。代码 02 演示 2:如果看到正确答案时有可能认出来(t = 1),第 1 轮”错 → 对”152 次、“对 → 错”37 次,个体正确率从 63.9% 升到 75.3%;如果说服力和正确性无关(t = 0,只有从众和固执),第 1 轮”错 → 对”71 次、“对 → 错”57 次,几乎抵消,正确率 63.9% → 64.6%。这时的辩论只是”向多数靠拢”,和直接对第 0 轮投票差不多,却多花了几轮调用。
Zhang et al.(2024,ACL)从社会心理学的角度研究多智能体协作,观察到明显的从众:一个原本答对的智能体,被另外两个的错误答案和解释说服,三个一起错——像”群体思维”(groupthink)。从众在有的模型上利大于弊(ChatGPT、Qwen-72B),在有的模型上弊大于利(LLaMA2-Chat 13B / 70B、Mixtral 8×7B);协作轮数越多,从众的好处越小、坏处越大。
一致不等于正确。代码 02 演示 4:在提示里要求智能体”尽量同意”,最后三人一致的比例从 61.8% 升到 94.2%,正确率却几乎不变(74.2% → 73.5%)。第 0 轮就三人一致的 318 道题里,有 52 道是一起错的——辩论对它们完全无能为力,因为没有人提出不同的答案。所以”辩论达成了一致”不是答案正确的证据;反过来,Du et al. 发现”容易被说服”的题往往是模型不确定的题。
模拟器没有复现的一点:Smit et al. 发现,用提示调节智能体之间的”同意程度”(agreement intensity),能让一个辩论协议(Multi-Persona)从表现最差变成最好;MAD 也发现适度的分歧最好。模拟器里同意程度只改变”多快达成一致”,不改变答案往哪里收敛——因为在模拟器里,“认出正确答案”是一个固定的概率,和讨论的氛围无关。真实模型里,“被要求反驳”可能会让模型真的去找对方的错误,从而改变推理过程本身。这正是模拟器的局限:它只能演示你放进去的机制。
3.4 更多智能体、更多轮:收益与成本
代码 04 演示 1(可验证的 300 道题;成本按”输入 + 输出”估算):
| 智能体数 \ 轮数 | 0 | 1 | 2 | 4 |
|---|---|---|---|---|
| 1 | 67.7% / 210 | 67.7% / 570 | 67.7% / 930 | 67.7% / 1,650 |
| 3 | 71.3% / 630 | 78.7% / 2,610 | 82.0% / 4,590 | 83.0% / 8,550 |
| 7 | 71.7% / 1,470 | 82.0% / 10,290 | 87.7% / 19,110 | 88.7% / 36,750 |
(单元格:正确率 / 每题 token。)第一轮的收益最大,之后递减;人越多,桌上出现正确答案的机会越大;但每个智能体每轮都要读所有人的发言,成本随 增长——7 个智能体 4 轮是 3 个智能体 2 轮的 8 倍。Du et al. 在智能体很多时,先用模型把其他人的回答总结一下再交给每个智能体,就是为了控制这个成本。
演示 2 把 self-consistency 放在同一张表上:k = 41 次采样只有 73.7%(每题 8,610 token),3 个智能体辩论 1 轮就有 78.7%(2,610 token)。在这个设定下(可验证性高、样本相关性高),辩论的每个 token 更值钱;换一个任务,排序可能反过来(§3.2)。
4. 多样性从哪里来 · Where diversity comes from
4.1 同一个模型的副本 vs 不同的角色 vs 不同的模型
代码 03 演示 1(600 道题,辩论 2 轮):
| 三人组 | 个体平均正确率 | 两两”错成一样” | 第 0 轮多数投票 | 辩论后 |
|---|---|---|---|---|
| 同一个模型 A 的三个副本 | 64.0% | 14.8% | 67.5% | 74.7% |
| 模型 A + 三个不同的角色 | 63.8% | 13.2% | 67.3% | 75.3% |
| 三个不同家族的模型 A、B、C | 60.0% | 7.5% | 70.2% | 78.7% |
| 最弱的模型 C 的三个副本 | 54.2% | 19.7% | 58.2% | 65.2% |
三个不同家族的组合,个体平均最低(B、C 比 A 弱),辩论后却最高:它们的错误最不相关,少数派的正确答案更常出现在桌面上。三个最弱的模型,辩论后也只有 65.2%——辩论放大不了不存在的能力。
演示 2:A、B 两个模型各一个智能体互相辩论,A 63.8% → 72.2%、B 60.8% → 70.2%,两个都变好了;上限是”第 0 轮至少有一个人答对”(83.0%)——两个人都答错的题,辩论救不回来。
4.2 角色带来多样性
第 14 讲说,角色提示本身很少提高客观题的准确率。在多智能体里,角色有另一个作用:让同一个模型的几个实例想得不一样。
- Du et al.:三个智能体用不同的角色(教授、医生、数学家),MMLU 71.1 → 74.2。
- ChatEval(Chan et al. 2024,ICLR):一个多智能体的”评审团”来评估模型的回答。在 FairEval 上,ChatGPT 单个评审 53.8% → 多个评审讨论 60.0%,GPT-4 61.3% → 63.8%(三位人类标注者 68.8% / 76.3% / 70.0%)。关键的消融:把所有评审的角色描述换成同一句”你是一名标注员”,多智能体就不再比单个评审好——多样的角色是必需的。
模拟器里,角色只把家族共享部分的 40% 变成”各个角色自己的”,所以收益很小(74.7% → 75.3%);把这个比例调到 90%,三个角色的组合到 77.8%,接近三个不同模型(练习 3)。真实模型里角色能带来多少多样性,需要实测——没有温度参数可调的时候(例如代码 06 用的模型),角色几乎是多样性的唯一来源。
4.3 一个模型扮演多个角色:Solo Performance Prompting
既然角色能带来多样性,能不能在一次调用里让一个模型扮演几个角色、互相讨论?Wang et al.(2024,NAACL)的 Solo Performance Prompting(SPP)就是这样:模型先根据任务识别需要哪些参与者(例如”AI 助手 + 电影迷 + 历史学家”),然后在一段输出里模拟他们的多轮讨论,各自给出意见、互相修改,最后给出答案。在需要大量知识的创意写作(故事里要正确地包含几道冷知识题的答案)、需要推理的逻辑格子谜题和协作版”代号”(Codenames)游戏上,GPT-4 的结果是:创意写作(5 道题)标准提示 74.6、CoT 67.1、Self-Refine 73.9、SPP 79.9;逻辑格子谜题 57.7 / 65.8 / 60.0 / 68.3。注意 CoT 在知识密集的任务上反而比标准提示差,SPP 在两类任务上都最好——它减少了事实性幻觉,也保住了推理能力。细粒度的、按任务动态识别的角色,比固定的两个角色更好。
一个重要的发现:这种”认知协同”(cognitive synergy)只在 GPT-4 上出现,在 GPT-3.5-turbo 和 Llama2-13b-chat 上没有——较弱的模型会提前结束讨论,或者偏离任务。和第 14 讲的 Reflexion 一样:让模型”自己和自己商量”,前提是模型足够强。
4.4 裁判也有偏心
辩论结束时,经常需要一个裁判来拍板。MAD 论文的表 6:GPT-4 当裁判,正方是 GPT-3.5-Turbo、反方是 GPT-4 时,裁判选反方 136 次、正方 52 次;正反方对调后,选 GPT-4 那一方 120 次、另一方 77 次——裁判偏爱和自己同一个模型的那一方。
代码 03 演示 3:强模型 A 和弱模型 C 辩论 2 轮后仍有分歧的 113 道题上,两边对的一样多(41 vs 42 道——容易的分歧已经在辩论中解决了)。偏爱同家族的裁判 A 选 A 的答案 78.8%,偏爱同家族的裁判 C 只有 20.4%;而选对的比例都在 41%–50%。同样的辩论记录,换一个裁判,“谁赢”就反过来了,准确率却只在几个点之内变化。
第 10 讲的各种裁判偏差(位置、长度、自我偏好)在多智能体里都还在。实用的做法:用最强的、和辩手不同家族的模型当裁判;隐去答案来自谁;交换顺序再判一次;能用外部的验证(运行代码、核对来源)就不要只靠裁判。
5. 角色分工的协作 · Role-based collaboration
辩论是”同一个问题,多个人各答一遍”;另一类多智能体系统是分工:“一个大任务,不同的人做不同的部分”。
5.1 CAMEL:两个智能体的角色扮演
Li et al.(2023,NeurIPS)的 CAMEL 让两个智能体扮演”AI 用户”和”AI 助手”:用户按任务一步步给出指令,助手执行并回报。启动对话的提示(他们称为 inception prompting)规定了各自的角色、任务和行为规范。论文最有价值的部分之一,是它记录的对话失败:
- 角色翻转:助手开始给用户下指令,两人的角色对调了;
- 助手重复指令:助手只是把用户的指令复述一遍;
- 敷衍的回复:助手说”我会去做的”,却什么也没做;
- 无限循环:双方陷入毫无意义的对话(例如互相道谢),停不下来。
这些失败和第 14 讲 AutoGen 的 TERMINATE 问题是同一类:用自然语言约定的角色和流程,模型并不总是遵守。
5.2 MetaGPT:把标准作业程序写进提示
Hong et al.(2024,ICLR)的 MetaGPT 模仿一家软件公司:产品经理、架构师、项目经理、工程师、测试工程师,按标准作业程序(SOP)协作。三个设计值得记住:
- 结构化的交流接口:角色之间交换的是文档和图(需求文档、系统接口设计、时序图),每个角色的产出有固定的模式(schema),而不是自由对话。论文的理由是”传话游戏”:信息经过几轮自然语言的转述,会严重走样。
- 发布—订阅的共享消息池:每个角色把结构化的产出发布到一个全局消息池,其他角色按需要订阅、直接读取——不必一对一地层层转述。
- 可执行的反馈:工程师写完代码后运行测试,根据结果迭代修改(在 MBPP 上带来 5.4% 的绝对提升)。
MetaGPT 在 HumanEval 和 MBPP 上的 pass@1 是 85.9% 和 87.7%(当时的最好成绩)。
5.3 ChatDev:聊天链与”交流去幻觉”
Qian et al.(2024,ACL)的 ChatDev 也模仿软件公司,但用聊天驱动:开发过程分成设计、编码、测试三个阶段(瀑布模型),每个阶段再分成子任务(编码分成写代码和补全,测试分成代码审查和系统测试);每个子任务由一对角色完成,一个当”指导者”、一个当”助手”,多轮对话直到达成一致。这条”聊天链”规定了说什么;“交流去幻觉”(communicative dehallucination)规定了怎么说:助手在给出回答之前,先主动向对方要更具体的细节,而不是凭空编一个。
5.4 实验:传话游戏与验证
代码 05 用一个简单的模型模拟这种流水线:一个项目 10 条原子需求,从产品经理经过若干中间角色传到工程师。“成功”要求 10 条全对。
传话游戏(演示 1;单元格:工程师拿到完整需求的比例 / 最终产品 10 条全对的比例):
| 交流方式 \ 中间角色数 | 0 | 1 | 2 | 4 |
|---|---|---|---|---|
| 自由聊天 | 34% / 26% | 9% / 8% | 2% / 3% | 0% / 0% |
| 结构化文档 | 88% / 53% | 74% / 48% | 65% / 42% | 46% / 32% |
| 共享消息池 | 88% / 53% | 88% / 53% | 88% / 53% | 88% / 53% |
每多一次转述,就多一次丢失和说错的机会(第 9 讲的 );结构化文档把每次交接的损失降低很多;共享消息池让工程师直接读产品经理的文档,和中间有几个角色无关。但即使需求全部传到,10 条全对也只有 53% 左右:工程师每条有 5% 的概率写错,——分工本身不能消除执行错误。
验证要对照真相的来源(演示 2;自由聊天、2 个中间角色):
| QA | 不追问 | 工程师追问缺失的信息 |
|---|---|---|
| 没有 QA | 3.2% | 10.2% |
| 只检查”能不能运行” | 4.0% | 11.5% |
| 对照自己收到的需求 | 5.2% | 15.5% |
| 对照原始需求 | 50.5% | 62.0% |
只检查”能不能运行”几乎没用;对照自己收到的需求,查得出实现错误,查不出传丢、传错的需求(QA 和工程师拿到的是同一份走了样的需求);只有对照原始需求才有大的提升。三样都用(结构化文档 + 对照原始需求的 QA + 追问)到 86.2%。
6. 多智能体系统怎样失败 · Why multi-agent systems fail
Cemri et al.(2025)的 MAST 是目前最系统的分析:他们收集了 7 个流行的多智能体框架的 1600 多条轨迹,先由专家在 150 条轨迹上归纳出失败分类(标注者之间的一致性 κ = 0.88),再用 LLM 当裁判扩展到全部数据。14 种失败模式分成三类(括号里是它在所有失败标注中的占比):
一、系统设计问题:不遵守任务规定(11.8%)、不遵守角色规定(1.5%)、重复已经做过的步骤(15.7%)、丢失对话历史(2.8%)、不知道什么时候该结束(12.4%)。
二、智能体之间的不一致:对话意外重置(2.2%)、不追问就按错误的假设做下去(6.8%)、偏离任务(7.4%)、隐瞒关键信息(0.85%)、无视其他智能体的输入(1.9%)、推理和行动不一致(13.2%)。
三、任务验证问题:过早结束(6.2%)、没有验证或验证不完整(8.2%)、验证错误(9.1%)。
论文的几条洞见:有显式验证者的系统(MetaGPT、ChatDev)总体失败更少,但验证者不是万能的——很多验证者只做表面的检查(能不能编译、有没有遗留的 TODO 注释)。论文举的例子:ChatDev 生成的一个国际象棋程序通过了编译检查,却不符合真实的游戏规则。他们的结论是需要多层次的验证。
代码 05 演示 3 给出了同样的图景:自由聊天、没有 QA 时,1075 条错误里传丢 642、传错 286、实现错 147——大部分错误发生在智能体之间,不在任何一个智能体内部。对照原始需求的 QA + 追问,错误降到 180;再换成结构化文档,降到 60。
设计多智能体系统时的检查清单:
- 先问需不需要多个智能体。同样成本下,单个智能体 + 好的提示 + self-consistency 可能就够了(§3.1)。多智能体的理由应该是具体的:需要多样性、需要独立的检查、任务真的可以分工。
- 多样性要真实:不同的模型、不同的角色、不同的信息来源;同一个模型的副本错得一样。
- 交接用结构化的产出,关键信息放在所有人都能直接读到的地方,不要层层转述。
- 验证对照真相的来源:原始需求、可执行的测试、外部的事实——而不是流水线里传下来的副本,也不是另一个智能体的”我觉得没问题”。
- 用代码管住流程:轮数上限、终止条件、循环检测(第 14 讲);不要只靠自然语言约定。
- 按成本报告结果:调用次数、token、延迟,和单智能体的基线在同样的成本下比较。
7. 在真实模型上 · On a real model
06_real_llm.py 用真实的 Claude 复现 Du et al. 的算术实验:10 道”六个数的加减乘”表达式,3 个智能体(谨慎的会计、心算老师、先估算再精算的工程师)先各自计算,然后两轮互相看对方的答案和过程、修改。报告单个智能体、第 0 轮多数投票、辩论后多数投票的正确率,以及每一轮”错 → 对""对 → 错”的次数。默认 90 次调用,预算上限 1.00 美元。
两点提醒:默认模型不接受温度参数,同一个提示每次的回答很可能一样,所以三个智能体的多样性只能来自不同的角色提示;强模型在这类算术题上可能第一次就几乎全对,这时辩论只是多花了 8 倍的调用——可以换一个更弱的模型、或者把数字改大,看辩论的收益是否出现。编写讲义时环境里没有安装 anthropic SDK,所以这里不报告真实模型的数字。
8. 小结 · Summary
- 多个智能体可能比一个好,靠三种机制:错误不相关(集成)、相互检查(验证比生成容易)、分工。每种机制都有失效的条件:同质化、从众、看不出对错、传递中的信息丢失。
- 多智能体辩论(Du et al.)在算术、GSM8K、事实性任务上大幅超过单个模型;MAD 用”正反方 + 裁判”对抗思维退化。但和同样成本的 self-consistency 比,谁赢取决于任务:答案能被认出来、样本高度相关时辩论占优;答案看不出对错、样本独立时 self-consistency 占优。
- 一致不等于正确:要求智能体更倾向于同意,只会让它们更快达成一致;第 0 轮就一致的错误,辩论无能为力。说服力必须来自正确性,否则辩论只是从众。
- 多样性来自不同的模型、不同的角色、不同的信息;角色在多智能体里的价值是制造多样性(ChatEval:同一个角色的评审团不比单个评审好)。一个模型扮演多个角色(SPP)只在足够强的模型上有效。裁判偏爱和自己同一个模型的一方。
- 分工(CAMEL、MetaGPT、ChatDev)的主要风险在智能体之间:信息在转述中丢失和走样、角色翻转、无限循环。结构化的产出、共享的消息池、主动追问、对照原始需求的验证,是对应的解法。
- MAST 把多智能体的失败分成系统设计、智能体之间的不一致、任务验证三类;很多验证者只做表面检查。多层次的、对照真相来源的验证是多智能体系统可靠性的关键。
9. 常见误区 · Common pitfalls
- “智能体越多越好。” 收益递减,成本随人数的平方增长;模型处理不好太长的辩论记录(MAD:辩手多了翻译质量反而下降)。
- “辩论比 self-consistency 好。” 要在同样的调用次数和 token 下比;结果取决于任务(§3.2)。很多论文的对照组比辩论便宜得多。
- “三个智能体都同意,那答案就对了。” 同一个模型的副本常常一起错;一致只说明它们没有分歧,不说明它们对。
- “给智能体不同的名字,它们就是不同的智能体了。” 多样性要体现在错误不相关上:不同的模型、真正不同的视角和信息。可以直接测:几个智能体”错成一样”的比例有多高?
- “让裁判决定就公平了。” 裁判有位置、长度、自我偏好,还偏爱和自己同一个模型的一方。
- “多智能体框架会自动协调好。” 自然语言约定的角色和流程会被违反:角色翻转、敷衍、无限循环、不知道什么时候结束。要用代码设上限和终止条件。
- “有测试智能体就有质量保证。” 只检查”能不能运行”、或者对照传下来的副本检查,几乎查不出需求层面的问题。验证要对照真相的来源。
- “多智能体就是在模拟一个团队,人类团队怎么做它就怎么做。” 人类团队的很多机制(记录、会议纪要、对需求的共同理解)在 LLM 智能体之间并不自动存在;结构化的文档和共享消息池是在补上这些机制。
10. 练习 · Exercises
练习 1(计算) 三个智能体各自答对的概率都是 0.6。(a)如果它们完全独立,多数投票答对的概率是多少?五个呢?(b)如果它们完全相关(总是给出同样的答案),多数投票答对的概率是多少?(c)这说明了什么?
参考答案:(a)三个:;五个:。(b)0.6——和一个人一样。(c)投票的收益完全来自错误的独立性;独立的智能体越多、收益越大,但增长得越来越慢(0.6 → 0.648 → 0.683)。真实的多个模型实例介于两者之间:代码 03 里同一个模型的三个副本两两”错成一样”的比例是 14.8%,三个不同家族的模型是 7.5%,后者的投票收益明显更大(第 0 轮投票 67.5% vs 70.2%,尽管后者的个体平均更低)。
练习 2(批判) 一篇论文说:“我们的 5 智能体辩论系统在数学题上把准确率从 70% 提高到 78%,证明了多智能体辩论的有效性。“对照组是”单个模型回答一次”。指出至少三个问题,并设计一个更有说服力的对照。
参考答案:(1)成本不对等:5 个智能体辩论 2 轮至少 15 次调用,而对照只有 1 次;应该和 15 次采样的 self-consistency 比(Huang et al.:同样 9 个回答,self-consistency 88.2% > 辩论 83.0%)。(2)没有报告样本量和置信区间:如果只有 100 道题,70% vs 78% 的区间重叠很多,要用配对检验(McNemar)。(3)没说智能体是不是同一个模型、有没有不同的角色——这决定了多样性,也决定了结论能不能推广。(4)没有报告”对 → 错”的次数:辩论是不是也把一些对的改错了?(5)没有消融:收益来自”看到别人的答案”,还是只是来自”多想了几轮”(自我反思)?更有说服力的对照:在同一组题上比较——单个模型、自我反思(同样轮数)、self-consistency(同样调用次数 / 同样 token)、辩论;报告配对差值的置信区间、翻转矩阵、每题的 token;在可验证程度不同的两类题上分别报告。
练习 3(动手) 在 debate_lab.py 里,World 的 rho_persona 决定角色能让多大比例的家族共享部分变成”各个角色自己的”(默认 0.4)。把它改成 0.9(World(rho_persona=0.9)),重新比较”同一个模型的三个副本""同一个模型 + 三个角色""三个不同家族的模型”的辩论结果。
参考答案:编写讲义时(600 道题,辩论 2 轮):rho_persona = 0.4 时三者是 74.7% / 75.3% / 78.7%;改成 0.9 后是 74.7% / 77.8% / 78.7%——三个副本不受影响,三个角色的组合接近三个不同家族的组合。这说明角色的价值完全取决于它能让错误变得多不相关;在真实模型上,这是一个需要测量的量(例如,统计不同角色的智能体”错成一样”的比例),而不是一个可以假设的量。
练习 4(设计) 为”审查一个代码合并请求(PR)“设计一个多智能体系统。说明:有哪些角色、它们之间交换什么、谁对照什么做验证、什么时候结束、怎样控制成本。
参考答案(一种可能):角色:(a)“需求核对者”读 PR 描述和关联的问题单,列出这个 PR 应该满足的条件(结构化清单);(b)“测试运行者”不是 LLM,而是 CI——运行测试、静态检查,产出机器可读的结果;(c)两三个”审查者”,用不同的模型或不同的关注点(正确性、安全、可维护性),各自独立给出问题列表(每条带文件、行号、严重程度);(d)“汇总者”合并重复的问题,对有分歧的问题让审查者各说一轮理由,最后由人决定。交流:全部通过一个共享的结构化”审查记录”(清单、测试结果、问题列表),不靠自由对话转述。验证:需求核对者的清单对照问题单原文;审查者提出的问题要指向具体的代码行,汇总者对照代码确认存在;测试结果来自 CI,不来自 LLM 的判断。结束:最多两轮讨论,固定的终止条件(所有问题都有结论或达到上限),由代码控制。成本:审查者只看改动的文件和必要的上下文;先让一个便宜的模型做初筛,只对有风险的改动启用多个审查者;报告每个 PR 的调用和 token。
练习 5(分析) 代码 02 演示 4 里,第 0 轮三人一致的 318 道题,最终正确率 83.6%;第 0 轮 2/3 一致的 234 道题 65.0%;三人各不相同的 48 道题 62.5%。(a)这个规律可以怎样用在一个实际系统里?(b)它有什么风险?
参考答案:(a)第 0 轮的一致程度是一个廉价的置信度信号:一致的题可以直接返回答案(省掉辩论的调用),不一致的题才启动辩论、或者交给更强的模型 / 人工复核——这和 Du et al. 说的”容易被说服的题往往是模型不确定的题”是一个道理。(b)风险:一致的题里仍有 16% 是错的(52 道是三人一起错),而且这些错误最隐蔽——系统对它们最”有信心”。用同一个模型的副本时这个问题最严重;可以用不同的模型来降低”一起错”的比例,并对高风险的场景保留抽检。
练习 6(批判) 有人说:“我们的产品用了 MetaGPT 式的五个角色,所以比单个智能体更可靠。“你会问哪些问题?
参考答案:(1)每次交接传的是什么——自由对话还是结构化文档?关键信息有没有放在所有角色都能直接读到的地方?(2)测试 / 审查角色对照什么检查——原始需求和可执行的测试,还是上一个角色的产出?只检查能不能运行吗?(3)出错时能不能定位到是哪一次交接、哪个角色出的错(MAST 的三类失败各占多少)?(4)流程由什么控制——自然语言约定还是代码?有没有轮数上限和终止条件?(5)和单个智能体(加上同样的测试和验证)在同样的成本下比过吗?很多时候,可靠性来自”可执行的验证”,而不是来自”角色的数量”。
11. 延伸阅读 · Further reading
辩论
- Du et al. (2024). Improving Factuality and Reasoning in Language Models through Multiagent Debate. ICML.
- Liang et al. (2024). Encouraging Divergent Thinking in Large Language Models through Multi-Agent Debate. EMNLP.
- Smit et al. (2024). Should We Be Going MAD? A Look at Multi-Agent Debate Strategies for LLMs. ICML.
- Wang et al. (2024). Rethinking the Bounds of LLM Reasoning: Are Multi-Agent Discussions the Key? ACL.
- Zhang et al. (2024). Exploring Collaboration Mechanisms for LLM Agents: A Social Psychology View. ACL.
多角色与评审
- Wang et al. (2024). Unleashing the Emergent Cognitive Synergy in Large Language Models: A Task-Solving Agent through Multi-Persona Self-Collaboration(SPP). NAACL.
- Chan et al. (2024). ChatEval: Towards Better LLM-based Evaluators through Multi-Agent Debate. ICLR.
分工协作
- Li et al. (2023). CAMEL: Communicative Agents for “Mind” Exploration of Large Language Model Society. NeurIPS.
- Hong et al. (2024). MetaGPT: Meta Programming for a Multi-Agent Collaborative Framework. ICLR.
- Qian et al. (2024). ChatDev: Communicative Agents for Software Development. ACL.
失败分析
- Cemri et al. (2025). Why Do Multi-Agent LLM Systems Fail? arXiv:2503.13657.
12. 下一讲预告 · Next lecture
这一讲里,辩论的价值来自”看到正确答案时能认出来”,裁判的价值来自”它比辩手更可靠”。如果被评判的模型比评判者更强呢?人类怎样监督一个在很多方面已经超过自己的模型,怎样知道它说的是真话、做的是对的事?第 16 讲继续原课第 12 周:超级对齐:伦理、道德与欺骗。
- “超级对齐”问的是什么:弱到强的泛化(weak-to-strong generalization)、可扩展的监督——其中一个方向正是辩论:让两个强模型辩论,帮助一个较弱的裁判判断;
- 模型的道德判断怎样评测,为什么这些评测对措辞极其敏感;
- 欺骗:定义、已经观察到的案例、“潜伏”的后门和”对齐伪装”研究揭示的风险;
- Constitutional AI:用一组原则来训练和提示模型;
- 怎样用评估和可解释性的方法去发现这些行为——这一讲只讨论评估与防御。