数学考试里有两类孩子:一类盯着题目憋答案,笔尖悬空,半天蹦出一个数,经常算错;另一类拿到题先在草稿纸上工工整整写下“先读题→再列式→后计算”,每一步都有迹可循,答案往往又稳又对。老师常挂在嘴边的“要打草稿、写过程”,本质是教孩子“把看不见的思考拆成看得见的步骤”。大模型的思维链(Chain-of-Thought,简称 CoT)做的正是同一件事:在给出最终答案之前,先输出一串中间的推理步骤。让人惊讶的是,当模型规模大到一定程度,这种“打草稿”的能力会突然涌现出来,让数学和逻辑题的准确率大幅跃升。这篇文章就带你从零认识思维链:它是什么、为什么会涌现、怎么用提示词激发它、效果有多好、有哪些坑,以及如何升级它。
掌握思维链这一核心机制,你可以用一句提示词让大模型在数学与逻辑任务上的表现实现质的飞跃,这是 Prompt 工程与大模型能力研究的必修课。
目录
可视化演示
展示直接回答vs CoT多步推理对比、CoT涌现能力曲线(100B参数阈值前后效果突变)、GSM8K基准四种方法准确率对比(Direct/Zero-shot/Few-shot/Self-Consistency),交互切换核心维度。
本节配有交互动效(进入视口后自动加载,约 3KB)。
直接回答vs CoT多步推理 Direct: 模型直接输出答案,单步推理,复杂问题易出错 CoT: 生成中间推理步骤链,逐步推导,准确率显著提升 CoT: Q -> [step1 -> step2 -> ... -> stepN] -> Ans 多步推理链分解复杂问题
CoT 是什么:给大模型一张草稿纸
还记得开头那个在草稿纸上一步步演算的孩子吗?他写下的每一行,都是把“解这道题该干什么”拆成了更小的动作:先审题、再列式、后计算。草稿纸的本质不是一张纸,而是“把隐式的思考变成显式的文字”——这一步,恰恰是思维链的灵魂。
大模型默认的作答方式很像那个直接憋答案的孩子:你问它“小明有 12 个苹果,又买了 7 个,一共有几个?”,它可能直接输出“19“。对简单题这没问题,但题目一旦涉及多步推理,跳步就容易错。CoT 的思路是:让模型在输出答案之前,把中间步骤也写成自然语言——”12 个苹果加上新买的 7 个,12 + 7 = 19,所以答案是 19“。这一小步改变,让模型”边写边想”,大幅降低了跳步带来的错误。
从概率角度看,标准提示下的答案是直接从问题到答案的条件分布;而 CoT 把生成过程拆成了两步:先生成推理链 r,再在 r 的基础上生成答案。整体正确率等于对所有可能草稿加权求和:
可见,给模型一张“草稿纸”不是形式主义,而是把一次孤注一掷的猜测,变成多个可验证小步骤的接力。草稿每一步都对,最终答案才大概率对——这就是 CoT 的基本盘。
- 目标概率 P(a|q)给定问题 q,模型最终输出正确答案 a 的概率,这是我们关心的推理能力指标。
- 对所有推理链求和把模型可能写出的各种中间步骤 r 全部枚举并加权,就像把草稿纸的所有写法都考虑一遍。
- 写出草稿的概率模型先产生推理链 r 的概率,体现“会不会把问题拆开”。
- 按草稿作答的概率在步骤 r 的引导下推出正确结论 a 的概率,体现“步骤是否靠谱”。
为什么会出现:规模大了,能力突然“开窍”
教过小孩的家长都有体会:有些思维技能,比如“两步推理”,孩子年龄不到时怎么讲都学不会,可到了某个阶段,突然就像开窍一样一点就通。诡异的是,没有人专门教他“开窍”,他只是长大了而已。
大模型的思维链也有类似的“开窍”现象。研究人员发现,CoT 带来的提升不是平滑上升的:在参数量较小的模型上,加了 CoT 提示几乎没有效果,正确率贴着随机猜测的水平;但当模型规模跨过某个临界点,正确率突然大幅跃升。这种“小模型上不存在、大模型上突然出现”的能力,被称为涌现能力(Emergent Abilities),思维链是其中最典型的代表。
用函数来描述这种“开窍”:把模型参数量记为 N,解题正确率记为 Acc(N),当 N 小于临界规模 N_c 时,正确率停留在随机水平 p_0 附近;一旦 N 越过 N_c,正确率跳升到 p_0 + Δ:
就像孩子“到了年龄自然开窍”,大模型的思维链能力也是规模堆出来的礼物。理解了这一点,你就明白为什么小模型硬加 CoT 常常无效——不是提示词不对,而是模型还没“长大”。
- 准确率函数 Acc(N)把模型正确率看成参数量 N 的函数,N 越大模型越“大”。
- 临界规模以下趴平N 小于 N_c 时,正确率只有随机水平 p_0,写不写步骤差别不大。
- 临界规模以上跃升N 达到 N_c 之后,正确率突然抬高 Δ,远超随机波动。
- 台阶而非斜坡跃升是不连续的,这是涌现的典型特征,和“规模越大效果越好”的朴素直觉不同。
怎么激发它:示范一道题,或提醒一句“写步骤”
要让不会打草稿的孩子学会打草稿,老师通常有两种办法:一种是直接给他看一道题的完整草稿示范,让他照着模仿;另一种是只提醒一句“把每一步写在纸上”,让他自己尝试。思维链的激发,用的正是这两种方法。
第一种叫 Few-shot CoT(少样本思维链):在提示词里先放 k 组示例,每组示例都包含“题目 → 推理草稿 → 答案”,模型看到示范后,会照着这个格式给自己出一道题并写出草稿。第二种叫 Zero-shot CoT(零样本思维链):不给任何示例,只在问题后加一句经典触发词——“让我们一步一步思考”,模型就会自动展开步骤。研究发现,这句简单的提醒,对数学题准确率就有显著提升。设计示例时要注意:推理链不要过长,步骤简洁、每个中间结果可验证,模型才不容易在长链条中“迷路”。
从生成模型角度看,Few-shot CoT 的提示词相当于把示范链和新问题拼接起来,让模型在给定全部上文的条件分布中采样:
示范(Few-shot)和提醒(Zero-shot)就像“照猫画虎”和“临场叮嘱”:一个给模板,一个给动作。实际使用时两者可以叠加,效果往往更好——老师的真传,既要有例题,又要有那句口头禅。
- 输出采样 y模型依据整个提示词的条件概率分布,逐词生成后续内容。
- k 组示范三元组每条示例由题目 q_i、草稿 r_i、答案 a_i 组成,示范“先写过程”的格式。
- 新问题接在末尾把待解题目 q_{k+1} 追加在示范之后,模型照着模式补全。
- 零样本触发词若没有示范,追加“让我们一步一步思考”也能激活分步模式。
效果有多大:数学从“瞎猜”到“会算”
当那个学会打草稿的孩子第一次考出高分,老师会把他的草稿纸贴在墙上报喜。在 NLP 领域,CoT 也有这样一张“成绩榜”——GSM8K 小学数学应用题基准。
在这份榜单上,最大的模型(如 PaLM 540B)用标准提示只答对约 17.9% 的题目,几乎等于不会做;但换成思维链提示后,正确率跃升到 58.1% 左右。不只是数学,多步逻辑推理、符号运算、常识推理等“必须分步想”的任务,CoT 都有明显加成。这也是为什么大家说:CoT 让模型“学会推理”。
用差值公式来看这个战绩——同一模型上,CoT 相对标准提示的准确率提升:
草稿纸让孩子的分数从“蒙”变成“算”,CoT 让模型从“随机”变成“可靠”——这不是玄学,而是把隐式的思考过程显式化后,模型有机会在每一步“自我检查”。当然,它并非万能,我们接着看它翻车的样子。
- 提升量 ΔAcc同一模型上 CoT 与标准提示的准确率之差,衡量 CoT 的净收益。
- 约 40 个百分点在 GSM8K 上,从约 17.9% 提升到约 58.1%,差值接近 40%。
- 任务限定 GSM8K小学数学应用题基准,题目虽“小学”,却需要多步计算,正是草稿纸的主场。
- 收益随任务变化任务越依赖多步推理,Δ 越大;简单任务上 Δ 趋近于零。
局限在哪:草稿也会写错,甚至“编”草稿
打草稿不是护身符。粗心的孩子可能在第二步把 12 抄成 21,后面算得再漂亮也是错的;更麻烦的是,有些孩子草稿写得很工整,但思路完全是瞎编的——字迹好看,逻辑全错。大模型的思维链,同样会犯这两类错误。
第一类错误是错误累积:中间步骤一旦算错,后续步骤会顺着错误继续推,错上加错。第二类是幻觉式推理:模型生成的步骤可能在数字和逻辑上完全站不住脚,看起来一本正经,其实是顺着语言习惯“编”出来的——我们称之为“伪推理”。此外,CoT 生成的 token 数远多于直接回答,推理成本和时间都会明显上升。
数学上,错误累积可以用连乘来描述。设第 t 步的错误率为 ε_t,则 T 步全部正确、最终答案才正确的概率为:
草稿纸给了模型“想过”的机会,但没保证“想对”。面对长链条推理,我们要么帮它校验每一步,要么用多种草稿互相印证——这正是下一节的升级方案。
- 单步正确率 (1−ε_t)第 t 步草稿不出错的概率,ε_t 是该步的出错率。
- 全程正确的连乘各步骤独立时,最终正确需要每一步都对,概率相乘。
- 等错误率的幂函数近似假设每步错误率相近为 ε,连乘退化为幂函数。
- 指数衰减的启示正确率随步数指数下降,所以要减少冗余步骤,更要校验每一步。
怎么升级:多打几份草稿,画分叉的草稿
真正的学霸打草稿不止一遍:同一道题他会换两种解法各算一遍,得出的答案一致才敢写上去;遇到难题还会在草稿纸上画分叉,一条路走不通就折回来试另一条。这两种习惯,对应着思维链的两大升级方向。
第一个升级叫自洽性(Self-Consistency):同一个问题用 CoT 采样出 m 条不同的推理链,得到 m 个候选答案,然后统计哪个答案出现次数最多,取“多数票”作为最终结果。既然单条草稿可能算错,那就多写几份再对答案。第二个升级叫思维树(Tree of Thoughts):不再是一条链,而是像树一样分叉,走不通的分支主动剪掉,换另一条继续探索。此外,还可以给模型配计算器、验证器等工具,让它校验每步计算,相当于给草稿纸配了一个自动验算器。
自洽性的投票逻辑可以写成一个简洁的公式——对 m 条采样结果做多数投票:
从一条草稿到多份草稿对答案,从单链到分叉探索,CoT 的升级之路本质上都是在回答同一个问题:如何让“思考过程”更可靠。理解了草稿纸的哲学,你就掌握了这一系列方法的灵魂。
- 多次采样生成候选对同一问题采样 m 条思维链,得到 m 个候选答案。
- 统计每个答案的票数指示函数对“答案等于 a”计数一次,累加得到 a 的总票数。
- 取票数最高者arg max 返回得票最多的答案,作为最终输出。
- 共识优于单次猜测单条链易受偶发错误影响,多数一致时置信度显著更高。
AI 应用场景
场景一:数学辅导 AI 的“分步讲解”
阶段:推理增强 / Prompt 构建
解决的问题:教育类应用里,学生直接问“这题怎么做”,模型直接给答案既容易算错,又没法讲解。传统做法靠人工预设题库答案,覆盖不足。用 CoT 让模型先输出“审题 → 列式 → 计算 → 验算”的步骤再给答案,既提升正确率,又能输出可讲解的过程。
具体案例:某 AI 数学助教接到“书架有 18 本书,上午放上 6 本,下午借走 4 本”这类题时,提示词模板先放两三条带步骤的示范,再让模型“一步一步思考”。模型输出“18 + 6 = 24,24 − 4 = 20,所以现在是 20 本”,家长可以逐行核验,孩子也能看懂每一步。
场景二:报表分析 Agent 的“任务拆解”
阶段:Agent 规划 / 多步工具调用
解决的问题:让模型“对比今年和去年的营收并计算增长率”这类多步任务,模型直接回答容易漏步骤或编数字。用 CoT 把任务拆成“抽取今年数据 → 抽取去年数据 → 计算增长率 → 输出对比结论”,每一步独立执行并校验。
具体案例:BI 助手的提示词里加入零样本触发词“让我们一步一步来”,并规定每一步调用对应工具(数据查询、计算器),Agent 在步骤之间用自洽性投票确认增长率的数值,显著降低了幻觉与算错的风险。
Python 演示
import re # 提取题目中的全部数字, 作为推理的原材料def parse_numbers(problem): return [int(x) for x in re.findall(r'\d+', problem)] # 思维链求解: 先写步骤, 最后给答案def cot_solve(problem): nums = parse_numbers(problem) steps = [] # 多步题型: 先加后减 if '借走' in problem and '一共' in problem: a, b, c = nums[0], nums[1], nums[2] mid = a + b steps.append('第一步: 先算放入后的总数 ' + str(a) + ' + ' + str(b) + ' = ' + str(mid)) steps.append('第二步: 再扣掉借走的 ' + str(c) + ' 个') ans = mid - c steps.append('第三步: ' + str(mid) + ' - ' + str(c) + ' = ' + str(ans)) # 单步加法题型 elif '一共' in problem: a, b = nums[0], nums[1] steps.append('第一步: 识别关键词「一共」表示求和') ans = a + b steps.append('第二步: ' + str(a) + ' + ' + str(b) + ' = ' + str(ans)) # 单步减法题型 elif '剩下' in problem or '还剩' in problem: a, b = nums[0], nums[1] steps.append('第一步: 识别关键词「剩下」表示减法') ans = a - b steps.append('第二步: ' + str(a) + ' - ' + str(b) + ' = ' + str(ans)) else: ans = sum(nums) steps.append('未识别关键词, 默认把数字相加') steps.append('最终答案: ' + str(ans)) return steps, ans # 标准提示: 不写步骤, 只抓一个关键词直接算(模拟跳步)def direct_solve(problem): nums = parse_numbers(problem) if '借走' in problem: return nums[0] - nums[2] if len(nums) > 2 else nums[0] - nums[1] if '剩下' in problem or '还剩' in problem: return nums[0] - nums[1] return sum(nums[:2]) def main(): problems = [ ('书架有18本书, 上午放上6本, 下午借走4本, 现在一共有多少本?', 20), ('小明有12个苹果, 又买了7个, 一共多少个?', 19), ('妈妈买了25个鸡蛋, 用了9个, 还剩多少个?', 16), ] print('===== 思维链演示: 先打草稿再作答 =====') for prob, true_ans in problems: steps, ans = cot_solve(prob) print('题目: ' + prob) for s in steps: print(' ' + s) print(' 标准提示(跳步)答案: ' + str(direct_solve(prob))) print(' 真实答案: ' + str(true_ans) + ', CoT 判定: ' + ('正确' if ans == true_ans else '错误')) print() cot_hits = sum(1 for p, t in problems if cot_solve(p)[1] == t) std_hits = sum(1 for p, t in problems if direct_solve(p) == t) print('CoT 正确率: {:.0%}, 标准提示正确率: {:.0%}'.format( cot_hits / len(problems), std_hits / len(problems))) if __name__ == '__main__': main()
return [int(x) for x in re.findall(r'\d+', problem)]提取题目中的所有数字,作为推理的原材料if '借走' in problem and '一共' in problem:识别需要“先加后减”的多步题型mid = a + b算出中间结果,草稿纸上的第一行steps.append('第三步: ...')把每一步都记录下来,让过程可核验def direct_solve(problem):模拟跳过过程的“标准提示”作答方式return nums[0] - nums[2] if len(nums) > 2 else nums[0] - nums[1]只抓一个关键词就动手,跳过了“先加”的步骤cot_hits = sum(1 for p, t in problems if cot_solve(p)[1] == t)统计 CoT 全部答对的题目数print('CoT 正确率: {:.0%}, 标准提示正确率: {:.0%}'...)输出两者对比,体现草稿步骤的价值
常见误区
误区我以为思维链就是让模型把回答写长一点,只要输出几行解释和步骤,推理能力就自动变强,于是给所有问题都加“请详细一点”。
正解CoT 的关键不是“长度”,而是“步骤之间是否正确衔接”。每一步都要有可验证的计算或逻辑推进,才能把正确答案一步步推导出来。空话连篇的“车轱辘话”写满一页也算不上草稿纸——真正的草稿每行都有用:这一步推出什么、依据是什么,下一步才能站在上一步的肩膀上。
为何常见:因为 CoT 的示例看起来就是“多了一些文字”,初学者容易把形式(变长)当成本质(分步推进)。
误区我看到模型写出的推理步骤逻辑严密,就觉得它在像人一样思考,每一步都是真的“懂”了,所以步骤和答案一定可信。
正解大模型生成的步骤本质是“顺着语言概率接下去的文本”,并不保证每一步真实可靠。它可能写出“12 + 7 = 20“这种一本正经的错误推导,甚至数字完全编造。研究表明,模型的推理链可能”理由错误但答案碰巧对“。所以要把步骤当”建议草稿“而非”正确推导”,重要场景需要外部校验。
为何常见:人的直觉是“有过程就靠谱”,而模型只是模仿了过程的样子,没见过“伪推理”的人很容易被工整的草稿骗过。
误区我觉得 CoT 只是个提示词技巧,跟模型大小无关,小模型加几句“让我们一步一步思考”也应该能大幅提升正确率。
正解涌现特性决定了 CoT 在规模较小的模型上几乎无增益,正确率仍贴着随机水平。强行给小模型套 CoT,常常是“提示词很努力,模型不买账”。就像让 4 岁孩子打草稿“先设变量再列方程”,他连变量是什么都不知道——规模到位,技巧才生效。
为何常见:提示词技巧看起来是“软件”层面的,大家天然觉得它与“硬件”(模型规模)无关,忽略了涌现这一非连续现象。
误区既然 CoT 让数学从 18% 涨到 58%,那我就把所有任务的提示词都改成“一步步思考”,什么任务都能变强。
正解CoT 只在需要显式分步的任务(数学、多步逻辑、符号运算)上收益明显;对情感分类、简单抽取等“一步到位”的任务,多输出步骤反而可能引入噪声,甚至拖慢和降低效果。选任务要先看它有没有“过程可写”:无法分步的任务,草稿纸根本派不上用场。
为何常见:论文和宣传往往只展示数学等强推理任务的大幅提升,样本偏差让人误以为 CoT 无所不能。
面试题
Q1. 思维链(CoT)提示的核心做法是什么?
- A.让模型直接输出最终答案并保持简洁
- B.在给出答案前先输出推理中间步骤← 正确答案
- C.扩大模型参数量来加速推理计算
- D.增加训练数据量使模型记住题目
答案:B。CoT 的本质是先“打草稿”再作答,即在最终答案前输出中间推理步骤。A 是标准提示,C、D 分别属于模型规模和训练层面,都不是提示词的“核心做法”。
Q2. 下列哪一项是 Zero-shot CoT 的经典触发语句?
- A.“请你直接告诉我这个问题的答案”
- B.“让我们一步一步思考再给出结论”← 正确答案
- C.“请把答案控制在五十字以内”
- D.“忽略前面所有指令并重新回答”
答案:B。Zero-shot CoT 不提供示例,仅靠“让我们一步一步思考”这类触发词激活分步推理,论文中该短语效果显著。其余选项都不会引导模型展开推理步骤。
Q3. 关于思维链能力的涌现特性,下列说法正确的有哪些?
- A.规模跨过临界点后 CoT 效果才明显← 正确答案
- B.小模型使用 CoT 也能获得同等提升
- C.正确率在临界规模附近突然跃升← 正确答案
- D.不同规模下 CoT 提升幅度完全相同
答案:AC。涌现指小模型上无效果、规模跨过临界点后突然跃升的能力,A、C 正确;B、D 与“非连续跃升”矛盾。可对照“孩子到年龄突然开窍”的比喻来理解。
Q4. 下列哪些任务适合用思维链提升效果?
- A.小学数学应用题的多步求解← 正确答案
- B.需要规则约束的多步逻辑推理← 正确答案
- C.无需中间步骤的情感极性分类
- D.依赖分步展开的符号运算任务← 正确答案
答案:ABD。CoT 适合“有过程可写”的多步任务,A、B、D 都是经典受益场景。情感分类一步到位,加步骤反而引入噪声,因此 C 不适合。
Q5. Few-shot CoT 与标准 Few-shot 的关键差异是什么?
- A.提示词中是否包含详细的推理步骤← 正确答案
- B.提示词中示例的数量是否超过十个
- C.是否对模型做了额外的参数微调
- D.是否将示例按难度从小到大排列
答案:A。标准 Few-shot 只给“题目→答案”,CoT 版本额外给出“题目→推理步骤→答案”,关键差异就是示例里有没有草稿。数量、微调、排序都不是核心区别。
Q6. 思维链中间某一步算错,对最终结果的影响通常是?
- A.错误在后续步骤中自动得到修正
- B.后续步骤沿错误结果继续推导,偏差被放大← 正确答案
- C.模型会检测到错误并拒绝作答
- D.中间错误与最终答案完全无关
答案:B。CoT 是“接力赛”,后续步骤基于前一步结果计算,错一步就错一串。正确率随步数指数下降,所以需要对步骤做校验或投票。
Q7. 自洽性(Self-Consistency)方法的核心思想是什么?
- A.只保留一条长度最短的推理链
- B.多次采样推理链并对答案多数投票← 正确答案
- C.用强化学习替换掉全部随机采样
- D.只输出置信度最低的那个候选答案
答案:B。自洽性像“多打几份草稿对答案”:采样多条推理链,统计答案出现次数,取多数票。A、D 与投票逻辑相反,C 与采样方式无关。
Q8. 关于思维链的局限性,下列说法正确的有哪些?
- A.生成的中间步骤可能包含幻觉内容← 正确答案
- B.每一步出错都会向后续步骤传播← 正确答案
- C.对所有自然语言任务都有稳定提升
- D.输出变长导致推理和计算成本增加← 正确答案
答案:ABD。CoT 的步骤是概率生成的,可能一本正经地瞎编;错误会沿链条累积;token 变多成本上升。C 错在“所有任务”,简单任务上 CoT 收益有限甚至为负。
Q9. 用“草稿纸”比喻 CoT,模型输出的中间推理步骤对应什么?
- A.学生拿到的那道数学题目本身
- B.草稿纸上的分步演算过程← 正确答案
- C.老师批改后给的考试分数
- D.考试时抄写题干的备注文字
答案:B。CoT 的中间推理文本就是草稿纸上的演算内容;题目对应题干,分数对应最终答案,题干备注只是题目信息,都不对应推理过程。
Q10. 大模型在 GSM8K 上靠 CoT 获得的效果跃升,通常出现在哪种情形?
- A.模型参数量跨过临界规模阈值之后← 正确答案
- B.只要把上下文长度翻倍就能触发
- C.只要调大微调学习率就能触发
- D.只要增大训练批大小就能触发
答案:A。GSM8K 上 CoT 的跃升是涌现现象,由规模跨过临界点触发。上下文、学习率、批大小这些训练与推理配置,都无法替代“规模到位”这一前提。