Chapter 02
为什么有效,为什么脆弱
上一章把 6 类手艺当工具教了——这一章翻到背面,看 few-shot、思维链、自洽性各自为什么有效,以及所有提示为什么会突然失灵。这是把"会用"变成"理解"的一章,也是面试里最能拉开差距的一章。
本章你将建立的 schema
- 能对同行讲清三个机制的名字与原理:few-shot = induction heads 的复制电路;CoT = 突破单次前向的串行算力;自洽性 = 让正确答案当"众数吸引子"。
- 提示脆弱性的四个具体来源(格式 token 敏感、示例顺序、lost-in-the-middle、否定),以及各自的缓解和残留代价。
- 一条会贯穿后面的判断:当前跑得顺 ≠ 真的可靠——哪些"顺滑"是假象。
2.0机制都长在同一个底座上
01 章那句"模型只做一件事——预测下一个 token"不是简化说法,而是本章所有机制的共同底座。三个让提示"显得智能"的现象,都是注意力机制在这个底座上的不同副产物,不是三种独立魔法。先看它们各自挂在哪里:
2.1few-shot 的机制:induction heads
示例之所以"无需训练就生效",是因为模型里有一类注意力头实现了"看到 A…B…又看到 A,就预测 B"的模糊复制。
运行方式:Anthropic 的可解释性研究(Olsson 2022)在 Transformer 里找到了 induction heads(归纳头)——一类注意力头,专门实现 [A][B] … [A] → 预测 [B] 这种模式:它回头找"上一次出现当前 token 的地方",然后复制那时候紧跟其后的东西。few-shot 就是在喂这套复制电路:你给的"输入→输出"示例,被它当成"看到类似的输入结构,就复制类似的输出结构"。
一个会改变你看法的事实:induction heads 在训练早期会经历一次相变(phase change)——loss 曲线上出现一个短暂的小驼峰,而模型大部分的上下文学习能力,恰好在那一刻同时冒出来。这是 ICL ≈ 归纳头复制的强证据:能力不是渐渐学会的,是在某个点"接通"的。对你的实际意义:few-shot 是在调用一个早已成型的电路,不是在"现教"——所以示例的格式和任务信号,比示例的"正确答案"更重要。
| 方式 | 优势 | 代价 / 何时不选 |
|---|---|---|
| zero-shot 指令 | 零额外 token,最省;任务常见时够用 | 格式/边界靠描述,模糊任务上不稳 |
| few-shot(ICL) | 无需训练即可锁定格式与任务身份;改示例即改行为 | 示例占 token、对顺序敏感;推理模型上多余甚至有害 |
| 微调(fine-tuning) | 把行为烧进权重,推理时零示例开销;适合海量稳定样本 | 要数据、要训练、改一次贵;迭代慢 |
few-shot 的代价不只是占 token。它对示例顺序敏感(Lu 2022:同一组示例换个排列,性能能从接近 SOTA 滑到接近随机),而且这个 permutation variance 不随模型变大或示例变多而消失。所以"多塞几条示例求稳"经常是错觉——你只是增加了组合数。缓解见 §2.4。
2.2思维链的机制:突破单次前向的算力上限
中间推理 token 是把"一次前向放不下的串行计算"摊进输出的手段,不是解释。
运行方式:一次前向传播是固定深度的并行计算——理论上属于一个受限的计算类(TC⁰,固定深度电路)。很多问题(多位数乘法、多步逻辑)本质上需要串行步骤,单次前向算不出来。当模型把中间结果写成 token,下一步就能"读自己刚写的"继续算——于是串行步骤被摊进了一串可见 token,模型的有效算力突破了单次前向的上界(Merrill & Sabharwal 2023 给了这个表达力提升的形式化证明)。
涌现,不是线性提升:Wei 2022 测得在 PaLM-540B 上,GSM8K 小学数学题准确率从 18% 跳到 57%——但这种增益只在足够大的模型上出现。小模型加了 CoT 反而产出"读起来通顺、每一步都错"的推理链。这条解释了 01 章那句"小模型上几乎没用":它们连摊开的中间步骤本身都算不对。
| 做法 | 优势 | 代价 |
|---|---|---|
| 直接答(greedy) | 最快最省,一次调用 | 多步任务错误率高,错误直接落到答案 |
| 单条 CoT | 性价比拐点:一次调用换显著准确率提升 | 更长的输出 = 更高延迟和 token 成本 |
| 自洽性(多条投票) | 更稳,见 §2.3 | N 倍计算成本 |
CoT 拿延迟和 token 换准确率。但在推理模型上这笔账反转:它们已经把推理内置了,你再手动叫"一步步想"是重复劳动,反而会干扰它自己的思考路径、拉低结果。这是 2026 年最容易踩反的一条,03 章专门讲怎么判断。
2.3自洽性与分解:让正确答案成为众数
自洽性 = 对同一问题采样多条推理路径,再对最终答案取多数票。
运行方式:贪心解码只走一条路径,一旦这条路某步错了,答案就错。自洽性(Wang 2022)改成:用较高温度采样出多条不同的 CoT 路径,只对它们的最终答案投票。它有效的原因很优雅——正确的推理往往殊途同归到同一个答案,而错误各式各样地发散。所以正确答案是这堆采样结果里的"众数吸引子"。它不需要任何验证器或额外训练,纯靠无监督投票。GSM8K 上相比单条 CoT 再提升约 +17.9 个百分点。
分解(least-to-most)的机制:Zhou 2022 把难题先拆成由易到难的子问题,再依次解、把前一步答案带进后一步。每个子步都更容易落在模型的能力分布内,于是模型能从"见过的简单情形"泛化到"没见过的复杂情形"——在 SCAN 这类组合泛化任务上,准确率从 CoT 的约 16% 提到 99% 以上。这也解释了 01 章为什么把"拆成链"说成 Agent 的雏形:把控制权阶段性交还给程序,正是 03 章编排的核心。
自洽性靠"多数票"。如果一道题的错误答案恰好也高度一致(比如大家都掉进同一个陷阱),自洽性还有用吗?
展开答案(先停 10 秒)
没用,甚至有害——它会自信地投出那个一致的错误答案。自洽性的前提是"错误彼此发散"。当存在一个系统性偏差(提示诱导、训练数据偏见、一个所有路径都会踩的陷阱)让错误也收敛时,多数票只会放大它。
这是"当前表现≠真可靠"的一个具体形态:自洽性让你对答案更有信心,但信心和正确率在系统性偏差下会脱钩。要破,得靠独立视角(不同提示、不同模型)而非同质重复。
2.4为什么脆弱:提示是用一门不稳定语言写的程序
同一个意思,换个 token 级的写法,结果会天差地别——因为模型抓的是表层特征,不是你的意图。
前面三节解释了机制为什么有效。这一节是硬币的反面,也是把新手和老手分开的地方:同样这套机制,决定了提示天然脆弱。把提示当成"程序",但它是用一门不稳定的语言写的——同样的语义有无数种 token 写法,而模型对这些写法并非等价对待。四个具体来源:
来源一:token 级格式敏感
Sclar 2023 测得:仅仅把分隔符从 :: 改成 :、或多加一个空格这种语义无关的改动,能让 LLaMA-2-13B 在某些任务上的表现摆动多达 76 个百分点。根因正是机制本身:模型抓的是 token 级的表层统计特征,一个它在训练里见惯的格式触发了某条强通路,换个写法就没触发。
来源二:示例顺序
就是 §2.1 那条——Lu 2022,同一组 few-shot 示例的不同排列,能从接近 SOTA 滑到接近随机。且不随规模消失。
来源三:lost-in-the-middle
Liu 2023:把关键信息放在长上下文的不同位置,模型的检索准确率呈 U 形——开头和结尾的信息检索得好,中间的容易被"丢失"。根因是注意力的位置偏好(开头的 attention sink + 训练带来的近因偏置)。
来源四:否定与系统性偏差
就是 01 章那条——模型对"不要做 X"不敏感,且越大的模型在否定指令上反而越差(KAIST 的结果)。配合 §2.3 的系统性偏差,构成一类"你越自信、它越错"的陷阱。
| 脆弱来源 | 表现 | 缓解 | 残留代价 |
|---|---|---|---|
| 格式 token 敏感 | 改个空格/分隔符,结果剧变 | 固定模板;用评测集而非手感判好坏 | 模板锁死后灵活性下降 |
| 示例顺序 | 换排列性能大幅波动 | 多种排列各跑几次取均值;平衡标签分布 | 评测成本上升 |
| lost-in-the-middle | 长上下文里中段信息被忽略 | 重要信息放两端;检索更少、重排序 | 需要额外的检索/重排逻辑 |
| 否定 / 系统性偏差 | "不要 X"无效;自信地集体犯错 | 改正向描述;用独立视角而非同质重复 | 提示更长;多模型成本 |
很多人以为"设 temperature=0 就能拿到可复现的输出,用来写回归测试"。这是错的。Thinking Machines 2025 的研究显示,由于服务端批处理的非确定性(batch-invariance 缺失),同一个 temp=0 请求跑 1000 次,能得到约 80 种不同输出。结论:不要用 temp=0 当确定性来源;要稳,得在评测层面跑多次取统计,而不是假设单次可复现。
提示"在 playground 里跑顺了"几乎不能说明它在生产里稳。手感顺滑恰恰是脆弱性最爱藏身的地方——你试的那几个输入碰巧落在强通路上,换一批就塌。这条认知是 03 章 prompt ops 存在的理由:把"我觉得这提示挺好"换成"它在 200 条评测集上的通过率是 87%±3%"。能不能做出这个转变,是中级和高级工程师的分水岭。
2.5跨概念综合:给一个数学辅导 bot 选方案
把这一章和上一章的概念放到一个具体场景里掂量。场景:你在做一个面向中学生的数学解题辅导 bot,要求"答案要准、解释要清楚、调用成本要可控"。下面每个决策都牵涉多个机制:
- 要不要 CoT?要。多步数学正是 §2.2 串行算力发挥作用的地方,而且"解释清楚"本身就需要把推理摊开——这里 CoT 同时服务了准确率和产品需求。
- 要不要上自洽性?看预算。它能再提准确率(§2.3),但 N 倍成本。折中:只对模型"自己标记为不确定"或学生追问的难题开自洽性,普通题走单条 CoT。
- few-shot 怎么配合?用 1–2 条示例示范解题格式(先列已知、再分步、最后框出答案),让 induction heads(§2.1)锁定输出结构——而不是用它去"教数学"。注意示例顺序敏感(§2.4),别堆太多。
- 如果换成推理模型呢?上面三条要大改:CoT 触发语撤掉(内置了)、few-shot 解题示范反而拖低表现、自洽性的位置让给模型自带的思考预算。这正是 03 章要展开的"换底座就要换打法"。
§本章 self-check
先合上教程作答,写完再展开对照。
- 用 induction heads 解释:为什么 few-shot 里示例的"格式"比"标签对错"更重要?
- 从计算复杂度的角度,一句话说清思维链到底买到了什么。
- 自洽性在什么情况下会失效,甚至放大错误?
- (跨机制综合)有人说"我把提示在 playground 调到 temp=0、跑了 5 次都对,所以它可靠"。指出这句话里的两个错误,各对应本章哪个结论。
答案(先做完再展开)
- induction heads 做的是"回看上一次出现的模式并复制其后续",复制的是结构不是含义。所以示例传递的主要是"任务身份 + 输出格式",格式信号强、标签内容弱——标签写反往往不影响输出。
- 突破了单次前向(约 TC⁰,固定深度)的算力上限:中间 token 让模型把串行计算摊进输出,能算出单次前向算不出的多步结果。
- 当错误答案也系统性地收敛(共同陷阱、训练偏见、提示诱导)时失效——多数票会自信地投出一致的错误。它的前提是"错误彼此发散"。
- 错误一:temp=0 不保证确定性(服务端 batch-invariance,1000 次能有 ~80 种输出,§2.4)。错误二:playground 上 5 次都对说明不了可靠——脆弱性最爱藏在手感顺滑里,那几个输入可能碰巧落在强通路上(§2.4 洞察)。可靠性要在评测集上用统计说话。
给"格式敏感 76 分摆动"设计一个不被它坑的工作流
已知同一语义的提示换个 token 写法,性能会摆动几十分。请设计一个让你不会被这种摆动悄悄坑到的最小工作流——它至少要回答:你怎么知道一次"无害的措辞微调"没有让线上质量掉了 20 分?这个工作流和 §2.4 洞察里那句"87%±3%"是什么关系?
提示(卡住再展开)
核心是:任何提示改动(哪怕只是改个标点)都必须过同一个固定评测集,比较改动前后的通过率和置信区间,而不是靠"读着顺"。这就把"提示"纳入了和代码一样的回归测试。这套东西有个名字叫 prompt ops,是 03 章 §3.7 的主题——你刚刚自己推导出了它存在的理由。