Prompt 工程基础:如何写出有效的指令 · 第 4 / 6 节

第 04 课:Chain-of-Thought:让 AI 展示推理过程

本课目标:

  • 理解 chain-of-thought 的原理和作用
  • 学会用"让我们一步步思考"引导 AI 推理
  • 识别适合使用 CoT 的任务类型

前置知识:<< 03 Few-shot Learning | 下一课 05 >>

当 AI 给出答案但推理过程错了

你问 AI 一道数学应用题,它给了答案"42"。你检查后发现答案是对的——但如果换一道类似的题,答案就错了。问题在哪?AI 可能是猜对的,或者用了错误的推理路径碰巧得到正确答案。

对于需要多步推理的任务(数学题、逻辑推理、复杂分析),让 AI 展示推理步骤比直接要答案更可靠12。这就是 chain-of-thought(思维链)prompting 的核心思想——把结论拆成可检查的中间步骤。

什么是 Chain-of-Thought

Chain-of-thought (CoT) prompting 是一种让 AI 在给出最终答案前,先展示中间推理步骤的技术1。就像我们解数学题时在草稿纸上列式子、写中间结果,AI 也把思考过程"写出来"。

对比两种方式:

直接回答(容易出错)

不使用 CoT

问题:一个咖啡店早上卖出了 23 杯咖啡,中午卖出了 17 杯,下午卖出了两倍于早上的数量。全天总共卖出多少杯?
答案:

AI 可能直接输出:

86 杯

如果答案错了,你不知道是哪一步算错了。

展示推理步骤(更可靠)

使用 CoT

问题:一个咖啡店早上卖出了 23 杯咖啡,中午卖出了 17 杯,下午卖出了两倍于早上的数量。全天总共卖出多少杯?
让我们一步步思考:

AI 输出:

让我们一步步思考:
1. 早上卖出:23 杯2. 中午卖出:17 杯3. 下午是早上的两倍:23 × 2 = 46 杯4. 全天总计:23 + 17 + 46 = 86 杯
答案:86 杯

每一步都清晰可见,如果某步错了,你能立刻发现并纠正 prompt。

研究表明,在涉及多步推理的任务上,CoT 能显著提升推理准确率——在某些复杂推理任务上提升幅度可达 2-3 倍12

CoT 的两种用法

方法 1:Zero-shot CoT(最简单)

在 prompt 最后加一句"让我们一步步思考"(Let's think step by step)12

问题:如果 5 个工人需要 5 天完成一个项目,那么 10 个工人需要多少天?
让我们一步步思考:

这一句话就能触发 AI 的逐步推理模式。不需要给示例,AI 会自动拆解问题。

方法 2:Few-shot CoT(更可控)

给出 1-2 个包含完整推理过程的示例12

示例:问题:一辆车以 60 公里/小时的速度行驶,3 小时能走多远?推理:- 速度 = 60 公里/小时- 时间 = 3 小时- 距离 = 速度 × 时间 = 60 × 3 = 180 公里答案:180 公里
现在解决这个问题:问题:一辆车以 80 公里/小时的速度行驶了 2.5 小时,然后以 60 公里/小时又行驶了 1 小时。总共走了多远?推理:

示例展示了推理的格式和步骤详细程度,AI 会模仿这种风格。

CoT 适合什么任务

CoT 最适合需要多步推理的任务2

数学和逻辑推理

  • 应用题
  • 比例计算
  • 多步骤的公式推导

因果分析

  • "为什么 X 会导致 Y?"
  • "这个 bug 的根本原因是什么?"

计划和决策

  • "应该先做 A 还是先做 B?"
  • "这个方案的优缺点分别是什么?"

代码调试

  • "这段代码为什么会出错?"
  • "性能瓶颈在哪一步?"

不适合的场景:

简单的事实查询:"Python 是什么时候发布的?"——不需要推理 ❌ 创意写作:写诗、写故事——推理步骤会破坏创作流 ❌ 格式转换:JSON → CSV——机械操作,不需要推理

判断标准:如果你自己做这个任务时会在草稿纸上列步骤,那就适合用 CoT。

实战示例:用 CoT 分析问题

场景 1:代码性能分析

不使用 CoT(结论不可信)

这段代码的性能有问题吗?
```pythondef find_duplicates(items):    duplicates = []    for i in range(len(items)):        for j in range(i + 1, len(items)):            if items[i] == items[j] and items[i] not in duplicates:                duplicates.append(items[i])    return duplicates```
答案:有性能问题

只有结论,不知道为什么。

使用 CoT(推理清晰)

分析这段代码的性能问题。一步步说明:1. 识别循环结构2. 计算时间复杂度3. 指出具体的瓶颈4. 给出优化建议
```pythondef find_duplicates(items):    duplicates = []    for i in range(len(items)):        for j in range(i + 1, len(items)):            if items[i] == items[j] and items[i] not in duplicates:                duplicates.append(items[i])    return duplicates```

AI 会展示:

性能分析:
1. 循环结构:   - 外层循环:遍历每个元素,O(n)   - 内层循环:对每个元素再遍历后续元素,O(n)   - 总体:嵌套循环,O(n²)
2. 时间复杂度:   - 主循环:O(n²)   - `items[i] not in duplicates` 检查:最坏 O(m),m 是已找到的重复项数量   - 总复杂度:O(n² × m)
3. 性能瓶颈:   - 嵌套循环在数据量大时(n > 1000)会非常慢   - `not in` 对列表的线性查找进一步拖慢速度
4. 优化建议:   - 使用集合(set)代替列表存储 duplicates,检查从 O(m) 降到 O(1)   - 或者用计数器(Counter)一次遍历找出所有出现次数 > 1 的元素,降到 O(n)

每一步推理都可验证,如果有错你能立刻看出来。

场景 2:逻辑推理题

问题

三个人 A、B、C 参加比赛。已知:- A 不是第一名- B 不是最后一名- C 不是第一名也不是最后一名
他们的排名是什么?
让我们一步步推理:

AI 输出

让我们一步步推理:
1. 从 C 的条件入手:   - C 不是第一名,也不是最后一名   - 所以 C 必定是第二名
2. 确定 A 和 B:   - A 不是第一名   - B 不是最后一名   - C 已经是第二名,剩下第一名和第三名给 A 和 B   3. 分配剩余名次:   - A 不是第一名,所以 A 是第三名   - B 不是最后一名(第三名),所以 B 是第一名
答案:B 第一名,C 第二名,A 第三名

这种逐步排除的推理过程,展示出来后更容易检查逻辑是否严密。

CoT 的常见模式

模式 1:问题拆解

把一个复杂问题拆成几个子问题。

问题:一个软件项目有 5 个工程师,每人每天工作 6 小时,项目需要 120 人天的工作量。如果增加到 8 个工程师,项目能提前多少天完成?
让我们一步步计算:1. 当前配置下需要多少天?2. 增加人手后需要多少天?3. 能提前多少天?

模式 2:假设验证

列出假设,逐个验证。

这段代码报错"TypeError: unsupported operand type(s)",可能的原因是什么?
让我们逐个检查可能的原因:1. 检查运算符两侧的变量类型2. 检查是否有 None 值参与运算3. 检查是否有字符串和数字混用

模式 3:正反论证

列出支持和反对的理由,再得出结论。

应该用微服务架构还是单体架构?
让我们从两个角度分析:
支持微服务的理由:1. ...2. ...
支持单体的理由:1. ...2. ...
综合判断:基于当前团队规模和项目复杂度,建议...

CoT 的局限性

CoT 不是万能的,有几个局限:

1. 增加响应长度和时间

展示推理步骤会让输出变长,消耗更多 token,响应时间也更长。

何时值得:复杂任务上,多花 2-3 倍 token 换取准确率提升是值得的。 何时不值得:简单任务("今天星期几"),推理步骤是纯粹的浪费。

2. 推理步骤本身可能出错

AI 展示的推理步骤看起来合理,但逻辑可能有漏洞。你仍然需要检查推理是否正确。

CoT 的价值在于让错误可见——直接给答案时,错误藏在黑盒里;展示步骤后,错误暴露在某一步,更容易发现和纠正。

3. 不适合需要直觉的任务

有些任务(比如创意写作、艺术评价)依赖整体感觉,强行拆步骤反而破坏了完整性。

小结

Chain-of-thought prompting 让 AI 展示推理步骤,而不是直接给答案。通过在 prompt 中加入"让我们一步步思考",或者提供包含推理过程的示例,可以显著提升多步推理任务的准确率。

CoT 适合数学推理、逻辑分析、因果推断、复杂决策等需要多步思考的任务。它让推理过程可见、可检查,虽然会增加输出长度,但在复杂任务上收益远大于成本。

下一课学习如何调试和改进 prompt——当 AI 的输出不符合预期时,如何系统化地找出问题并优化。

下一课 调试和改进 Prompt >>

Footnotes

  1. Prompt Engineering Guide - Chain-of-Thought — https://www.promptingguide.ai/techniques/cot 2 3 4 5

  2. Chain of Thought Prompting Guide — https://www.prompthub.us/blog/chain-of-thought-prompting-guide 2 3 4 5

练习

01

使用"让我们一步步思考"技术,让 AI 解决下面的问题:

Level 1:应用 zero-shot CoT

问题:一个团队有 8 个人,每人每天工作 6 小时。项目需要 240 人时的工作量。如果团队扩大到 12 人,项目能提前几天完成?

请写出完整的 prompt(包含"让我们一步步思考"),然后预测 AI 会展示哪些中间步骤。

完成标准 · 本地勾选
02

场景:你需要 AI 判断一段代码的时间复杂度,并解释推理过程。

Level 2:设计 few-shot CoT prompt

设计一个 few-shot CoT prompt,包含 2 个示例(一个 O(n)、一个 O(n²)),展示完整的推理步骤。

完成标准 · 本地勾选

我的笔记

记下想法、痛点、没懂的地方。只写进这门课的附录,正课文件不动。