012-Chain-of-Thought-Prompting

Chain-of-Thought Prompting:让 AI "说出思考过程"的推理魔法

💡 摘要:Chain-of-Thought(思维链)提示通过让模型展示推理过程,将隐式的多步计算转化为显式的序列生成,显著提高数学、逻辑等复杂推理任务的准确性。

引言

问一个大模型一道数学题:

小明有 5 个苹果,给了小红 2 个,又买了 3 罐苹果,每罐 4 个。现在有多少个苹果?

直接问,它可能回答:"15 个 "------错的

但如果你加上一句话:"请一步步思考",它回答:

小明开始有 5 个苹果。给了小红 2 个,剩 5-2=3 个。买了 3 罐,每罐 4 个,共 3×4=12 个。3+12=15。所以答案是 15 个。

等一下,答案还是 15?让我重新算......5-2=3,3+12=15。哦,这次是对的!

这个简单的技巧------让模型展示思考过程 ------就是 Chain-of-Thought Prompting(思维链提示),它能让大模型在复杂推理任务上的准确率提升 20%-40%

核心概念

什么是 Chain-of-Thought?

Chain-of-Thought(简称 CoT)是一种提示技术,它要求模型不是直接给出答案,而是先展示推理过程,再输出最终答案

💡 通俗类比

不展示推理过程 = 让你心算 347 × 258 并直接报出结果

展示推理过程 = 允许你在纸上列竖式,逐步乘加,最后得到答案

CoT 的本质不是让模型"解释"答案,而是改变模型内部的信息流------让计算从"一次性猜测"变成"逐步推导"。

为什么 CoT 能提高准确率?

4 个核心机制

机制 原理 类比
分解复杂问题 将复杂映射拆解为多个简单子问题 把大题拆成小题,逐题解答
增加计算深度 每生成一个 token,模型都在使用全部层进行新计算 用序列长度换计算深度
自我修正机会 显式中间状态提供验证和修正的可能 草稿纸上可以回头检查
对齐预训练分布 预训练语料中有大量带解题步骤的文本 回到模型最熟悉的"教科书模式"

最关键的洞察

CoT 不只是解释性的,更是计算性的。它改变了模型内部的信息流,让注意力机制可以显式关注之前生成的中间结果,而不是仅依赖原始输入的隐式编码。

原理深入

计算深度:用序列长度换计算能力

Transformer 模型的推理能力受限于其深度(层数)。对于需要很多计算步骤的问题,单次前向传播可能没有足够的非线性变换来模拟复杂算法。

CoT 的巧妙之处在于:

复制代码
单次推理:输入 → 隐藏状态 → 输出(计算量 = 层数)
CoT 推理:输入 → s1 → s2 → s3 → ... → 输出(计算量 = 层数 × token 数)

每生成一个中间 token,模型都在进行全新的前向传播 。生成的中间步骤越多,模型获得的计算时间就越长。这相当于允许程序运行更多步

外显的临时存储

当模型生成中间结果(如"5+3=8")后,这个"8"会作为一个 token 出现在上下文中。模型可以通过注意力机制直接"看到"这个 8,用于下一步计算。

这比单纯依赖隐藏状态更可靠------隐藏状态可能随着后续 token 的生成而衰减或混淆,但生成的 token 是实实在在写在"纸上"的数字

注意力机制的再分配

在 CoT 模式下,模型的注意力可以显式关注之前生成的中间结果。例如:

复制代码
步骤 1:原有 5 个 → 关注 "5"
步骤 2:给了 2 个,剩 5-2=3 → 关注 "5" 和 "2",生成 "3"
步骤 3:又买 3 罐×4=12 → 关注 "3" 和 "4",生成 "12"
步骤 4:3+12=15 → 关注 "3" 和 "12",生成 "15"

每一步的注意力都聚焦在相关的中间结果上,而不是从原始输入中重新推导。

CoT 适用与不适用任务

CoT 并非万能!它主要对需要多步逻辑、数学或符号推理的任务有效。

适用 CoT 的任务

任务类别 具体例子 为什么有效
算术推理 数学应用题、多步计算 需要按顺序执行计算,中间结果必须传递
常识/逻辑推理 三段论、空间推理、因果推断 需要组合多个前提,单步跳跃容易出错
符号/算法推理 字符串变换、代码模拟、日期计算 需要显式模拟规则,类似执行程序

不适用 CoT 的任务

任务类别 具体例子 为什么不适用
纯知识回忆 "法国首都是?" 模型直接知道答案,推理步骤多余
感知/模式匹配 情感分析、图像分类 决策基于整体模式,不需要分解
简单格式转换 翻译、摘要、JSON 提取 输入到输出是直接映射,CoT 会分散注意力
小模型(<10B) 任何任务 小模型不具备 CoT 能力,强制生成反而更差

⚠️ 重要 :CoT 仅在 >10B 参数的模型上有效!小模型使用 CoT 反而会比直接输出更差。

CoT 可能放大错误

当模型对某个中间步骤自信地犯错时,后续推理会基于错误前提,导致最终答案错误。而对于直接输出,模型有时能"蒙对"。在容错率低且无法验证中间步骤的场景下,需谨慎使用 CoT。

Zero-shot CoT vs. Few-shot CoT

Zero-shot CoT:一句话触发推理

最简单的方式------在问题前加上触发词:

复制代码
请一步步思考,最后给出答案。

问题:罗杰有 5 个网球。他买了 2 罐网球,每罐有 3 个。他现在有多少个?

常用触发词:

  • "请一步步思考"
  • "让我们一步步分析"
  • "Let's think step by step"(效果最好)

Few-shot CoT:示例 + 推理过程

在提示中包含带有完整推理步骤的示例:

复制代码
示例:
问:罗杰有 5 个网球。他买了 2 罐网球,每罐有 3 个。他现在有多少个?
答:罗杰开始有 5 个。2 罐 × 3 个 = 6 个。5 + 6 = 11。所以答案是 11。

新问题:...

Few-shot CoT 通常效果最佳,因为它同时提供了推理模式和格式示范。

Auto-CoT:自动化生成示例

特性 手动 CoT Auto-CoT
核心方法 人工精心构造 2-8 个示例 先聚类问题,再让 LLM 自动生成示例
人力成本 极低
效果 SOTA 接近 SOTA
适用场景 追求极致准确率、任务固定 任务多样、快速验证、人力敏感

实战应用

决策流程图:Zero-shot 失败后怎么办?

复制代码
Zero-shot 失败
    │
    ├─ 错误主要是格式/风格/标签不对?
    │       └─ 是 → 尝试 Few-shot(2~3 个示例)
    │
    ├─ 错误是答案明显错误,且任务需要多步计算或逻辑?
    │       └─ 是 → 尝试 CoT(加"一步步思考")
    │             如果仍不佳 → 升级为 Few-shot CoT
    │
    └─ 两者问题并存(格式+推理都错)→ 直接 Few-shot CoT

示例 1:Zero-shot CoT 提取答案

python 复制代码
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o")

# Zero-shot CoT 提示
prompt = """请一步步思考,最后用"答案是:"结尾。

问题:一个农场有鸡和兔子。总共有 35 个头,94 条腿。
鸡和兔子各有多少只?"""

response = llm.invoke(prompt)
print(response.content)

# 输出:
# 设有鸡 x 只,兔子 y 只。
# x + y = 35(头数)
# 2x + 4y = 94(腿数)
# 解方程组:x = 23, y = 12
# 答案是:鸡 23 只,兔子 12 只

示例 2:从 CoT 响应中提取答案

python 复制代码
import re

def extract_answer(text: str) -> str:
    """从 CoT 响应中提取最终答案"""
    # 匹配"答案是:"后的内容
    match = re.search(r'答案是[::]\s*(.+)', text)
    if match:
        return match.group(1).strip()
    # 如果没有"答案是:",返回最后一行
    return text.strip().split('\n')[-1]

response_text = """设有鸡 x 只,兔子 y 只。
x + y = 35
2x + 4y = 94
解得:x = 23, y = 12
答案是:鸡 23 只,兔子 12 只"""

answer = extract_answer(response_text)
print(f"提取的答案:{answer}")
# 输出:提取的答案:鸡 23 只,兔子 12 只

最佳实践

  1. 适用大模型:CoT 仅在 >10B 参数的模型上有效,小模型不要使用
  2. 触发词引导:使用"让我们一步步思考"或"Let's think step by step"引导推理
  3. 标记提取:要求模型用"答案是:"结尾,方便精确提取最终答案
  4. 优先 Few-shot CoT:任务重要时,提供 2-3 个带推理步骤的示例效果最好
  5. Auto-CoT 替代手动:任务多样时用 Auto-CoT,追求极致效果时用手动 CoT
  6. 不要滥用:简单问答、情感分析、翻译等任务不需要 CoT,反而会增加 token 消耗

总结

Chain-of-Thought Prompting 的核心要点:

  • 计算性而非解释性:CoT 不是让模型解释答案,而是改变内部信息流,让计算从"一次性猜测"变成"逐步推导"
  • 用序列长度换计算深度:每生成一个中间 token 都是一次全新的前向传播
  • 适用范围有限:仅对多步推理任务有效,小模型(<10B)不适用
  • Zero-shot CoT:一句话触发,最简单
  • Few-shot CoT:效果最佳,提供带推理步骤的示例
  • Auto-CoT:自动化构建示例,节省人力

理解了 CoT,你就掌握了让大模型"想清楚再回答"的核心技巧。


相关推荐
晓翔仔1 小时前
从零搭建自己的网站 AI 助手:阿里云百炼 + 云服务器部署全教程
服务器·人工智能·阿里云·token·ai助手
fuquxiaoguang1 小时前
华为灵犀指令集:统一CPU/GPU/AI算力底座的野心与挑战
人工智能·华为·灵犀指令集
AI周红伟1 小时前
RTX 5090 24G 部署 DeepSeek-V4-Flash 全攻略
人工智能·深度学习
XD7429716361 小时前
科技早报|2026年5月15日:AI 安全开始补信任层
人工智能·科技·安全·ai安全·科技早报
StarChainTech1 小时前
先享后付,正在悄悄改变电商的“信任游戏”
大数据·人工智能·游戏·微信小程序·小程序·软件需求
数智工坊1 小时前
【BLIP论文阅读】:统一视觉语言理解与生成的自举式预训练范式
论文阅读·人工智能·深度学习·算法·transformer
wujian83111 小时前
千问 文心 元宝 Kimi导出pdf方法
人工智能·ai·pdf·豆包·deepseek
这张生成的图像能检测吗1 小时前
(论文速读)MDRS-GAN:基于多尺度密集残余收缩GAN的旋转机械故障诊断
人工智能·深度学习·生成对抗网络·故障诊断
Traving Yu1 小时前
LangChain
人工智能·langchain