AI思维链折腾手记

数学题直接给答案往往是对的,追问「怎么推出来的」就开始胡编步骤。复杂业务规则也一样:模型跳结论,中间逻辑经不起追问。思维链(Chain-of-Thought)逼它把步骤写出来,推理过程可见,多步问题出错率会降。

但「Let’s think step by step」不等于真思考——模型也会生成看起来像推理、实则没逻辑的废话。这篇记项目里怎么加 CoT、怎么验它是不是在演。

问题的本质

先看一个简单的例子。

问:如果一个数字是 2 的倍数,又比 5 大但比 10 小,这个数字可能是几?

模型直接答:可能是 6、8。

答案没问题。但如果问它是怎么推出来的,它可能会说:2 的倍数就是 6 和 8,它们都在 5 到 10 之间。

这就是典型的"答案对、推理错"。它记住了"6、8 是 2 的倍数"和"5 < 6,8 < 10",但这两个条件被硬拼在一起,逻辑链是断的。

思维链要解决的,就是这个问题:让模型把中间的推理步骤显式地写出来,而不是直接跳到答案。好处有两个:

  1. 推理过程可见,能验证模型是否真的理解
  2. 复杂问题时,分步骤思考确实比"一步到位"更不容易出错

但前提是,模型真的会"思考",而不会为了满足 prompt 的要求而生成一些看起来像推理、实则没有逻辑的内容。

什么是思维链

从技术上讲,思维链是一种 prompting 策略。你不在 prompt 里直接问答案,而是要求模型"逐步思考"或者"分步骤解释"。

典型写法:

请逐步思考并回答:[问题]

或者更具体一点:

请按以下步骤思考:
1. 理解题目在问什么
2. 列出已知条件
3. 逐步推理
4. 得出答案并验证

核心思想很简单:把"求答案"这个任务,拆成"求推理链"和"从推理链提取答案"两个部分。

实践中如何使用

实际项目里,CoT 的使用场景其实很窄。我自己的经验是,它主要在两类任务上明显有效。

第一类:需要分步骤推理的任务

比如数学题、逻辑推理、代码调试、数据分析。

一个真实例子:让模型帮我看一段日志,找出为什么某个接口返回 500 错误。

不用 CoT 时,它可能会直接说:“是因为数据库连接超时” —— 这个答案可能是对的,也可能是蒙的。

加上 CoT 要求逐步分析后,它可能会先看异常堆栈,再确认数据库连接情况,最后给出结论。这个过程是可见的,我能判断每一步是否合理。

第二类:需要明确展示"为什么"的任务

比如解释一个决策、给出一个建议、写一个代码改动说明。

这些场景里,用户不是只想要结果,还要理解"为什么是这个结果"。CoT 能强制模型把理由写清楚。

实践写法

项目里,我通常这样写 CoT prompt:

请按以下步骤分析 [问题]:

1. 理解问题:先用自己的话描述你理解的问题是什么
2. 列出条件:从 [给定信息] 中提取关键条件
3. 逐步推理:按逻辑顺序进行推理,每一步都要基于前面的结果
4. 验证结论:检查结论是否与所有条件一致
5. 给出答案:最终答案是什么

注意:不要跳过步骤,每个步骤都要明确写出来。

重点是"不要跳过步骤" —— 这一句是关键。模型容易在熟悉的任务上"偷懒",直接跳到答案。

踩过的坑

实际用下来,CoT 并不是万能药。下面这几个坑比较常见。

坑一:推理过程看着像,实际不是

模型很擅长生成"看起来像推理"的文本,但逻辑链可能是假的。

比如我遇到过这样的推理:

1. 数字是 2 的倍数
2. 所以数字是 6
3. 6 在 5 和 10 之间
4. 所以答案可能是 6

它写出了步骤,但第一步到第二步之间没有逻辑 —— 为什么是 6,而不是 4 或 8?这一步是空的。

解决办法是要求模型在每一步推理时,显式说明"为什么能得到这一步"。比如:

每一步推理都要说明:
- 基于什么信息
- 做了什么推断
- 为什么这个推断是合理的

坑二:过度推理,把简单问题变复杂

不是所有问题都需要分步骤。问"北京是中国的首都吗",模型如果还要列出一堆推理步骤,就有点多余了。

过度推理的问题有两个:

  1. 费 token —— 简单问题要花更多 token
  2. 增加错误机会 —— 步骤多了,哪一步出错就会影响后面

我的做法是:在 prompt 里加一个判断 —— 如果问题可以直接回答,就不要强行分步骤。

如果问题很简单,可以直接给出答案和理由,不需要分步骤。
如果问题需要多步推理,请逐步思考。

坑三:模型在陌生任务上"假装推理"

如果任务超出了模型的能力范围,它可能会生成一段看起来很专业的推理,但内容全是胡编的。

比如让它分析一个它根本不理解的领域里的一个问题,它会写出一大堆术语和步骤,但每一步都没有实际内容。

这种情况下,CoT 反而会掩盖"模型不会这个问题"的事实,因为它看起来在认真思考。

所以 CoT 的前提是:模型要有能力解决这个任务。CoT 只是把能力"摊开"来看,不是凭空创造能力。

实际效果

在我试过的几个场景里,CoT 的效果差异挺大的。

有效的场景

  1. 代码调试:让模型逐步分析代码、定位问题、给出修复建议,效果明显比直接问"这段代码有什么问题"好。因为推理过程是可见的,我能判断它的定位是否合理。

  2. 数学和逻辑题:只要题目在模型能力范围内,分步骤推理确实能提高准确率。它避免了"直接跳到答案"时的胡乱猜测。

  3. 数据分析:让模型逐步看数据、提取特征、给出结论,比直接给"结论 + 理由"更可靠。

没什么用的场景

  1. 知识问答:比如问"XX 是谁"这种纯粹知识检索的问题,CoT 几乎没有帮助,反而费 token。

  2. 创意生成:比如写文案、生成创意,CoT 反而会限制模型。因为它强制了一个线性结构,但创意往往不是线性推出来的。

  3. 简单任务:比如"这个代码能运行吗"这种一眼能看出的问题,分步骤推理纯属多余。

还要注意的几个问题

1. CoT 的推理质量取决于 prompt 设计

不是所有"逐步思考"的 prompt 都有效。如果 prompt 只说"逐步思考",模型可能还是会跳步骤。

需要更具体的结构要求,比如"列出 3-5 个步骤"、“每步不超过两句话"这类约束。

2. 推理长度不等于推理质量

模型可以写出很长的推理链,但核心逻辑可能还是错的。

判断推理质量,重点是看"每一步之间的逻辑是否合理”,而不是"步骤有多少"。

3. CoT 不是让模型"变聪明"

一个常见的误解是:用了 CoT,模型就能解决原本不会的问题。

实际上,CoT 只是把模型"本来就会"的东西摊开来看。如果模型本身不会某个任务,CoT 不会让它突然会做。

4. 需要在"推理可见"和"效率"之间权衡

CoT 的代价是更多 token 和更高延迟。在一些实时性要求高的场景里,可能需要权衡。

我的做法是:在"关键任务"上用 CoT,在"批量任务"上不用。比如让模型帮我调试代码,我会要求它分步骤;让它批量生成一些简单的说明,我就不用 CoT。

推理链的典型结构

如果要在项目里标准化 CoT 的使用,一个通用的推理结构可能是这样的:

graph TD A[理解问题] --> B[提取关键信息] B --> C[分步骤推理] C --> D[验证结论] D --> E[给出最终答案] E --> F{结论是否合理} F -->|是| G[输出结果] F -->|否| C

重点是每一步都要有明确的输入和输出,而不是"感觉对了就跳到下一步"。

小结

AI 思维链不是魔法,它只是一个让推理过程可见的 prompting 策略。它在需要分步骤推理的任务上确实有效,但不是所有场景都适合用。

实践中的几个要点:

  1. 只在真正需要推理的任务上用 CoT,简单问题直接回答即可
  2. Prompt 要足够具体,不能只说"逐步思考",要给出明确的结构要求
  3. 关注推理链的质量,不是长度 —— 每一步之间的逻辑是否合理更重要
  4. CoT 不会让模型变聪明,它只是把"本来就会"的东西摊开来看
  5. 在推理可见和效率之间权衡,不要在批量任务上滥用 CoT

从工程角度看,CoT 的核心价值是"可验证性" —— 它让我们能看到模型的推理过程,而不是只看到一个黑箱输出。这对需要解释、调试或评估的任务来说,是关键。

但从实际使用角度看,它的适用场景其实有限。很多任务不需要分步骤推理,或者即使推理了,效果也不会明显更好。

所以,CoT 是一个有用的工具,但它只是工具箱里的一个工具,不是万能钥匙。用对地方,它能带来明显的价值;用错地方,它只会增加成本和复杂度。

最后一点感受:CoT 让 AI 更像"会思考的人",而不是"只会答案的机器"。这对人机协作是有意义的 —— 当我能看到推理过程时,我更容易判断是否信任它的答案,也更容易给出反馈让它改进。

这可能才是 CoT 的真正价值所在:不只是提升准确率,而是让 AI 的"思维"变得可见、可讨论、可改进。这对于长期的人机协作,可能比短期的准确率提升更重要。

版权声明: 本文首发于 指尖魔法屋-AI思维链折腾手记https://blog.thinkmoon.cn/post/358-ai-chain-of-thought-answer-reasoning-practice/) 转载或引用必须申明原指尖魔法屋来源及源地址!