Learn AI · 模型硬功底(由内而外)
第 17 课 / 经典论文 P16  ·  阶段四:对齐与推理(Wei et al., 2022)

Chain-of-Thought:
让它「一步步想」再答
——给模型开草稿纸,也是推理模型 (o1 / R1) 的根

上一课 RLHF训练让模型「听话」。这一课换个杠杆:不改一个权重,只改 prompt,就能让模型的推理能力大幅跳升。 现象很反直觉:再大的模型,碰到要拐几道弯的题(应用题、多步逻辑),让它直接说答案常常错;但只要让它先把推理一步步写出来再给答案,准确率就暴涨。 它回答你天天在 prompt 里用、却没拆过原理的一招:为什么「让我想一下 / 一步步来」这句话,真能让模型答得更对?
一句话:让模型在给答案前「把推理过程一步步写出来」,多步任务的准确率就大幅提升——只改 prompt,不训练。
原理硬核:一次前向推理的「思考深度」是固定的,硬题没法在一步里算完。把中间步骤写出来 = ① 拿 token 换「思考算力」(写得越多、算得越多);② 把难题拆成一串单步能做的小题;③ 中间结果回喂进上下文,当自己的草稿纸。 这就是「let's think step by step」、推理模式、乃至 o1 / DeepSeek-R1 这类推理模型的根——也是你任何多步任务、LLM-as-judge 都该「先想后答」的原因。

一、立靶:大模型也会在「多步推理」上翻车

你学过 few-shot:给几个 Q→A 示范,模型照做。但对需要拐几道弯的题(算术应用题、符号推理、多跳常识),哪怕给了示范、哪怕模型很大,直接输出答案的正确率依然很低

立靶:是「不会」,还是「没给它想的空间」?

模型在一次前向推理里、要一口气从问题跳到答案——相当于让你心算一道多步应用题、还不许打草稿、立刻报数。 人都会错,何况它每一步的「算力」是固定的。 Wei 等人的赌注:问题可能不是模型不会推理,而是我们没给它「把推理写出来」的空间。给它草稿纸试试?

二、抽框架:把示范从「Q→A」改成「Q→推理→A」

标准 promptingChain-of-Thought prompting
示范长什么样问题 → 直接答案问题 → 一步步推理 → 答案
模型学到「看到问题就吐答案」「看到问题先写推理再吐答案」
多步题表现常错(硬算一步到位)大幅提升(拆步、有草稿)
关键:你只改了「示范的形状」,没碰任何权重

RLHF 对照——RLHF 是训练(改权重、永久);CoT 是prompt 技巧(不改权重、当场生效)。 它不给模型新增推理能力,而是把模型本就潜藏的推理能力「引出来」——靠的是给它腾出「把中间步骤写下来」的空间。 所以零成本、即插即用:你在 prompt 里要一句「请一步步推理」,吃的就是这口红利。

三、核心洞察:写出来的中间步骤,就是「思考算力」

为什么「写出来」就管用?三层,从浅到深——第三层是这门课最该带走的硬通货。

说明
① 拆解把一道要拐五道弯的难题,拆成五道各拐一道弯的小题——每道都在模型「一步能力」之内。
② 草稿纸(回喂上下文)每写出一个中间结果,它都变成后续生成的输入(自回归)。模型读着自己的草稿往下推,而不是把一切压在脑子里。
③ 拿 token 换算力(test-time compute)一次前向推理的计算深度是固定的——硬题在一步里算不完。每多生成一个推理 token,就多一次前向、多一截「思考算力」。CoT 的本质,是用「输出更多 token」换「更多思考」。
而且:CoT 是「大模型才有的涌现能力」

in-context learning 一样,CoT 只对足够大的模型有用(~100B 级才明显)。小模型让它「一步步想」,会写出看着通顺、逻辑却错乱的推理链,帮不上忙甚至更差。 推理是随规模涌现的,CoT 只是把这份涌现的能力「解锁」出来。

四、动手玩:同一道题,直接答 vs 一步步想

一道要拐几道弯的题。点不同方式,看「直接答」怎么翻车、「写出推理」怎么救回来(示意 2022 年 GPT-3 级模型上的典型现象)。

题目:停车场有 23 辆车,开走了 15 辆,又开来 18 辆,之后现有车的一半离开。现在有几辆?
选方式: 

看出门道了吗:「直接答」逼模型一步到位,错在没地方算;「写出来」让它一步一锚,每步都在能力之内。而且——只加一句「一步步想」就能触发,连示范都不用给(下一节)。

五、对照表(一):标准 prompting vs CoT

维度标准 promptingChain-of-Thought
给模型的问题(+ Q→A 示范)问题 + Q→推理→A 示范(或一句触发)
输出直接答案推理过程 + 答案
多步任务准确率大幅提升
代价快、省 token慢、多花 token(推理也占输出)
改了什么只改 prompt(不训练,能力是涌现的)

六、对照表(二):CoT 的变体与它长成的「推理模型」

做什么关系
zero-shot CoT不给示范,只在问题后加一句 「Let's think step by step」惊人地有效——一句话就触发推理(Kojima et al.)
self-consistency(自洽)采样多条不同推理链,对最终答案投票取多数多想几遍取共识,再涨一截准确率
推理模型(o1 / R1)RL 把「生成长 CoT」直接训进模型把 CoT 从 prompt 技巧升级成模型的内建本能

🔮 这条线把「test-time compute(推理时算力)」推成了新的 scaling 维度:Scaling Laws 是「训练时」砸算力,CoT/推理模型是「推理时」多花算力(多想)换准确率。o1、DeepSeek-R1 的「思考越久越准」,根就在这一课。它和 RLHF 合流:用 RL 奖励「想得对的长 CoT」——对齐与推理在前沿汇成一条河。

七、映射到你的项目

你工作里的东西其实就是这篇论文的什么
你写 prompt 时加「请一步步分析 / 先说理由再给结论」就是 CoT——最便宜、最高杠杆的提质招,对任何多步任务都该默认开
你做 LLM 评分/质检(LLM-as-judge)让它直接出分反了!应让它先写评判理由、再给分——CoT 同款。直接出分=逼它心算,先推理再裁决质量更稳(呼应上一课 RM 设计)
你的 agent 先「想计划」再行动就是 CoT 的 agent 版(下一课 ReAct 会把「想」和「做」交错)——先推理再动手
你做实时语音 agent纠结延迟正面取舍:CoT 提准确率,但多出的推理 token = 多出的延迟。实时语音场景要么用隐式/简短推理,要么把「想」放到不卡用户的环节
「为什么有时模型加了思考反而更啰嗦、还可能更错」① 小模型/简单题用 CoT 无益甚至有害;② 推理链本身可能错(写得通顺≠逻辑对)——要 self-consistency 或校验兜底

八、检索练习(关掉上文,凭记忆答)

1. Chain-of-Thought 的核心做法是?
2. CoT 为什么管用?最深的一层原因是?
3. 小模型用 CoT 会怎样?

九、常见问题 FAQ

把这一课接到你真实工作上的几个关键问。点开看答。

模型写出来的推理链,就是它「真正的思考过程」吗?

不一定。CoT 文本是「有用的草稿」,但未必忠实反映模型内部真实的计算。研究发现模型有时先「想」出答案、再编一段看似合理的推理来圆(post-hoc rationalization),推理链甚至可能和最终答案矛盾、或受无关提示左右却不在链里承认。

对你的含义:别把 CoT 当「可信的解释」直接展示给用户当依据,它是提升准确率的手段、不是审计模型的窗口。要可信,得靠 self-consistency、外部校验、或可执行的步骤(如让它写代码跑出结果),而不是「它说它这么想的」。

既然 CoT 几乎总有帮助,是不是该无脑给所有任务都加?

不是。三种情况别加或要权衡:① 简单/单步任务(分类、抽取、查表)——CoT 没收益,白白多花 token、增延迟,有时还把简单题想复杂了;② 延迟敏感场景(如实时语音交互)——推理 token 直接变延迟,得掂量;③ 小模型——涌现门槛没到,无益甚至有害。

判据:任务要不要「拐弯」?需要多步推理/计算/规划 → 上 CoT;一步能答的 → 直接答更省更快。成本意识:CoT 是用 token(钱+延迟)买准确率,要看这道题值不值这笔买卖。

CoT 和「推理模型」(o1/R1) 是一回事吗?我还需要自己写 CoT 吗?

同根,不同形态。CoT 是prompt 技巧(你手动要求它一步步想,不改模型);推理模型(o1、DeepSeek-R1)是用 RL 把「生成长 CoT 并自我检查」训进了权重——它默认就会大段思考,还学会回溯、验算。等于把这节课的手动招式,升级成了模型的内建本能。

实操:用推理模型时,通常不必再手写「一步步想」(它自己会,硬塞反而可能干扰);用普通模型做多步任务时,手动 CoT 仍是高杠杆招。选型新维度:难推理任务可选推理模型(准但慢且贵),简单任务用普通模型(快省)——又一个「准确率 vs 成本/延迟」的取舍。

test-time compute 和训练时 scaling,前沿现在更看重哪个?

不是二选一,但边际注意力明显转向 test-time compute。2020-2023 训练时 scaling 当家;2024 前后预训练边际递减(数据快用光、成本天文、收益变薄);2024 底起前沿急转向「推理时多花算力(长推理链/搜索/自我验证)→ 更准」,这条曲线新、陡、还同样平滑可外推(o1、DeepSeek-R1)。

关键 nuance:相乘不相争。能力天花板仍来自预训练(底子弱想再久也推不对),test-time compute 把底子榨出来;当下真正烧钱出差异的是用 RL 教模型高效花 test-time compute(reasoning RL)——一种新的训练时投入、回报在推理能力上。

做产品最该抓:成本结构变了——训练是一次性(capex),test-time compute 是每查询都付(opex)。但给了新旋钮:按 query 难度动态买准确率(简单短想、难题长想)。

self-consistency 为什么比单条 CoT 准,代价是什么?

本质是「对自己的多次采样做集成投票」。单条 CoT 是一条随机路径,中途一错就锁死。self-consistency 用较高温度采 N 条不同链、对最终答案投票取多数。洞察:通往正确的路径殊途同归,而错误各式各样互不一致——正确答案被多路汇聚、错误四散,取众数更可能对(=重复测量消噪,前提是每条对的概率>随机且错误多样)。

代价三笔:① N 倍算力/延迟(典型 5-40 条);② 只适用有离散答案可投票的任务(开放式生成不行);③ 治不了系统性错误(一致地同样错,投票只会更确信)。收益随 N 递减,大头在前 5-10 条。

把 LLM 评分器改成「先理由后打分」,怎么排版最稳?

可直接抄的模板:

你是严格的评审。务必"先逐条分析、最后打分",不许先给分再补理由。

# 评分维度(每维给锚点,别用空泛的1-10)
- 准确性(0-3): 0=有事实错误; 1=多处可疑; 2=基本正确; 3=完全正确且有依据
- 完整性(0-3): 0=答非所问; 1=漏关键点; 2=覆盖主要; 3=全面无遗漏
# 待评内容
<question>…</question>  <answer>…</answer>
# 输出(严格按序)
## 1. 逐条分析
- 准确性: <先主动找错/可疑,再判断>…
## 2. 主要缺陷  <列1-3个;没有写"无">
## 3. 评分(JSON,放最后) {"准确性":x,"完整性":y,"总分":t}

每个选择的理由:① 理由在分数前(否则理由是 post-hoc 圆场);② 维度拆开+0-3 锚点(压绝对分漂移);③ 先逼它找缺陷(对抗式,防谄媚刷分);④ 分数放最后、JSON 包(好解析、保证分数从分析算出);⑤ 显式"不因长短加减分"(堵长度偏好);⑥ 温度 0-0.3 求稳,要更准上 self-consistency;⑦ 别让被评答案看到 rubric。若分数仍不稳 → 从「打绝对分」升级成「两两排序哪个更好」(最稳)。

本课主源

读原典:Wei et al. — Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(2022)

延伸:Kojima et al. — Large Language Models are Zero-Shot Reasoners(「Let's think step by step」);Wang et al. — Self-Consistency

阶段四推进:RLHF(对齐)→ CoT(推理)。下一篇 P17 DPO:不训奖励模型、不跑 RL,直接用偏好数据对齐——更对得上「打分→改 prompt」自动调优环的直觉。

我是你的老师,随时提问。 比如:「test-time compute 和训练时 scaling,前沿现在更看重哪个?」「self-consistency 为什么比单条 CoT 准,代价是什么?」 「我的 LLM 评分器改成『先理由后打分』,具体怎么排版最稳?」——别带着模糊往下走。

参考:
Wei et al., Chain-of-Thought Prompting Elicits Reasoning in Large Language Models, 2022.