【AI工程师精讲】04:思维链:CoT 为什么有效,以及它什么时候在骗你

适合读者:写提示词的工程师、需要判断"这个任务该不该用 CoT"的人;以及被"推理过程看起来很合理,但答案是错的"坑过的人。

核心收获 :① CoT 生效的四层机制,从计算量、外部记忆、误差结构到训练分布;② 三类不适合 CoT 的任务,以及判断标准;③ 四个进阶变体与各自的适用边界;④ 一个必须警惕的陷阱------CoT 会撒谎,以及三种可操作的验证方法。


有一类实验曾经让很多人震惊:同一个模型、同一个问题,只把提问方式从"直接给答案"改成"让我们一步步思考",某些数学应用题的正确率能提升一大截。

更让人意外的是------这不需要训练、不需要改模型、不需要额外工具,只是加了一句话。

于是"思维链"(Chain-of-Thought,CoT)成了一个流行技巧,几乎出现在每一份提示词模板里。

但也有人发现,加上这句话之后,有些任务毫无变化,甚至更差------模型认真地写了一段推理,然而答案依然错,而且错得更有说服力。

这篇文章要讲清三件事:

  1. CoT 在机制上到底做了什么(为什么它有效)?
  2. 什么任务上它完全无效(什么时候别用)?
  3. 为什么"写出推理过程"不等于"推理是正确的"(它什么时候在骗你)?

第一部分:CoT 生效的四层机制

理解机制的意义在于:它让你能预测什么任务上有效,而不是靠试。

1.1 第一层:给了模型更多计算

这是最本质的一层。

自回归模型有一个硬约束:

生成多少 token,就做多少次前向计算。

它没法"在心里多想一会儿"。它的思考能力,直接等于它被允许写出来的 token 数量。

对比一下两种方式:

提问方式 输出 token 数 相当于
"答案是?" 几个人 一次极难的映射
"让我们一步步思考" 几百个 多次较容易的映射

CoT 的本质是:把"一次很难的映射"拆成"多次容易的映射"。

一个类比:让你心算三位数乘三位数,你会错;给你一张草稿纸写竖式,你就能算对。

模型的草稿纸,就是它自己生成的中间 token。

这一层解释还顺带回答了另一个问题:为什么"让模型多想"这件事,后来演化成了"测试时计算"(test-time compute)这条路。

推理模型并不是有了新的魔法,而是把"写草稿"这件事训练成了能力------它不再需要你在提示词里要求,而是默认就会先写一大段思考。

1.2 第二层:把中间结果变成外部记忆

第二层常被忽略,但工程价值很大。

注意力机制只看得到上下文里的内容------模型没有可写的内部变量。

它要"记住"上一步算出的结果,唯一可靠的办法是把这个结果写出来。

CoT 强制模型把每一步的中间结果落在文本里,比如:

复制代码
设总数为 x
先算出单价是 12 元
所以 3 件的价格是 36 元

后续步骤就能通过注意力读到"12 元"和"36 元"这些值。这相当于给模型接了一块外部工作记忆。

这一层解释了一个实用技巧的由来:

"要求列出关键中间量"往往比"要求一步步想"更有效。

因为真正的收益来自那些被写下来的、后续要用到的量------而不是"思考"这个动作本身。让模型写三段无关的感慨,和写三个关键数字,效果完全不同。

1.3 第三层:分解降低了单步难度

第三层是误差结构上的好处。

假设一个任务需要五次判断,每次判断的难度都很高:

  • 直接做:一次"五件事同时做对"的高难度映射;
  • 拆成五步:每一步都是"一件相对简单的事"。

单步难度降低,意味着每一步的正确率提高。

不过这里有个重要的边界,必须说清楚:

分解并不会自动纠错。

如果第一步就错了,后面每一步都建立在错误前提上,最终答案只会错得更"合理"------看起来很严谨,但基础是歪的。

这引出了后面第六部分要专门讲的那类失败模式。

1.4 第四层:训练数据里本来就有推理过程

第四层是关于分布的。

代码、解题步骤、教程、问答社区------这些训练语料里天然包含大量"先分析、再推导、最后给结论"的文本。

所以模型见过这种模式 ,你要求它照着写,它是在模仿一个它熟悉的分布,而不是在"启用"某种新能力。

这一层解释了一个现象:为什么不同模型的 CoT 效果差异明显?

模型类型 CoT 效果 原因
语料里推理文本多 收益大 分布熟悉,能顺着写下去
被训练成"短回答优先" 收益小,甚至发散 与训练目标冲突,强行 CoT 容易跑偏

所以,CoT 不是一个普适开关,而是一个和模型训练方式强相关的技巧。 换模型之后,原来调好的 CoT 提示词可能需要重新验证。

1.5 四层机制的小结

层次 机制 直接推论
计算层 输出 token 数 = 计算步数 需要推导的任务才受益
记忆层 中间结果写出来才能被复用 要求列关键中间量
结构层 分解降低单步难度 不自动纠错,前提错则全错
分布层 训练语料里有推理文本 效果与模型训练方式强相关

前两层解释了"为什么有效",后两层解释了"什么时候无效"。


第二部分:什么时候 CoT 完全没用

这是最需要记住的一节。三类任务上,CoT 基本是负收益。

2.1 第一类:纯知识检索型任务

问"某条款规定多少天""某函数的参数有几个""这个 API 的默认超时时间是多少"。

这类任务的答案是取出来 ,不是推出来。信息本身就在上下文或模型知识里。

加上推理步骤只会:

  • 增加成本(输出 token 成倍);
  • 引入错误(推理过程可能"想多了",把正确的记忆改坏)。

不会提高正确率。

2.2 第二类:模型能力本身不足的重推理任务

如果模型不具备 做某类推理的基础能力,CoT 会让它把每一个错误步骤都写出来。

后果是答案反而更不可信------因为错误被包装得更像样了。

CoT 放大的是已有能力,不是无中生有。

这个边界很重要:CoT 不是"解锁能力"的工具,而是"利用能力"的工具。

2.3 第三类:对延迟和成本敏感的高并发场景

这个后面第五部分会详细算账,先给结论:输出 token 会成倍增长,而输出通常比输入更贵、也更慢。

具体影响:

  • 首字延迟:因为要先生成一堆推理才给答案,用户等得更久;
  • 总耗时:成倍增长;
  • 成本:成倍增长。

在高并发客服、实时对话这类场景,CoT 的代价往往超过收益。

2.4 一句话判断标准

问自己:"这个任务需要推导,还是需要取用?"

需要推导,才考虑 CoT。

这句话可以直接用在架构评审里,比"看看效果"高效得多。


第三部分:四个进阶变体

基础 CoT 之上,有几个被反复验证有效的变体。它们分别解决不同的短板。

3.1 变体一:自洽性(Self-Consistency)

要解决的问题 :单条推理路径会被随机性影响。温度 > 0 时,同一个问题两次运行可能给出不同答案。

做法:采样多次(比如 5 次),取出现频率最高的答案。

代价与收益:

维度 变化
成本 成倍上升(采样 5 次就是 5 倍)
收益 在"有明确唯一答案"的任务上最明显

注意"有明确唯一答案"这个限定:选择题、数值计算、分类任务收益大;开放写作、创意类任务收益很小,因为答案本来就该多样。

3.2 变体二:由易到难(Least-to-Most)

要解决的问题:复杂问题直接做,容易在中途迷失。

做法:分两步------

  1. 先让模型把大问题拆成子问题列表;
  2. 再逐个解决,每个子问题的答案作为后续的输入。

额外的好处 :拆解结果可以人工检查 。很多时候你一看子问题列表,就能发现模型对问题的理解错了------这时候及时纠正,成本远低于等它算完再返工。

适合:可以清晰分解的复合问题(多步计算、多条件筛选、复杂规则判断)。

3.3 变体三:思维树 / 思维图

要解决的问题:一条路走到底,走进死胡同也不回头。

做法 :不沿单一路径走,而是探索多条路径并评估,选最好的继续。

代价:成本和复杂度都很高(路径数可能指数增长)。

适用:解空间大、容易走进死胡同的任务(搜索规划、需要试错的设计问题)。

实践建议 :一般只在离线场景用(批量处理、非实时任务)。在线高并发场景基本用不起。

3.4 变体四:用程序代替计算

要解决的问题:模型算不准。

做法 :让模型把推理转写成可执行的表达式或查询语句(SQL、Python 表达式、正则),交给工具算。

为什么这是最可靠的一招:它把"不确定的语言模型计算"变成了"确定的程序执行"。

适用:凡是"算得准"比"会推理"更重要的场景------金额计算、日期推算、数据统计、规则匹配。

3.5 选择的优先级

text 复制代码
能查     → 用检索(知识型任务)
能算     → 用工具(计算型任务)
真正需要推理的 → 才上 CoT 及其变体

这个顺序的价值在于:它把最不可靠的手段(语言模型推理)留给了最少的任务。

3.6 四个变体的对照

变体 解决什么 主要代价 适用场景
自洽性 单路径随机性 成本成倍 有唯一答案的任务
由易到难 复杂问题迷失 需要两轮交互 可清晰分解的复合问题
思维树/图 走进死胡同 成本与复杂度高 离线、解空间大的任务
用程序代替 算不准 需要工具支持 精确计算、规则匹配

第四部分:成本账,别只看效果

CoT 很有效,但它是用 token 换准确率。这笔账必须算清楚。

4.1 输出 token 的倍数关系

以一个问答任务为例(示意值):

方式 输出 token 量级 相对成本
直接回答 约 10 1×
加一句"一步步来" 约 300~800 30~60×
CoT + 自洽性(5 次采样) × 5 150~300×

注意这个数量级:不是涨了 20%,是涨了几十倍。

4.2 为什么输出 token 特别贵

因为输出是串行的------每一个 token 都依赖前一个,没法并行。

回顾前面讲过的预填充/解码分野:输入可以并行处理,输出必须一个一个来。 所以:

  • 成本上:输出 token 的单价通常显著高于输入;
  • 延迟上:输出 token 直接决定用户等待时间。

两个维度都在惩罚长输出。

4.3 一个实用的优化手法

如果你的 CoT 提示词让成本涨了三倍、效果只涨一点,先做任务分层:

  1. 按"需要推理 / 不需要推理"把请求分开,只对前者开 CoT;
  2. 压缩输出------不要求它写完整推理,只要求"列出三个关键中间量"。

第二招通常能拿到大部分收益,而成本只涨一点。 因为它保留了最有价值的那部分(外部记忆层),砍掉了冗长的叙述。

具体对比:

复制代码
要求:请一步步详细推理,展示你的完整思考过程。
  → 输出 600 token,其中可能只有 60 个是有用的中间量

要求:请在给出答案前,先列出三个关键中间量及其数值。
  → 输出 120 token,中间量全在

后者的"信息密度"高得多。


第五部分:必须警惕的陷阱------CoT 会"撒谎"

这一节是全篇最重要的一段。

模型写出来的推理过程,不一定是它得出答案的真实依据。

这是一个反直觉但对工程影响极大的事实。

5.1 三个被观察到的现象

现象一:结论先于理由。

模型可能先由某种内部倾向得出答案,再"补写"一段看起来合理的推理。

怎么发现? 如果推理里出现了错误的中间步骤,而最终答案依然正确------那说明这段推理并不是它真正的决策路径(因为按它写的推理,答案本该是错的)。

现象二:理由会被无关因素改变。

在提示里加入一些不相关的信息(比如"我更喜欢选项 A""请仔细考虑,这道题很重要"),模型的最终答案会改变。

但关键在于:它写出来的推理过程依然自洽,看不出被影响。

这说明推理文本的"解释力"是有限的------它是一段生成出来的文本,不是一份日志。

现象三:错误推理 + 正确答案并存。

这最能说明问题:如果推理真的有效,那错误推理不该导向正确答案。

反过来也一样:推理正确但答案错误(常见于最后一步的格式或汇总出错)。

5.2 两条工程结论

第一,不要用"推理过程看起来合理"来验证答案。

要独立校验:

校验方式 适合验证什么
用工具复核计算 数值、统计、日期
用检索核对事实 引用的条款、数据、出处
用规则校验格式 结构化输出、必填字段、取值范围

核心原则是:校验不应该依赖模型自己的输出。

第二,CoT 的价值在于提升准确率这个结果,而不是提供可解释性。

想拿它当审计依据,需要额外设计:

  • 强制引用来源(每个结论标注出处段落);
  • 要求列出每个结论对应的依据(让它把依据明确分开写);
  • 对关键结论做独立复核。

把 CoT 当成"提升正确率的手段",而不是"说明它为什么这么想"的解释,是使用它时最重要的心态。

5.3 三种可操作的验证方法

方法一:换措辞重问。

把同一个问题换一种说法再问一遍。

  • 如果答案漂移,而两次推理都自洽 → 说明推理的解释力有限,它更像是"生成出来的合理解释";
  • 如果答案稳定,推理也一致 → 说明这条路径比较可靠。

方法二:篡改前提。

把条件里的一个数改掉(比如把"3 件"改成"5 件"),看推理是否跟着变。

  • 如果推理跟着变、结论也对 → 说明它真的在用这个条件;
  • 如果结论变了但推理几乎照旧 → 说明这个条件可能压根没进入它的决策。

方法三:独立复核。

用工具或检索校验最终结论。这是工程上唯一的定心丸。

前两种是"探测",只有第三种是"保证"。


第六部分:CoT 与推理模型的关系

这两年出现了"推理模型"(长思维链模型),一个常见的问题是:这些模型出来了,CoT 提示词技巧是不是就过时了?

6.1 两者的关系

CoT 提示词 推理模型
本质 提示层技巧 把"先长思考再给答案"训练进了模型
触发方式 靠提示词引导 模型自带,默认就会
可控性 可以随时开关、调整 通常只能设"思考预算"

推理模型并没有推翻 CoT 的原理,而是把原理固化成了模型行为。

6.2 为什么工程侧的判断仍然必需

因为即使模型自带长思考,下面这些事仍然要你来决定:

  1. 该不该思考 ------ 查一个条款的编号,不需要思考;
  2. 思考多少 ------ 简单问题给足预算就是浪费;
  3. 哪些环节要外部校验 ------ 计算要验、引用要查;
  4. 什么时候关掉 ------ 高并发场景下思考成本可能无法接受。

换句话说:推理模型解决的是"能不能想",工程要解决的是"值不值得想"。

6.3 一个实用的分层策略

按任务难度路由:

text 复制代码
简单任务(分类、抽取、格式转换)      → 小模型,不开思考
中等任务(多步、需要一点推理)        → 大模型,短思考
困难任务(复杂推理、规划、数学)      → 推理模型,长思考 + 独立校验

这样既拿到了困难任务上的收益,又不会在简单任务上浪费成本。


常见误区

误区一:"CoT 能提升所有任务的表现。"

对知识型、简单分类、格式转换类任务,CoT 通常只增加成本。

先判断任务类型,再决定要不要开。

误区二:"推理过程对,答案就一定对。"

推理对但答案错,常见于最后一步的格式或汇总出错;反过来,推理错答案对也是存在的。

必须独立校验结论。

误区三:"CoT 是万能提示词,无脑加到系统提示里就行。"

在闲聊、客服、创作类场景里,强制"一步步思考"会让输出变得僵硬、冗长、失去自然感。

用户能明显感知到这种变化,而它带来的收益往往是零。

误区四:"推理模型出来了,CoT 提示词技巧就没用了。"

恰恰相反。推理模型是把"长链思考"训进了模型,但"该不该思考""思考多少""哪些环节要外部校验"这些判断,仍然要靠工程侧设计。

而且推理模型也有它自己的代价:输出 token 更多,成本和延迟更高。不是所有任务都值得。

误区五:"CoT 写出的推理过程可以用来做审计。"

这是最危险的一条。推理过程是生成的文本 ,不是运行日志。

想用它做审计,必须额外设计:强制引用来源、要求分别列出依据、对关键结论独立复核。否则你拿到的可能是一段"事后补写的合理解释"。

误区六:"步骤拆得越细越好。"

拆得过细有两个问题:

  • 乘积效应:步骤越多,"全对"的概率越低(前面讲过 pⁿ);
  • 成本上升:每一小步都要输出。

拆解的合理粒度是"每一步都足够简单,但步骤数不要爆炸"。

误区七:"加了 CoT 效果变差,说明 CoT 没用。"

也可能是这三种情况:

  • 模型不擅长这个分布(有些模型训练时偏短回答);
  • 任务本来不需要推导;
  • 提示词写得太长反而干扰了。

先排除这三种,再下结论。


实战问答

Q1:面试被问"CoT 为什么有效",怎么答得不像背书?

A:给两层就够。

第一层是计算层 :自回归模型生成多少 token 就做多少计算,CoT 相当于给它一张草稿纸,把一次难映射拆成多次易映射。

第二层是记忆层 :模型没有可写的内部变量,把中间结果写进上下文,才能被后续步骤读到。

最后补一句边界收尾:

它在需要推理的任务上有效,在只需要取用知识的任务上是纯成本。

这个"两层机制 + 一句边界"的结构,比背四条机制更有层次,因为它同时展示了机制理解和判断力。


Q2:我们的 CoT 提示词上线后,成本涨了三倍,效果只涨一点,怎么办?

A:分两步。

第一步,做任务分层:把请求按"需要推理 / 不需要推理"分开,只对前者开 CoT。

很多线上系统里,真正需要推理的请求可能只占 20%------剩下的 80% 白付了 CoT 的成本。

第二步,压缩输出:不要求它写完整推理,只要求"列出三个关键中间量"。

这一招通常能拿到大部分收益,而成本只涨一点------因为保留的是最有价值的外部记忆,砍掉的是叙述性内容。

如果这两步做完收益还是很小,那就说明这个任务本来就不需要 CoT。


Q3:怎么判断模型的推理过程是真的还是编的?

A:三个可操作的检查,从弱到强。

① 换措辞重问------如果答案漂移而推理都自洽,说明推理的解释力有限。

② 篡改前提 ------把条件改一个数,看推理是否跟着变。如果结论变了但推理照旧,那这个条件大概率没进入决策。

③ 独立复核------用工具或检索校验最终结论。

第三条是工程上唯一的定心丸。 前两条只能帮你"怀疑",第三条才能帮你"确认"。


Q4:CoT 和推理模型(长思维链模型)是什么关系?

A:

CoT 是提示层技巧,推理模型是把这种"先长思考再给答案"的行为训练进了模型。

前者靠提示词引导,后者是模型自带。

但工程上仍然需要你判断------哪些任务值得花这笔思考成本。 因为推理模型的输出 token 更多、延迟更高、成本更贵,在简单任务上用它就是浪费。


Q5:怎么控制步骤拆解的粒度?

A:给两个判据。

判据一:看乘积效应。 如果用"全对才算对"来评估,步骤数 n 越多,整体正确率越低(约等于单步正确率的 n 次方)。步骤数爆炸会直接吃掉收益。

判据二:看每一步是否都值得写出来。 中间结果的意义是"后续要用到"。如果某一步的结果后面根本不再引用,那就不该单独成步。

实践上的常用粒度是 3~7 步:足够分解难度,又不至于让乘积效应失控。


Q6:怎么判断一个任务到底该用 CoT 还是该加检索?

A :问一个更基础的问题:"这个任务的标准答案是唯一的吗?"

情形 判断
答案是唯一的、可验证的(数值、日期、条款号) 先看能不能检索或计算
答案需要组合多个信息点推出来 CoT 或 拆解
答案是开放的(写一段分析、给建议) 谨慎用 CoT,先给提纲

核心逻辑是:如果答案"存在"于某个地方,去找比去推更可靠;如果答案"不存在"、必须算出来,那才需要推理。


Q7:加了 CoT 之后,模型输出变得很啰嗦,产品经理不满意,怎么办?

A :这是个真实且常见的矛盾------CoT 在内部需要,但对用户来说是噪音。

三种处理方式:

  1. 结构化分离:让模型先输出推理(用特定标记包裹),再单独输出"给用户看的答案"。程序只取后者。
  2. 只要求中间量:用"列出三个关键中间量"替代"完整推理",输出短、信息密度高。
  3. 双模型分工:小模型直接回答,只在置信度低时调用带 CoT 的大模型。

第一种最常用:它既保留了 CoT 的收益(推理过程在上下文里),又让最终展示给用户的内容保持干净。


术语表

术语 含义
思维链(CoT) 要求模型在给出答案前先输出推理步骤的提示方法
自洽性(Self-Consistency) 多次采样取多数答案,用成本换稳定性
由易到难(Least-to-Most) 先拆子问题列表,再逐个求解
测试时计算 在推理阶段投入更多计算(更长的思考)以换取更高准确率
忠实性(Faithfulness) 模型给出的推理过程是否真实反映其得出答案的依据
外部工作记忆 把中间结果写入上下文,供后续步骤复用
推理模型 把长链思考训练进权重的模型,默认会先思考再回答

结语

把这篇压缩成三句话:

第一,CoT 的本质是"给模型一张草稿纸"。 它靠消耗更多 token 换来更多计算步数,并把中间结果变成可被后续步骤读到的工作记忆。这两层机制,解释了它为什么有效。

第二,它在需要推导的任务上收益显著,在需要取用知识的任务上纯属浪费。 判断标准只有一句:需要推导,还是需要取用? 而且在这个判断之外,还要算一笔账------输出 token 的成倍增长,意味着成本和延迟的成倍增长。

第三,也是最容易被忽略的一点:

它写出的推理过程并不总是可信的。

推理文本是生成出来的 ,不是运行日志。它可能结论先于理由,可能被无关信息影响而依然自洽,可能错误推理与正确答案并存。

所以结论必须独立校验。 把 CoT 当"提高正确率的手段",而不是"解释它为什么这么想的依据"------这个心态的转变,比任何提示词技巧都更重要。

而如果只允许你带走一个动作,那就是:下次看到一段漂亮的推理过程时,先别急着信,换一种措辞再问一遍。

相关推荐
Dfreedom.1 小时前
PCA与SVM在光谱定性分析中的实践与应用
人工智能·机器学习·支持向量机·svm·化学计量学·光谱数据分析
数智工坊1 小时前
视觉SLAM第10讲|后端优化(下):位姿图优化、滑动窗口与图优化工程实践
人工智能·深度学习·线性代数·矩阵
ASS-ASH1 小时前
从力学与机械原理角度深度剖析:尊界V800刹车踏板支架断裂事件的技术逻辑
人工智能·python·数据可视化·机械工程·汽车安全·物理仿真·制动系统
xhy_07071 小时前
AI 读了 .env,密钥会原样发给大模型吗?WES Code 的密钥打码(附实测)
人工智能·python·数据挖掘·flask·ai编程·wes code
吴佳浩1 小时前
单卡5090跑125B 大模型:从安装、验证到基准测试的完整操作教程
人工智能
宝桥南山1 小时前
.NET 11 - 尝试创建一下AGUIServer和AGUIClient(基于新版.NET SDK for AG-UI)
microsoft·ai·微软·c#·aigc·.net
数智工坊2 小时前
视觉SLAM第13讲|工程落地:双目视觉里程计系统架构设计与性能优化
人工智能·深度学习·线性代数·性能优化·矩阵·系统架构·机器人
newsxun2 小时前
校园餐全链条管理有了“实操手册” ——《学校食品安全与营养健康管理操作指南》在成都发布
大数据·人工智能
空堂与归2 小时前
GPT-6 智能界面上线,对话式 Agent 真没戏了?
人工智能·gpt·ai