对应原课:CMU 11-667 Fall 2025 · Lecture 20 · Thu 13-Nov-2025 · Chatbots and LLM Agents 原课 slides:Chatbots, agents, human evaluation 阅读材料:Chiang et al. (2024), Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference;Clark et al. (2021), All That’s ‘Human’ Is Not Gold: Evaluating Human Evaluation of Generated Text 配套代码:code/lecture20/(1 个模块 + 4 个演示脚本) 本讲的写法:沿着”续写模型 → 聊天助手 → 会行动的智能体”走一遍,每一步看多了什么、会在哪里出错;然后讨论怎样评价它们——众包的成对比较(Chatbot Arena),以及人工评估本身的陷阱。所有数字都来自配套代码的实际输出。
目录
0. 本讲导读
0.1 这一讲要回答的问题
用户接触到的 LLM,几乎都不是”给一段文字、续写下去”的形式,而是一个聊天助手:有系统提示、有多轮对话、有角色。越来越多的,它还是一个智能体:能调用工具、浏览网页、修改代码,在一个循环里一步步完成任务。这一讲回答:
- 聊天助手在内部是什么?对话模板、损失掩码、多轮对话有哪些容易出错的地方?
- 智能体比一问一答多了什么?为什么任务越长越难?
- 开放式的聊天质量没有标准答案,怎样评价和排名?Chatbot Arena 的统计方法是什么?
- 人工评估为什么也不可靠?怎样让它更可靠?
0.2 学完这一讲你应该能
- 写出一段对话的模板化表示,解释为什么训练时只在助手的回答上算损失,以及模板不一致、对话过长会怎样;
- 描述智能体循环(观察 → 思考 → 行动)、记忆的作用,用 讨论多步任务中错误的累积;
- 用 Bradley–Terry 模型从成对选票算出排名和置信区间,解释它为什么优于在线 Elo,以及”风格控制”在做什么;
- 解释”分辨机器文本”的准确率上限,说出人工评估的常见陷阱和改进方法。
0.3 实验平台
- 一个多轮对话格式;
- 一个花园文字冒险(5 个地点、5 件东西、可能锁着的棚子,以及一个最优的专家策略);
- Elo 与 Bradley–Terry 的实现。
04 号脚本复用第 19 讲的三个不同质量的模型。
1. 从续写模型到聊天助手
1.1 对话模板
聊天模型在内部仍然是”续写下一个 token”:一段对话被写成一串带特殊标记的 token,模型续写的是”助手该说的话”。不同的模型家族用不同的模板:
ChatML(OpenAI、Qwen 等):
<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
你好<|im_end|>
<|im_start|>assistant
你好!有什么可以帮你?<|im_end|>
Llama 2 用 [INST] … [/INST] 和 <<SYS>>,Llama 3 用 <|start_header_id|>user<|end_header_id|>……模板里的几样东西:
- 角色:系统、用户、助手(以及工具,第 10 讲);
- 系统提示:开发者设定的身份、风格、规则,优先级高于用户(第 16 讲的指令层级);
- 轮次的分隔:模型靠它知道”现在轮到谁说话”、“什么时候该停”。
代码 01 的对话格式:
<sys> brief <user> do who : she picks her pear from her own garden . <asst> she <end> <user> do noun : my friend waters the rose . <asst> rose <end>
- 系统提示规定回答风格:brief = 只说答案;twice = 说两遍;well = 先说 well。
- 每一轮:用户给一句花园句子,问它的主语、动词或宾语名词。
1.2 实验:只在助手的回答上算损失
训练聊天模型时,用户的话和系统提示是”条件”,只有助手的话是”要学的”。代码 01 §2(“内容”= 回答里有正确的词;“风格”= 格式完全正确):
| 训练对话数 | 损失 | 第 1 轮 | 第 2 轮 | 第 4 轮 |
|---|---|---|---|---|
| 3000 | 只算助手的回答 | 0.99 / 0.97 | 1.00 / 0.97 | 0.95 / 0.79 |
| 3000 | 每个 token 都算 | 0.70 / 0.69 | 0.66 / 0.57 | 0.48 / 0.35 |
| 12000 | 只算助手的回答 | 1.00 / 1.00 | 1.00 / 1.00 | 1.00 / 0.99 |
| 12000 | 每个 token 都算 | 1.00 / 1.00 | 1.00 / 1.00 | 1.00 / 0.99 |
- 数据少时,只在助手的回答上算损失好得多。每个 token 都算的话,大部分梯度花在了预测用户随手写的句子上,这些句子本来就很难预测、对回答也没有用。
- 数据足够多时两者都能学会。
- 实践中几乎都只在助手的回答上算损失(第 6 讲的指令微调也是如此)。Shi et al. (2024) 发现,在少量数据上同时对指令算损失有时反而有帮助——取决于数据和任务。
1.3 实验:模板不一致
代码 01 §3(12000 段对话训练的模型):
| 推理时的模板 | 第 1 轮 内容 / 风格 | 第 3 轮 内容 / 风格 |
|---|---|---|
| 和训练时相同 | 1.00 / 1.00 | 1.00 / 1.00 |
把 <asst> 换成 : | 0.00 / 0.00 | 0.00 / 0.00 |
| 去掉系统提示 | 1.00 / 0.34 | 1.00 / 0.64 |
| 系统提示挪到最后 | 0.98 / 0.94 | 0.91 / 0.91 |
把 <asst> 换成 <user> | 0.52 / 0.43 | 0.65 / 0.58 |
- 把”轮到助手了”的标记换掉,模型就完全不知道该回答——它从没见过别的写法。
- 去掉系统提示:内容仍然正确,风格在第 1 轮只能瞎猜(三选一,约 33%)。到第 3 轮,模型从前面几轮的回答里推断出了风格,风格正确率回升到 64%。这是上下文学习(第 9 讲):之前的对话本身就是”示例”。
- 真实世界里,用错模板是部署聊天模型最常见的 bug 之一:漏掉
<|im_start|>assistant、多一个换行、用了别的模型家族的模板。分词器里存着官方的模板(Hugging Face 的chat_template),推理代码应当直接用它。
1.4 实验:比训练时更长的对话
代码 01 §4(内容 / 风格):
| 训练对话的轮数 | 第 1 轮 | 第 4 轮 | 第 6 轮 | 第 8 轮 | 第 10 轮 | 第 12 轮 |
|---|---|---|---|---|---|---|
| 1~4 轮 | 1.00/1.00 | 1.00/0.99 | 0.05/0.03 | 0.03/0.02 | 0.03/0.02 | 0.05/0.03 |
| 1~8 轮 | 1.00/1.00 | 1.00/1.00 | 1.00/1.00 | 1.00/0.95 | 0.05/0.04 | 0.06/0.03 |
| 1~4 轮,每轮重复系统提示 | 1.00/1.00 | 0.96/0.86 | 0.04/0.02 |
- 一旦对话比训练时见过的更长,小模型就完全崩溃,不只是忘了风格,连内容也答不对。
- 训练到 8 轮,崩溃点后移到第 10 轮,但没有消失。
- 每轮重复系统提示也没用:问题不在”离系统提示太远”,而在模型没见过这么靠后的位置(第 7 讲”长度是一个领域”;第 21 讲的位置编码外推)。
真实的 LLM 在长得多的文本上预训练过,不会这样突然崩溃,但多轮对话的质量同样会下降。
- Laban et al. (2025, LLMs Get Lost in Multi-Turn Conversation) 把同一个任务拆成多轮逐步说明,各种模型的表现平均下降约 39%:早期的错误假设会一直延续下去,模型很少”回头”修正。
- 系统提示的遵循度也会随对话变长而下降(persona drift,Li et al. 2024)。
2. LLM 智能体
2.1 什么是智能体
智能体(agent)= 在一个循环里调用语言模型的程序。
- 循环:给模型一个目标和当前的观察,模型输出一个动作(调用工具、点击网页、运行代码……),环境执行动作、返回新的观察,如此反复,直到任务完成。
- ReAct(Yao et al. 2023)在每个动作之前让模型先写一段”思考”:
- 思考:分析现状、规划下一步;
- 行动:调用一个工具;
- 观察:工具返回的结果。
和一问一答相比,智能体多了几样东西:
- 记忆:
- 短期记忆就是上下文里的历史;
- 长期记忆是外部存储(向量数据库、笔记文件),需要时检索(第 11 讲)。
- 规划:把目标拆成子目标;遇到意外时重新规划。
- 工具:第 10 讲的工具调用,现在一次任务要调用几十次。
- 交互:智能体的动作改变了它之后看到的东西。犯错之后,它会进入训练时从没见过的状态。
常见的基准:
- 网页:WebArena(真实网站上的任务);
- 代码:SWE-bench(修复 GitHub issue);
- 电脑操作:OSWorld;
- 客服:τ-bench(和模拟用户、业务规则交互)。
2.2 实验:花园文字冒险
代码 02:
- 环境:5 个地点排成一条路(相邻才能走过去),5 件东西随机放在各处;一半的局里棚子是锁着的,钥匙在别处。
- 任务:“carry 物品 to 地点”。智能体一开始不知道东西在哪。
- 专家:按记忆搜索 + 最短路径。例如(4 步):
<goal> carry basket to pen
<obs> here shed nothing go pond locked carry nothing <act> go pond
<obs> here pond key basket go pen shed carry nothing <act> take basket
<obs> here pond key go pen shed carry basket <act> go pen
<obs> here pen bucket go orchard pond carry basket <act> drop basket done
专家平均 7.3 步完成一局,最多 23 步,成功率 100%。
用 10000 局专家示范做模仿学习(behavior cloning,只在动作上算损失),模型 d = 64、2 层。三种上下文(每种玩 300 局):
| 智能体 | 成功率 | 每局非法动作 | 成功时的步数 / 专家 |
|---|---|---|---|
| 没有记忆(只看目标和当前观察) | 0.0% | 27.61 | — |
| 记住最近两步 | 93.7% | 0.05 | 1.06 |
| 全部历史 | 88.0% | 1.85 | 1.05 |
-
没有记忆:它不知道目的地在哪个方向、哪些地方已经看过,在两个地点之间来回走:
here orchard feed basket go house pond carry bucket → go house here house nothing go orchard carry bucket → go orchard here orchard feed basket go house pond carry bucket → go house一旦它做了一个非法动作(状态不变),下一步看到的还是同一个观察、做的还是同一个动作——它被”卡”住了。
-
只要记住最近两步(知道自己从哪来),就几乎都能完成。
-
全部历史反而略差:上下文更长、更难学,一旦早先走错一步,这个错误会一直留在上下文里。README 记录了另一个结果:记住最近 6 步的智能体只有 57%——在这个数据量下,“上下文越长越好”并不成立。
2.3 实验:错误的累积
如果每一步独立地以概率 p 做对、做错就失败,长 H 步的任务成功率是 。代码 02 §3:
- 每步准确率:在专家走过的状态上逐步检查(teacher forcing),全部历史的智能体每一步和专家相同的比例 p = 0.942。
- 按任务长度分组:
| 专家步数 | 局数 | 实际成功率 | |
|---|---|---|---|
| 3~5 | 99 | 100.0% | 77.8% |
| 6~9 | 135 | 96.3% | 64.8% |
| 10~22 | 66 | 53.0% | 45.3% |
- 任务越长,成功率越低:100% → 96% → 53%。
- 实际成功率都高于 :“做错一步就失败”是过于悲观的假设。有些”和专家不同”的动作其实也行(换一条路走),非法动作不改变状态、下一步还能改正。
- 长任务的下降依然很快:
- 一旦走进专家从没去过的状态,智能体看到的是训练里没见过的历史,后面的决策更容易出错。这是模仿学习的协变量偏移(Ross et al. 2011)。
- DAgger 的做法是让专家在智能体自己走到的状态上给出示范,再加入训练数据。强化学习(第 18 讲)则直接在智能体自己的轨迹上优化。
真实的 LLM 智能体同样如此:任务越长成功率越低(例如 METR 的研究用”能以 50% 成功率完成的任务长度”来衡量智能体的进步)。把每一步做得更可靠,让智能体能发现并纠正自己的错误(反思、验证、回溯),是智能体研究的核心问题之一。
2.4 智能体的安全
智能体能行动,所以第 16 讲的风险被放大了:
- 间接提示注入可以让它执行攻击者的指令;
- 工具调用有真实的副作用(发邮件、付款、删除文件)。
防护原则:
- 最小权限;
- 有副作用的操作要人工确认;
- 把控制流和不可信的数据分开(CaMeL);
- 详细的日志和可审计性。
3. Chatbot Arena:用成对比较给模型排名
3.1 为什么用成对比较
开放式的聊天质量没有标准答案,静态基准又会饱和、会泄漏(第 5、7、16 讲)。Chatbot Arena(Chiang et al. 2024)的做法:
- 用户输入任意的问题,同时看到两个匿名模型的回答,投票选更好的那个(或者平局);投票之后才揭示模型的名字。
- 问题来自真实用户,分布广、不断更新;匿名防止了品牌偏见;成对比较比打绝对分数容易、一致性更高(第 17、18 讲)。
- 截至 2024 年收集了超过一百万张选票。
怎样从选票算出排名?这又是第 18 讲的 Bradley–Terry 模型:
对全部选票做最大似然(逻辑回归),θ 换算成 Elo 的刻度:分数差 400 对应胜率 10:1,分数差 100 对应胜率 64%(练习 5)。
3.2 实验:在线 Elo vs Bradley–Terry
代码 03 模拟一个真实实力已知的竞技场:
- 模型:20 个,真实实力在 900~1250 之间,相邻的平均只差约 18 分。
- 选票:按 Bradley–Terry 产生;平局的概率 0.2,平局算半胜。
- 在线 Elo:按顺序处理每一场,。
和真实排名的 Spearman 相关 / 平均误差(分):
| 选票数 | Elo(k = 4) | Elo(k = 32) | Bradley–Terry |
|---|---|---|---|
| 500 | 0.922 / 79.2 | 0.931 / 38.2 | 0.926 / 36.3 |
| 2000 | 0.946 / 48.1 | 0.875 / 32.4 | 0.946 / 27.1 |
| 10000 | 0.971 / 30.1 | 0.883 / 50.0 | 0.994 / 28.7 |
| 50000 | 0.962 / 20.1 | 0.898 / 37.0 | 0.995 / 24.0 |
同样的 10000 张选票,打乱处理顺序 20 次,Elo(k = 32)每个模型的分数平均变动 41.1 分;Bradley–Terry 和顺序无关。
- k 小的 Elo 收敛慢;k 大的 Elo 一直在抖,对最近的几场比赛很敏感。
- Bradley–Terry 用全部选票一次性求最大似然,和顺序无关,名次最准。
- Elo 是为”实力会随时间变化”的棋手设计的。模型的实力不变,所以 Chatbot Arena 从在线 Elo 改成了 Bradley–Terry。
- Bradley–Terry 的平均误差到 1 万张之后不再下降:平局按”半胜”算,把分数差都压缩了一点,这是系统偏差;名次不受影响。更严谨的做法是用带平局的模型(Davidson 1970)。
3.3 实验:排名有多确定
代码 03 §2:自助法(重抽选票、重新估计 100 次)给出 95% 置信区间:
| 选票数 | 置信区间的平均宽度 | 相邻名次能分开的比例 | 每个模型可能的名次范围 |
|---|---|---|---|
| 2000 | 84.4 分 | 0.0% | 5.7 |
| 20000 | 25.4 分 | 15.8% | 1.8 |
真实实力相邻的模型平均只差约 18 分。2000 张选票时,置信区间宽达约 80 分,相邻的名次一个都分不开:排行榜上”第 5 名”和”第 8 名”可能没有显著差别。Chatbot Arena 因此公布置信区间,并允许名次并列。
代码 03 §3:一个刚上线的新模型(真实实力 1200):
| 新模型的比赛数 | Elo(k = 4) | Elo(k = 32) | Bradley–Terry 及 95% 置信区间 |
|---|---|---|---|
| 103 | 1114.0 | 1196.1 | 1146.5 [1100, 1203] |
| 987 | 1176.0 | 1127.2 | 1174.2 [1155, 1194] |
只比了一百来场时,三种估计都离真实值有几十分。Bradley–Terry 的好处不是”一下子就准”,而是它给出了诚实的不确定性:一百场时置信区间宽一百多分,一千场时缩小到几十分。新模型需要足够多的比赛才能可靠地上榜;Chatbot Arena 会给新模型多分配比赛。
3.4 实验:风格控制
投票者的偏好不等于”质量”。代码 03 §4:
- 设定:每个模型有一个”回答长度”;投票时更长的那个额外占便宜:。最弱的模型(真实第 20 名)回答特别长。
- 数据:30000 张选票。
| 和真实实力的 Spearman | 最弱模型的名次 | |
|---|---|---|
| 不控制风格 | 0.481 | 4 |
| 控制风格(把长度差作为协变量) | 0.919 | 15 |
- 不控制风格,一个又长又弱的模型排到了第 4。排行榜奖励的是”投票者喜欢的样子”,而不只是”回答得好”。
- 风格控制把长度差作为协变量放进 Bradley–Terry 回归,系数 γ 吸收掉风格带来的胜率,θ 只剩”去掉风格之后的实力”。估计出的 γ = 0.33(真实 0.6,平局把它压小了)。
- Chatbot Arena 在 2024 年加入了风格控制(长度、markdown 标题、列表、粗体的数量),一些模型的排名因此有明显变化。第 18 讲的奖励模型有同样的长度偏差——它们学的是同一种人类偏好。
3.5 对 Chatbot Arena 的批评
- 用户和问题的分布:投票者主要是对 LLM 感兴趣的技术用户,问题偏向编程、闲聊、“考倒模型”的难题,不一定代表你的应用。Arena 也推出了按类别(编程、数学、长问题)分开的排行榜。
- 可以被”刷”:Singh et al. (2025, The Leaderboard Illusion) 指出:
- 一些机构在公开前私下测试大量变体,只公布最好的那个(选择性报告让分数虚高);
- 开放模型被分配的比赛更少;
- 大量 Arena 数据流向少数机构,可能被用来过拟合 Arena 的问题分布。
- 偏好不等于正确:用户很难核实事实是否正确、代码是否真的能跑——Arena 衡量的是”看起来更好”。
4. 人工评估也不是金标准
4.1 Clark et al. (2021)
人工评估常被当作”金标准”。Clark et al. (2021) 让众包评估者分辨一段故事 / 新闻 / 菜谱是人写的还是 GPT-3 写的:
- 准确率约 50%,和瞎猜一样(GPT-2 的文本还能分辨出约 58%)。
- 评估者给出的理由大多是表面的:语法、格式、重复、“太流畅了”。
- 用示例培训评估者,只把准确率提高到约 55%。
他们的结论是:随着模型变强,“人能不能分辨出来”不再是衡量文本质量的好方法;人工评估的设计(问什么、给什么说明、怎样培训)对结果影响极大。
4.2 实验:分辨的上限
给评估者一篇文档,它一半的概率来自真实分布、一半来自某个模型。最好的评估者看到文档 x,比较 和 ,选更大的那个,它的准确率恰好是 。
- 是两个分布的总变差距离。
- 任何评估者(人或机器)都不可能超过这个上限(练习 7)。
- 花园世界里 能精确算出,TV 可以用真实文档上的平均 无偏地估计。
代码 04 §1:
| 模型 | TV | 最好的评估者 | 只看语法的评估者 | 模型文档不合语法的比例 |
|---|---|---|---|---|
| 草稿模型(训练 1 遍,NLL 1.80) | 0.922 | 96.1% | 95.9% | 91.8% |
| 草稿模型(训练 6 遍,NLL 1.36) | 0.389 | 69.5% | 57.7% | 15.3% |
| 目标模型(d128、4 层,NLL 1.35) | 0.341 | 67.1% | 52.1% | 4.2% |
(“只看语法的评估者”:不合语法就判”模型”,否则判”人”。)
- 差的模型很容易分辨:九成以上的文档有语法错误,只看语法就够了。
- 好的模型(每个 token 的 NLL 只比真实分布高约 0.02):
- 最好的评估者也只能做到七成左右,只看语法的评估者接近瞎猜(52%)。
- 剩下的差别藏在”哪些句子更常见”这样的统计细节里,要拿 和 逐句比较才看得出来,读一两篇文档的人根本做不到。
“人分辨不出来”不等于”两者一样好”,只说明这种评估没有区分力。反过来,自动的检测器(机器生成文本检测)也受同样的上限约束:模型越接近人类文本的分布,任何检测器都越不可靠(Sadasivan et al. 2023)。
4.3 实验:评价标准不清楚时
代码 04 §2:
- 任务:比较两个回答哪个”更好”。“更好”可能指内容(是不是关于花,第 18 讲的偏好)、详细程度(有没有形容词、尾巴),或简洁(越短越好)。
- 评估者:5 个,每人心里对三者有自己的权重。
- 标准不清楚:权重 = 设计者的权重 + 很大的个人差异;
- 写清楚标准:个人差异小得多。
| 评估者两两一致率 | Fleiss κ | 和设计者的标准一致 | |
|---|---|---|---|
| 标准不清楚 | 57.0% | 0.14 | 61.7% |
| 写清楚标准 | 67.0% | 0.34 | 75.1% |
- 标准不清楚时,每个评估者都在认真地按自己的理解判断,彼此却只有约六成一致(κ = 0.14,通常认为是”轻微一致”)。这不只是噪声,而是他们在评价不同的东西。
- 写清楚标准能明显提高一致率和”评到了想评的东西”的比例;剩下的不一致来自判断本身的随机性(两个回答很接近时,谁都说不准)。
4.4 怎样让人工评估更可靠
-
问清楚问什么:
- 流畅?有用?事实正确?安全?分开问,不要只问”哪个更好”;
- 给出评分细则(rubric)和示例。
-
选对评估者:领域专家(医学、法律、编程)和众包评估者的判断差别很大;Arena 的投票者也是一个特定的人群。
-
报告一致率(κ 或 Krippendorff’s α)和置信区间;一致率低时,结论要谨慎。
-
控制偏差:
- 随机化两个回答的位置(位置偏差);
- 控制长度和格式(§3.4);
- 隐藏模型身份。
-
LLM 当评估者(LLM-as-a-judge,第 5 讲;Zheng et al. 2023, MT-Bench):便宜、快、一致,和人的一致率可以达到人与人之间的水平。但它有:
- 位置偏差;
- 冗长偏差(AlpacaEval 因此推出了长度控制版本);
- 偏爱自己的回答(self-preference)。
需要用人工评估定期校准。
5. 小结、常见误区、练习
5.1 小结
- 聊天助手:
- 在对话模板上续写。只在助手的回答上算损失,在数据少时明显更好(3000 段对话:0.99 vs 0.70)。
- 推理时模板必须和训练时一致:换掉角色标记,准确率为 0。没有系统提示时,模型会从前面几轮推断。
- 比训练时更长的对话会让小模型崩溃;真实模型的多轮表现也会下降。
- 智能体:
- “在循环里调用模型”,上下文里的历史就是记忆:没有记忆的智能体成功率为 0,记住两步就有 94%。
- 每一步的小错误随任务长度累积(100% → 96% → 53%)。
- 走进没见过的状态后决策更容易出错(协变量偏移)。
- Chatbot Arena:
- 匿名的成对比较 + Bradley–Terry 最大似然。它比在线 Elo 更准、和顺序无关,并给出置信区间:2000 张选票时相邻名次一个都分不开。
- 新模型需要足够多的比赛。
- 风格(长度)会推高排名:不控制时一个又长又弱的模型排第 4,控制后排第 15。
- 人工评估:
- 分辨模型文本的准确率有一个由总变差距离决定的上限(好模型约 67%),人依赖的表面线索更少(52%)。
- 标准不清楚时评估者在评不同的东西(一致率 57%、κ 0.14)。
- 明确的问题、细则、示例、一致率报告、偏差控制是可靠的前提。
5.2 常见误区
- “聊天模型和续写模型是两种东西”:聊天模型就是在对话模板上续写(§1.1)。
- “模板只是格式,换一种写法没关系”:换掉一个角色标记,模型就不知道该说话了(§1.3)。
- “上下文越长,智能体越聪明”:长历史更难学,早先的错误也会留在上下文里(§2.2)。
- “每一步 95% 正确的智能体就足够可靠了”:20 步的任务只有约 36% 能完成(练习 3)。
- “Arena 第 5 名比第 8 名好”:先看置信区间,它们可能分不开(§3.3)。
- “Arena 排名高 = 模型好”:投票者的偏好包括风格;问题分布也不一定是你的应用(§3.4、§3.5)。
- “人分辨不出机器文本,说明机器文本和人写的一样好”:只说明这种评估没有区分力(§4.2)。
- “人工评估就是金标准”:标准不清楚、评估者不同、偏差未控制时,它同样不可靠(§4.3)。
5.3 练习
练习 1(损失掩码的比例):一段对话:系统提示 20 个 token,3 轮,每轮用户 50 个 token、助手 100 个 token。
(a) 只在助手的回答上算损失时,有多少比例的 token 计入损失? (b) 如果每轮的用户消息是一篇 2000 个 token 的文档(“请总结这篇文章”)呢? (c) 这说明了什么?
参考答案
(a) 总长 20 + 3 × 150 = 470,助手的部分 300,占 64%。
(b) 总长 20 + 3 × 2100 = 6320,助手的部分仍是 300,只占 4.7%。
(c) 每个 token 都算损失时,95% 的梯度会花在”学会写用户贴进来的文章”上。这和第 3 讲的预训练没有区别,却挤占了”学会怎样回答”的训练信号。另一方面,只算助手的回答时,计算量(前向和反向都要处理全部 6320 个 token)没有减少,有效的训练信号却很少。所以长上下文任务的 SFT 数据往往需要更多样例。§1.2 的实验里,用户消息是一句花园句子,助手的回答只有 1~2 个词,差别已经很明显。
练习 2(从上下文推断风格):§1.3 里去掉系统提示后,第 1 轮的风格正确率是 34%,第 3 轮回升到 64%。
(a) 为什么第 1 轮约等于 1/3? (b) 第 3 轮时,前面两轮的回答已经暴露了风格,一个”理想的”推断者能做到多少? (c) 为什么模型只做到 64%?
参考答案
(a) 三种风格均匀分布,没有任何线索时只能猜一个(模型会倾向于某一种),期望约 1/3。
(b) 三种风格的回答形式完全不同(brief 一个词、twice 两个相同的词、well 以 well 开头),看过一轮就能确定,理想的推断者能接近 100%。
(c) 模型从没在”没有系统提示”的对话上训练过:
- 它学到的是”看系统提示决定风格”,而不是”看前面的回答决定风格”;
- 去掉系统提示后,输入落在训练分布之外,它只能部分地利用上下文里的线索。
64% 说明它确实在用上下文(远高于 33%),但不完全可靠。如果训练数据里也包含没有系统提示的对话,这种”从上下文推断”的能力会更强。
练习 3(错误的累积):
(a) 一个智能体每一步有 95% 的概率做对,做错就失败,20 步的任务成功率是多少? (b) 要让 20 步的任务成功率达到 90%,每一步至少要多准? (c) §2.3 里实际成功率都高于 ,说出两个原因。
参考答案
(a) 0.95²⁰ ≈ 35.8%。
(b) 99.47%,即每 200 步才允许错一步。
(c) 两个原因:
- “和专家不同”不等于”错”:换一条路也能到达,比较时却被算作错误;
- 错误可以恢复:非法动作不改变状态,下一步还能改正;走错一步可以走回来。
真实的智能体还会主动恢复(检查结果、发现错误、回退重试),这也是为什么”验证”和”反思”对智能体如此重要。但如果错误不可逆(删了文件、付了款), 就是准确的、甚至是乐观的估计。
练习 4(Elo 更新):
(a) 模型 A 1000 分、B 1100 分,A 赢了,k = 32。A 的预期得分是多少?更新后两者各多少分? (b) 如果 A 和 B 交手 100 次,A 赢了 36 次,Bradley–Terry 的估计会是多少分差?
参考答案
(a) 0.360。
- A:1000 + 32 × (1 − 0.360) = 1020.5;
- B:1100 − 20.5 = 1079.5。
爆冷的胜利带来更大的变动。
(b) 只有这一对的比赛时,Bradley–Terry 的最大似然让 σ(θ_A − θ_B) = 0.36,即 θ_A − θ_B = ln(0.36/0.64) = −0.575,换算成 Elo 刻度 −0.575 × 400 / ln 10 = −100 分。数据正好和 100 分的差距一致;但 100 场的统计误差约 ±0.048 的胜率,对应约 ±35 分。
练习 5(Bradley–Terry 和 Elo 的刻度):证明 Elo 分差 100 对应的胜率和 Bradley–Terry 里 θ 差 0.576 对应的胜率相同,并解释 “×400/ln 10” 这个换算。
参考答案
Elo:,Δ = 100 时 ,P = 0.640。
Bradley–Terry:P = σ(Δθ) = 1/(1 + e^{−Δθ})。令 e^{−Δθ} = 10^{−Δ/400},得 Δθ = Δ ln 10 / 400 = 100 × 2.303 / 400 = 0.576,σ(0.576) = 0.640。
所以 Elo 就是把 Bradley–Terry 的 θ 乘以 400/ln 10 ≈ 173.7,再加上一个基准(通常 1000 或 1500)。两者是同一个模型,区别只在估计方法:在线更新还是一次性最大似然。
练习 6(需要多少张选票):两个模型真实实力差 18 分(§3.3 里相邻模型的平均差距)。
(a) 较强的那个的胜率是多少? (b) 只看它们之间的直接比较,大约要多少场,才能在 95% 的置信水平上确定谁更强?
参考答案
(a) 0.526。
(b) 胜率的标准误差约 0.5/√n。要求 1.96 × 0.5/√n < 0.026,n > (1.96 × 0.5 / 0.026)² ≈ 1430 场(只算两者之间的直接比较;Bradley–Terry 能借用它们和其他模型的比较,需要的总选票会分摊)。
这就是为什么 2000 张选票时(平均每一对只有约 10 场)相邻名次一个都分不开,而且 Arena 需要几百万张选票。
练习 7(分辨的上限):真实分布在 4 个结果上是 (0.4, 0.3, 0.2, 0.1),模型是 (0.3, 0.3, 0.3, 0.1)。
(a) 算 TV 和最好的评估者的准确率。 (b) 证明没有评估者能超过 (1 + TV)/2。
参考答案
(a) TV = ½ × (|0.4 − 0.3| + 0 + |0.2 − 0.3| + 0) = 0.1,最好的评估者的准确率 = (1 + 0.1)/2 = 55%。它的策略:看到第 1 个结果就判”真实”,看到第 3 个就判”模型”,其余随便猜。
(b) 设评估者在看到 x 时判”真实”的概率是 f(x) ∈ [0, 1]。准确率是
f(x) = 1 当且仅当 时取到最大值 ½ + ½ Σ max(0, p_true − p_model) = (1 + TV)/2。这是假设检验里的经典结论(Neyman–Pearson / 似然比检验)。
练习 8(一致率与 κ):两个评估者各自有一半的时候选 A,彼此一致的比例是 57%。
(a) 算 Cohen’s κ。 (b) 为什么不直接报告”57% 一致”?
参考答案
(a) 随机一致的期望 ; 0.14(和 §4.3 的 Fleiss κ 一致)。
(b) 两个人都随便选,也有 50% 的一致率。57% 听起来不算太低,扣掉”碰巧一致”之后只剩 0.14,属于”轻微一致”(Landis & Koch 的常用解释:0.0~0.2 轻微,0.2~0.4 一般,0.4~0.6 中等)。如果评估者有强烈的偏好(例如 90% 的时候都选 A),随机一致率会更高,原始一致率就更有误导性。
练习 9(思考:设计一次人工评估):你的团队开发了一个面向医生的临床问答助手,想和一个通用的聊天模型比较。只讨论原理,设计一次人工评估。
参考答案(开放)
- 评估者:有执照的医生(众包评估者分辨不出医学上的错误);至少 3 人,报告一致率。
- 问题:
- 来自真实的临床场景,覆盖不同专科和难度;
- 事先确认没有出现在两个模型的训练数据里(第 16 讲的污染检查)。
- 评价维度(分开打分,给出细则和示例):
- 事实正确性:是否有错误或遗漏的关键信息,是否会导致伤害;
- 有用性:是否回答了问题、是否可操作;
- 安全性:是否在不确定时说明不确定、是否建议转诊;
- 简洁性。
- 事实正确性要能核实(附参考资料或专家共识)。
- 流程:
- 匿名、随机顺序(控制位置偏差);
- 控制长度(或者把长度作为协变量,§3.4);
- 先做小规模试评,修改细则直到一致率可以接受。
- 统计:
- 成对比较用 Bradley–Terry 并报告置信区间;
- 绝对打分报告每个维度的均值和区间;
- 事先计算需要的样本量(练习 6)。
- 补充:
- 对”严重错误”单独统计(一次严重错误可能比平均分更重要);
- 用 LLM 当评估者做大规模的初筛,用医生的评估校准它;
- 部署后持续收集真实使用中的反馈。
5.4 延伸阅读
- 原课阅读:
- Chiang et al. (2024), Chatbot Arena
- Clark et al. (2021), All That’s ‘Human’ Is Not Gold
- 聊天模型与多轮对话:
- Ouyang et al. (2022), InstructGPT(第 18 讲)
- Shi et al. (2024), Instruction Tuning With Loss Over Instructions
- Laban et al. (2025), LLMs Get Lost in Multi-Turn Conversation
- Li et al. (2024), Measuring and Controlling Instruction (In)Stability in Language Model Dialogs
- 智能体:
- Yao et al. (2023), ReAct
- Shinn et al. (2023), Reflexion
- Zhou et al. (2024), WebArena
- Jimenez et al. (2024), SWE-bench
- Xie et al. (2024), OSWorld
- Yao et al. (2024), τ-bench
- Ross et al. (2011), A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning(DAgger)
- Kwa et al. (2025), Measuring AI Ability to Complete Long Tasks(METR)
- 排名与评测:
- Bradley & Terry (1952)
- Elo (1978), The Rating of Chessplayers
- Davidson (1970)(带平局的成对比较模型)
- Zheng et al. (2023), Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena
- Dubois et al. (2024), Length-Controlled AlpacaEval
- Singh et al. (2025), The Leaderboard Illusion
- 人工评估:
- van der Lee et al. (2019), Best practices for the human evaluation of automatically generated text
- Karpinska et al. (2021), The Perils of Using Mechanical Turk to Evaluate Open-Ended Text Generation
- Sadasivan et al. (2023), Can AI-Generated Text be Reliably Detected?
- 本仓库的相关内容:
- 第 5 讲(自动评估、LLM 当评估者)
- 第 6 讲(指令微调)
- 第 8 讲(人与智能体的交互、模拟用户)
- 第 10 讲(工具调用)
- 第 16 讲(提示注入)
- 第 18 讲(Bradley–Terry 与奖励模型)
5.5 下一讲预告
§1.4 里,小模型一遇到比训练时更长的对话就崩溃了;§2.2 里,更长的历史反而让智能体变差。上下文的长度是 LLM 的一个核心限制。第 21 讲:长上下文模型。我们会看:
- 注意力的平方代价和 KV 缓存的线性增长(第 19 讲)意味着什么;
- 位置编码怎样外推到更长的序列(位置插值、NTK、YaRN);
- 模型真的”用上”了长上下文吗——“中间丢失”现象和大海捞针测试的局限;
- 怎样用合适的数据配方把一个模型继续训练成长上下文模型。