4、思维链(Chain-of-Thought):什么是CoT、如何引导模型逐步推理、Few-shot CoT示例

说实话,我第一次接触思维链这个概念时,心里想的是:这不就是我们平时解题的步骤吗?后来在项目中用多了才发现,这里面门道还挺深。

思维链,英文叫 Chain-of-Thought,简称 CoT。说白了,就是让模型把思考过程一步步写出来,而不是直接给答案。你想想看,我们人类解决复杂问题时,是不是也会在草稿纸上写写画画?CoT 干的就是这个事。

为什么需要 CoT?

直接问模型「小明有 5 个苹果,给了小红 2 个,又买了 3 个,现在有几个?」——模型可能直接输出 6。但它是真的算出来的,还是蒙的?

我遇到过这种情况:模型给出的答案是对的,但推理过程完全离谱。这在生产环境里很危险。你想想,如果它算错了,你连排查的线索都没有。

CoT 的核心价值在于:让推理过程可见、可追踪、可纠错

一句话总结:CoT 不是让模型更聪明,而是让模型把「聪明」的过程写出来。

如何引导模型逐步推理

引导模型做 CoT,其实就两招:指令式示例式

1. 指令式 CoT

直接在 prompt 里加一句「请逐步推理」或「让我们一步一步思考」。简单粗暴,但有效。

用户:小明有 5 个苹果,给了小红 2 个,又买了 3 个,现在有几个?
请逐步推理。

模型:
1. 小明最初有 5 个苹果。
2. 给了小红 2 个,剩余 5 - 2 = 3 个。
3. 又买了 3 个,现在有 3 + 3 = 6 个。
4. 所以小明现在有 6 个苹果。

嗯,这里要注意:指令式 CoT 对简单问题效果不错,但遇到复杂逻辑时,模型可能还是会「跳步」。我建议你在指令后面再加一句「把每一步都写清楚,不要省略中间计算」。

2. Few-shot CoT(示例式)

给模型看几个「问题 + 推理过程 + 答案」的例子,让它学会你的推理模板。这是我最常用的方式。

我的经验:Few-shot CoT 的示例数量控制在 2-3 个最佳。太少模型学不会,太多反而会混淆。我曾经试过给 5 个示例,结果模型开始模仿示例中的错误模式……

Few-shot CoT 完整示例

来看一个实际场景:数学应用题。这是 CoT 最经典的战场。

示例 1:
问题:一个农场有 12 只鸡和 8 只兔子,问一共有多少条腿?
推理:
1. 每只鸡有 2 条腿,12 只鸡共有 12 × 2 = 24 条腿。
2. 每只兔子有 4 条腿,8 只兔子共有 8 × 4 = 32 条腿。
3. 总腿数 = 24 + 32 = 56 条。
答案:56

示例 2:
问题:一本书有 200 页,小明第一天看了 1/4,第二天看了剩下的 1/3,还剩多少页没看?
推理:
1. 第一天看了 200 × 1/4 = 50 页,剩余 200 - 50 = 150 页。
2. 第二天看了 150 × 1/3 = 50 页,剩余 150 - 50 = 100 页。
答案:100

问题:一个水池,单开进水管 6 小时注满,单开排水管 8 小时排空。同时打开两管,几小时注满?
推理:

模型看到这里,就会按照前两个示例的格式,一步步写出推理过程。我测试过,不加 CoT 时模型正确率大概 60%,加了之后能到 90% 以上。

CoT 的几种变体

类型 说明 适用场景
Zero-shot CoT 直接加「让我们一步一步思考」 简单推理、快速验证
Few-shot CoT 给 2-3 个示例引导 复杂逻辑、数学题、代码生成
Self-consistency CoT 多次推理取多数答案 高精度要求场景
Tree-of-Thought 分支探索,类似搜索树 规划、决策类问题

避坑指南:我曾经在项目里用 CoT 处理长文本推理,结果模型输出了一大堆无关的「思考过程」,反而把正确答案淹没了。后来我加了一个约束:「推理过程不超过 5 步,每步不超过 20 个字」。效果立竿见影。

什么时候该用 CoT?

不是所有问题都需要 CoT。我个人习惯这样判断:

  • 需要多步推理(数学题、逻辑题)→ 必须用
  • 需要解释原因(为什么这样设计?)→ 推荐用
  • 简单事实查询(今天是几号?)→ 不需要
  • 创意生成(写一首诗)→ 看情况,有时反而限制发挥

说白了,CoT 是给模型戴上一个「思考帽」。戴上之后,它会更严谨、更可解释,但也会更慢、更啰嗦。你要根据场景来取舍。

最后说一句:CoT 不是万能药。我见过有人把「请逐步推理」加到了所有 prompt 里,结果模型连「1+1=?」都要写三行推理。嗯,适度使用才是王道。