代码语言

知识点思维导图

29 个知识节点

Prompt Engineering(06) - 思维链与推理提示

读完后,你应能完成以下任务:

  • 绘制“Prompt Engineering(06) - 思维链与推理提示 / 先看一道模型「会算错」的题”的关键对象与数据流,解释“因为你逼它「直接给答案」——它没有列式、没有中间步骤,相当于让一个人不许打草稿、心算多步运算,自然容易出错。”,并用源码位置、日志或 Trace 标注证据。
  • 为“Prompt Engineering(06) - 思维链与推理提示 / 为什么「一步步思考」就有效”设计正常与异常输入,验证“它生成文字是「一个词接一个词」往外蹦的,没有独立的「打草稿区」。”,输出首个偏差位置与回归测试结果。
  • 实现“Prompt Engineering(06) - 思维链与推理提示 / 三种写法”的最小代码或配置,检验“适合绝大多数场景,一句话成本几乎为零,先试它准没错。”,输出命令、结果与 Diff,并说明不适用边界。

本章目标:掌握让模型分步推理的技巧,显著提升逻辑、数学、复杂判断类任务的准确率。


一、先看一道模型「会算错」的题

来一道小学应用题,直接问模型:

小明有 5 个苹果,他买了 3 袋,每袋 4 个,然后送给朋友 6 个。他现在有几个苹果?
请直接给出答案。

你会发现模型有时会脱口而出一个错的数字,比如:

9 个

明明是个简单题,为什么会错?因为你逼它「直接给答案」——它没有列式、没有中间步骤,相当于让一个人不许打草稿、心算多步运算,自然容易出错。

现在我们只加一句话:

小明有 5 个苹果,他买了 3 袋,每袋 4 个,然后送给朋友 6 个。他现在有几个苹果?
让我们一步步思考。

模型这次会这样答:

让我们一步步算:
1. 原有 5 个。
2. 买了 3 袋,每袋 4 个,共 3 × 4 = 12 个。
3. 现在有 5 + 12 = 17 个。
4. 送出 6 个,剩 17 - 6 = 11 个。
答案:11 个。

正确了。就加了五个字「让我们一步步思考」,答案就从错变对。 这就是思维链(Chain of Thought,简称 CoT)。


二、为什么「一步步思考」就有效

打个比方:让你心算 23 × 47,容易错;但给你纸笔列竖式,一步步算,基本不会错。

模型也是一样。它生成文字是「一个词接一个词」往外蹦的,没有独立的「打草稿区」。当你要求它直接给答案,它就是在「心算」——一步到位,错误率高。

而当你让它「一步步思考」,它会先把推理过程一行行写出来,每一步都基于上一步的结果。这相当于给了它一张草稿纸:

  • 把一个复杂问题,拆成了若干个简单小问题;
  • 每一步只做一点点,做错的概率大大降低;
  • 后面的步骤能「看到」前面写出来的中间结果,顺着推下去。

一句话记住:让模型把思考写出来,它就不用「心算」,而是在「打草稿」——草稿越清楚,答案越靠谱。


三、三种写法

3.1 写法一:Zero-shot CoT(最简单,最常用)

不给任何示例,直接在问题后面加一句「触发推理」的话。这是性价比最高的技巧,记住几句万能咒语:

让我们一步步思考。
请先分析,再给出结论。
Let's think step by step.

适合绝大多数场景,一句话成本几乎为零,先试它准没错。

3.2 写法二:Few-shot CoT(给带推理过程的示例)

把第 05 章的 few-shot 和 CoT 结合:示例里不光给「答案」,还给出「怎么推出这个答案」的过程。模型会模仿你的推理方式。

问:停车场有 12 辆车,开走了 4 辆,又来了 7 辆。现在有几辆?
答:先算开走后:12 - 4 = 8 辆;再算开来后:8 + 7 = 15 辆。答案是 15 辆。

问:书架上有 20 本书,借出 8 本,又还回 3 本。现在有几本?
答:先算借出后:20 - 8 = 12 本;再算还回后:12 + 3 = 15 本。答案是 15 本。

问:果园有 30 棵树,砍掉 5 棵,又种了 9 棵。现在有几棵?
答:

模型会照着示例的推理格式,一步步算出 34 棵适合你想让模型按特定推理套路来、或者推理步骤有固定结构时用。

3.3 写法三:引导式分步(你来规定步骤)

当任务有明确的分析框架时,直接把步骤列给它,让它逐项填:

请评估这个创业点子是否值得做,按以下步骤分析:
第一步:这个点子解决了谁的什么痛点?
第二步:现有的替代方案是什么?它比替代方案好在哪?
第三步:最大的风险是什么?
第四步:综合以上,给出「值得做 / 不值得做 / 需要更多信息」的结论。

点子:做一个帮宠物主人预约上门美容的 App。

这种写法控制力最强——你不仅让它推理,还规定了从哪几个角度推理,特别适合分析、评估、决策类任务。


四、多候选、自洽与投票

单次分步推理仍可能在早期走错方向。对答案可规范化、错误代价较高的任务,可以独立生成多个候选,只提取每个候选的最终答案,再按多数结果或确定性验证器选择。这个方法通常叫 self-consistency,自洽指多个独立推理路径是否收敛到同一个结论。

多候选不是简单重复同一次确定性调用。需要允许一定采样差异,并在投票前把 11答案是 11 等表达归一化。代码生成、事实问答和开放式建议没有可靠的多数真值,多个候选可能共享同一个错误;这类任务应使用测试、检索证据或规则校验,而不是把票数当正确性。

五、适用与不适用

适合用 CoT:

  • 数学/计算:多步运算、应用题。
  • 逻辑推理:推断、排除、条件判断。
  • 多步任务:需要分阶段、前后依赖的问题。
  • 复杂决策/分析:要权衡多个因素再下结论。
  • 代码调试:让它先分析代码逻辑,再找 Bug。

不必用(甚至别用):

  • 简单事实问答:「中国的首都是哪?」——加「一步步思考」纯属啰嗦,还可能画蛇添足。
  • 要求输出简洁/结构化时:CoT 会带出一大段推理过程。如果你只想要最终的 JSON 或一个数字,推理过程反而是干扰(解决办法见下一节)。
  • 纯创作类:写诗、起名,靠的是发散不是推理。
  • 对延迟/成本敏感:CoT 会生成更多文字,更慢更贵。简单任务不值当。

六、想要推理又想要简洁?两全其美的技巧

CoT 的副作用是输出一大堆推理过程。如果你既要它「想清楚」、又只想拿到「干净的最终答案」,有两招:

招数一:让它先推理,最后单独给结论

请一步步分析后,在最后用「最终答案:」开头单独给出结论。

这样你的程序只要抓「最终答案:」后面那部分就行。

招数二:让它「内部思考」,只输出结果

请在心里一步步推理,但只输出最终答案,不要展示推理过程。

注意:招数二会牺牲一部分 CoT 的准确率收益(因为它没真把过程写出来),但比完全不推理强。要最高准确率就用招数一,要最干净输出且能接受准确率略降就用招数二。


七、一个「直接问错 vs 加 CoT 对」的完整对比

来个稍微绕的逻辑题:

有三个人 A、B、C。已知:
- A 不是医生。
- B 不是老师,也不是医生。
- 三人分别是医生、老师、律师中的一个,各不相同。
请问谁是医生?

直接问(不加引导)模型可能脱口而出,有概率答错(比如随口说 A)。

加 CoT(加「让我们一步步推理」):

让我们一步步推理:
1. B 不是老师也不是医生,所以 B 只能是律师。
2. A 不是医生,律师已被 B 占了,所以 A 只能是老师。
3. 剩下 C,那 C 就是医生。
答案:C 是医生。

逻辑链条清清楚楚,每一步都能验证。这类「需要排除推理」的题,CoT 的提升尤其明显。


八、常见错误

  1. 简单题也硬加 CoT:事实问答、打招呼也来一句「一步步思考」,又啰嗦又慢。
  2. 要简洁输出却用了 CoT,又没收口:结果模型吐一大段推理,把你要的 JSON 淹没了。记得用第五节的收口技巧。
  3. 步骤定得太死或互相矛盾:引导式分步时,规定的步骤本身不合理,反而把模型带沟里。
  4. 以为 CoT 能消除所有错误:它能显著降低出错率,但不是万能的。关键结果仍要核对。
  5. Few-shot CoT 的示例推理写错了:模型会模仿错误的推理方式,越学越偏。

九、最佳实践

  • 先试 Zero-shot CoT:一句「让我们一步步思考」成本最低,多数推理任务直接见效。
  • 按任务选写法:要套固定推理格式用 Few-shot CoT;有明确分析框架用引导式分步。
  • 推理与输出分离:需要干净结果时,让它「先推理、最后单独给结论」,程序只取结论部分。
  • 只在该用时用:简单、事实型、创作型任务别滥用,省时省钱。
  • 关键结论仍要验证:CoT 提升的是概率,不是保证。
  • 和格式控制配合:CoT + 「最终答案用指定格式输出」是稳定拿结构化推理结果的黄金组合。

十、本章小结

  • 思维链(CoT)= 让模型把推理过程一步步写出来,相当于给它一张草稿纸,避免「心算出错」。
  • 三种写法:Zero-shot CoT(加一句咒语)、Few-shot CoT(给带推理的示例)、引导式分步(你规定步骤)。
  • 适合数学、逻辑、多步、决策类任务;简单事实问答和纯创作不用。
  • 想要推理又要简洁?让它「先推理、最后单独给结论」。
  • 核心心法:让模型把思考写出来,它就不再心算,而是打草稿。

下一章讲控制输出格式——如何让模型稳定吐出 JSON、表格这类「程序能直接用」的结构化结果。


十一、配套 Demo

提示词工程-demo/06-demo/:一组对照提示词,同一道需要推理的题给了「直接问」和「加思维链」两个版本。你可以拿任意 AI 工具各跑几次,亲眼看看准确率的差别。

十二、动手实践:demo:思维链对照实验(直接问 vs 加思维链)

这个 Demo 不用写代码。目的:让你亲眼看到「让我们一步步思考」对推理准确率的影响。

12.1 怎么用

  1. 打开任意 AI 对话工具。
  2. 每组都有 A(直接问)和 B(加思维链)两个版本。
  3. 每个版本各跑 3 次(模型有随机性,跑一次说明不了问题)。
  4. 数一数:A 版本错了几次,B 版本错了几次。

提示:用「新对话」分别跑 A 和 B,避免上一次的回答影响下一次。


12.2 实验组 1:应用题(含多步运算)

A · 直接问

小明有 5 个苹果,他买了 3 袋,每袋 4 个,然后送给朋友 6 个。
他现在有几个苹果?请直接给出答案,不要过程。

B · 加思维链

小明有 5 个苹果,他买了 3 袋,每袋 4 个,然后送给朋友 6 个。
他现在有几个苹果?让我们一步步思考。

✅ 正确答案:11 个(5 + 3×4 − 6 = 11)。 👉 观察:A 版本「直接给答案」时更容易算错;B 版本列出步骤后基本都对。


12.3 实验组 2:逻辑推理(排除法)

A · 直接问

有三个人 A、B、C,分别是医生、老师、律师中的一个,各不相同。
已知:A 不是医生;B 不是老师,也不是医生。
谁是医生?直接回答。

B · 加思维链

有三个人 A、B、C,分别是医生、老师、律师中的一个,各不相同。
已知:A 不是医生;B 不是老师,也不是医生。
谁是医生?请一步步推理后再回答。

✅ 正确答案:C 是医生(B 只能是律师 → A 只能是老师 → C 是医生)。 👉 观察:A 版本有概率随口答错;B 版本推理链清晰,几乎不会错。


12.4 实验组 3:又要推理、又要干净输出

如果你既想让它想清楚、又只想拿一个干净答案,用这个写法:

有三个人 A、B、C,分别是医生、老师、律师中的一个,各不相同。
已知:A 不是医生;B 不是老师,也不是医生。
谁是医生?

请先一步步推理,最后用「最终答案:」开头单独给出结论。

👉 这样你的程序只要抓「最终答案:」后面那部分即可——兼顾准确率和可用性。


12.5 你应该观察到的结论

  • 需要多步计算或推理的题,加一句「让我们一步步思考」,准确率明显提升。
  • 推理过程被「写出来」,相当于给了模型草稿纸,避免心算出错。
  • 如果只想要干净结果,让它「先推理、最后单独给结论」,两全其美。

反向验证:拿一个简单事实题(如「中国的首都是哪?」)试试加 CoT,你会发现纯属多余——这印证了第 06 章说的「简单事实问答不用 CoT」。

十三、总结

  • 先看一道模型「会算错」的题:因为你逼它「直接给答案」——它没有列式、没有中间步骤,相当于让一个人不许打草稿、心算多步运算,自然容易出错。
  • 为什么「一步步思考」就有效:它生成文字是「一个词接一个词」往外蹦的,没有独立的「打草稿区」。
  • 三种写法:适合绝大多数场景,一句话成本几乎为零,先试它准没错。
  • 多候选、自洽与投票:对答案可规范化、错误代价较高的任务,可以独立生成多个候选,只提取每个候选的最终答案,再按多数结果或确定性验证器选择。
  • 适用与不适用:要求输出简洁/结构化时:CoT 会带出一大段推理过程。
  • 想要推理又想要简洁?两全其美的技巧:CoT 的副作用是输出一大堆推理过程。

学完自测

选择所有正确答案;提交后逐项核对判断依据。

1在“思维链与推理提示”中,需要同时满足“先看一道模型「会算错」的题”与“为什么「一步步思考」就有效”。给定正文约束“明明是个简单题,为什么会错?因为你逼它「直接给答案」——它没有列式、没有中间步骤,相当于让一个人不许打草稿、心算多步运算,自然容易出错。”,哪些判断保持了原有处理机制?多选
2“思维链与推理提示”出现偏差:“在“思维链与推理提示 / 写法一:Zero-shot CoT(最简单,最常用)”中,即使不满足“不给任何示例,直接在问题后面加一句「触发推理」的话”,结果与副作用仍会保持不变。”已成为实际行为。围绕“写法一:Zero-shot CoT(最简单,最常用)”与“写法二:Few-shot CoT(给带推理过程的示例)”,哪些判断能定位被改变的职责或边界?多选
3评审“思维链与推理提示”方案时,验收条件包含“当任务有明确的分析框架时,直接把步骤列给它,让它逐项填。”。关于“写法三:引导式分步(你来规定步骤)”与“多候选、自洽与投票”的哪些决策符合正文机制?多选