思维链与推理提示
思维链与推理提示 | 大模型开发核心技术系列 1.4

一,引言
当你问大型语言模型一个复杂的数学问题,它能像人类一样“一步步思考”吗?答案是肯定的,只要我们使用正确的提示技术。思维链(Chain of Thought,CoT)提示是一种强大的提示工程技术,它引导模型展示推理过程,从而显著提升模型在复杂推理任务上的表现。本文将深入解析思维链提示的原理、各种变体以及实战技巧,帮助你解锁大型语言模型的深度推理能力。
二,思维链概述
2.1 什么是思维链
思维链(Chain of Thought,CoT)是一种提示工程技术,它通过引导模型展示思考过程,逐步推理,最终得出答案。与直接给出答案不同,思维链让模型像人类一样“一步步想”,从而提高推理的准确性和可解释性。
# ❌ 没有思维链
prompt = "小明有5个苹果,小红给了他3个,小明吃掉了2个,小明还有多少个苹果?"
# 可能直接输出错误答案
# ✅ 有思维链
prompt = """
小明有5个苹果,小红给了他3个,小明吃掉了2个,小明还有多少个苹果?
让我们一步步思考:
1. 小明原来有 5 个苹果
2. 小红又给了他 3 个,现在有 5 + 3 = 8 个
3. 小明吃掉了 2 个,还剩 8 - 2 = 6 个
所以答案是 6 个苹果
"""
2.2 思维链为什么有效
思维链有效的核心原因是它将复杂问题分解为多个简单步骤。当模型逐步思考时,每一步都基于前面的推理结果,这种“链式”的思考方式更接近人类的思维模式,也更容易得到正确的结果。
研究显示,思维链的效果在以下场景特别明显:数学推理问题、多步逻辑推理、复杂决策问题、需要解释的答案。
2.3 思维链 vs 直接答案
| 特性 | 直接答案 | 思维链 |
|---|---|---|
| 推理过程 | 不展示 | 逐步展示 |
| 复杂任务表现 | 较差 | 显著提升 |
| 可解释性 | 低 | 高 |
| Token 消耗 | 少 | 多 |
| 调试难度 | 难 | 易 |
三,基础思维链实现
3.1 零样本思维链
最简单的思维链使用方法是在提示中添加“让我们一步步思考”或“think step by step”。
# 零样本 CoT
prompt = """
一个农民养了鸡和兔子。一共有35个头,94只脚。请问鸡有多少只,兔子有多少只?
请一步步思考,最后给出答案。
"""
# 模型会展示:
# 1. 设鸡有 x 只,兔子有 y 只
# 2. x + y = 35(头的数量)
# 3. 2x + 4y = 94(脚的数量)
# ... 逐步计算
# 最后得出:鸡 23 只,兔子 12 只
3.2 少样本思维链
在提示中提供几个带有推理过程的示例,让模型学习这种思考方式。
# 少样本 CoT 示例
prompt = """
数学问题的解答示例:
问题:小明有10个球,给了小红3个,又买了5个,现在有多少个?
解答:原来有10个,给了小红3个后剩下10-3=7个,又买了5个后有7+5=12个。答案是12个。
问题:小华每分钟写8个字,20分钟能写多少个字?
解答:
"""
3.3 格式规范
规范思维链的输出格式可以让结果更一致,也便于程序处理。
# 规范格式示例
prompt = """
按照以下格式回答:
问题:[复述问题]
分析:
- 第一步:[推理1]
- 第二步:[推理2]
- 第三步:[推理3]
答案:[最终答案]
问题:如果今天是星期三,那么50天后是星期几?
"""
四,思维链变体
4.1 自洽性思维链
自洽性思维链(Self-Consistency with CoT)通过多次采样并选择最一致的答案来提高准确率。
# 自洽性示例
import openai
question = "一个水池有进水管和出水管。进水管6小时注满,出水管9小时放完。两管同时打开,需要多少小时注满?"
# 多次采样
responses = []
for _ in range(5):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "user", "content": f"一步步思考并回答:{question}"}
]
)
responses.append(response.choices[0].message.content)
# 选择最一致的答案
# 统计多数答案
4.2 思维树
思维树(Tree of Thoughts,ToT)将思维链扩展为树状结构,探索多条推理路径。
# 思维树示例
prompt = """
我们需要决定如何投资 100 万元。请从以下三个角度思考:
角度 1:股票投资
- 优点:潜在收益高
- 缺点:风险大
- 初步建议:...
角度 2:债券投资
- 优点:稳定
- 缺点:收益低
- 初步建议:...
角度 3:房地产投资
- 优点:实物资产
- 缺点:流动性差
- 初步建议:...
请综合三个角度的分析,给出最终建议。
"""
4.3 思维链提示选择
不同的思维链变体适用于不同场景。
| 方法 | 适用场景 | 复杂度 |
|---|---|---|
| 零样本 CoT | 简单推理任务 | 低 |
| 少样本 CoT | 复杂推理任务 | 中 |
| 自洽性 CoT | 需要高准确率 | 高 |
| 思维树 | 多方案选择 | 高 |
五,ReAct 模式
5.1 什么是 ReAct
ReAct(Reason + Act)结合了推理(Reason)和行动(Act),让模型能够与外部工具交互,显著扩展了能力边界。
# ReAct 核心思想
prompt = """
问题:2024 年美国总统是谁?
思考1:我需要查询最新的政治信息
行动1:搜索 [2024年美国总统]
观察1:2024年美国总统选举将在2024年11月举行
思考2:让我确认现任总统
行动2:搜索 [当前美国总统]
观察2:现任美国总统是乔·拜登,他于2021年1月20日就职
答案:2024年美国总统选举尚未举行,现任总统是乔·拜登
"""
5.2 ReAct 实现
# 简化 ReAct 实现
class ReActAgent:
def __init__(self, tools):
self.tools = tools
self.history = []
def run(self, question):
while True:
thought = self.think(question)
self.history.append(f"思考:{thought}")
if "搜索" in thought:
action = self.extract_action(thought)
result = self.execute_tool(action)
self.history.append(f"观察:{result}")
else:
return thought
5.3 ReAct vs 纯推理
| 特性 | 纯推理 | ReAct |
|---|---|---|
| 外部知识 | 无法获取 | 可以查询 |
| 实时信息 | 无法获取 | 可以获取 |
| 计算能力 | 有限 | 可以调用计算器 |
| 幻觉风险 | 较高 | 可验证 |
六,实战斗数学推理
6.1 数学问题示例
# 数学推理示例
prompt = """
请一步步解决以下数学问题:
问题:小明从A地走到B地,去时速度是每小时5公里,用时2小时。
返回时同样的路程用了3小时。请问往返的平均速度是多少?
解题步骤:
1. 去时路程 = 速度 × 时间 = 5 × 2 = 10 公里
2. 返回路程也是 10 公里
3. 返回速度 = 10 ÷ 3 ≈ 3.33 公里/小时
4. 总路程 = 10 + 10 = 20 公里
5. 总时间 = 2 + 3 = 5 小时
6. 平均速度 = 20 ÷ 5 = 4 公里/小时
答:往返平均速度是每小时4公里
"""
6.2 逻辑推理示例
# 逻辑推理示例
prompt = """
请分析以下逻辑推理问题:
前提:
1. 所有猫都是哺乳动物
2. 一些宠物是猫
3. 所有的狗都是宠物
结论推理:
- 一些宠物是哺乳动物(✓ 因为:宠物→猫→哺乳动物)
- 所有的狗都是哺乳动物(✓ 因为:狗→宠物→猫→哺乳动物)
- 所有的猫都是宠物(✗ 前提未建立此关系)
请判断上述推理是否正确,并说明原因。
"""
6.3 编程问题示例
# 编程问题分析
prompt = """
请分析以下代码的时间复杂度:
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
逐步分析:
1. 主函数体(不包括递归调用)时间复杂度:O(n),因为需要遍历数组
2. 递归调用:每次选择 pivot,将数组分成三部分
3. 最好的情况:每次 pivot 都是中位数,递归深度 log n
4. 最坏的情况:每次 pivot 都是最大/最小值,递归深度 n
结论:平均时间复杂度 O(n log n),最坏 O(n²)
"""
七,实践技巧
7.1 提示模板
# 通用思维链模板
cot_template = """
{question}
请按以下格式回答:
分析步骤:
1. [第一步分析]
2. [第二步分析]
3. [第三步分析]
计算/推理:
- [计算/推理1]
- [计算/推理2]
最终答案:[答案]
"""
7.2 调试技巧
当思维链没有正确工作时,可以尝试以下方法:添加更多推理步骤的示例、明确指定推理的中间步骤、减少输出长度限制让模型充分思考。
# 调试示例
# ❌ 推理不完整
prompt = "计算 15% × 240 = ?"
# ✅ 推理更完整
prompt = """
15% × 240 = ?
请展示完整计算过程:
15% = 15/100 = 0.15
0.15 × 240 = 0.15 × (24 × 10) = (0.15 × 24) × 10
= 3.6 × 10 = 36
所以答案是 36
"""
7.3 常见错误
# 避免的错误
# ❌ 推理步骤太少
prompt = "100 + 200 = ?"
# ✅ 适当的推理
prompt = "100 + 200 = ? 先算百位,100+200=300,所以答案是 300"
# ❌ 格式不一致
prompt = "计算 5×7=? 解释一下"
# ✅ 格式一致
prompt = """
计算:5 × 7 = ?
答:5 × 7 = 35
解释:5 个 7 相加或 7 个 5 相加
"""
八,高级应用
8.1 思维链 + 工具调用
结合思维链和工具调用可以解决更复杂的问题。
# 思维链 + 搜索
prompt = """
问题:2024年奥运会金牌榜前三名是哪些国家?
思考步骤:
1. 我需要查询2024年奥运会的最新信息
2. 通过搜索获取金牌榜数据
3. 确认前三名
请先搜索相关信息,然后给出答案。
"""
8.2 反思与修正
让模型在推理过程中进行自我反思和修正。
# 反思模式
prompt = """
问题:如果 a = 5,b = 3,那么 2a + b = ?
第一次计算:
2a + b = 2 × 5 + 3 = 10 + 3 = 13
让我验证:
- a = 5 正确
- b = 3 正确
- 2a = 2 × 5 = 10 正确
- 10 + 3 = 13 正确
最终答案:13
"""
8.3 分解复杂任务
# 任务分解
prompt = """
帮我制定一个月的英语学习计划
分解任务:
1. 目标设定
- 目标:达到日常英语交流水平
- 评估:能够进行简单对话
2. 资源准备
- 教材:新概念英语
- App:多邻国
3. 学习安排
- 第1周:音标和基础词汇
- 第2周:基础语法
- ...
请根据以上框架填充具体内容。
"""
九,效果评估
9.1 评估指标
评估思维链效果可以使用以下指标:准确率(最终答案是否正确)、推理完整性(是否展示完整推理过程)、步骤正确性(每步推理是否正确)。
# 简单评估
def evaluate_cot(response, expected_answer):
# 检查是否包含推理过程
has_reasoning = "所以" in response or "因此" in response
# 检查答案
has_correct_answer = expected_answer in response
return {
"has_reasoning": has_reasoning,
"has_correct_answer": has_correct_answer,
"quality": "good" if (has_reasoning and has_correct_answer) else "needs_improvement"
}
9.2 对比基准
# CoT 效果对比
results = {
"直接回答": {"准确率": 0.45},
"零样本CoT": {"准确率": 0.65},
"少样本CoT": {"准确率": 0.78},
"自洽性CoT": {"准确率": 0.85}
}
十,总结
思维链提示是释放大型语言模型推理能力的关键技术。通过引导模型展示逐步推理过程,我们可以显著提升模型在复杂任务上的表现。从基础的“一步步思考”,到高级的 ReAct 模式和自洽性思维链,这些技术为构建更强大的 AI 应用提供了有力支持。
在实际应用中,选择合适的思维链方法需要考虑任务复杂度、准确率要求和计算成本。零样本 CoT 适合简单任务,少样本和自洽性 CoT 适合需要高准确率的复杂场景。掌握这些技术,将帮助你更好地利用大型语言模型解决实际问题。
参考资料
- Chain of Thought Prompting Elicits Reasoning in LLMs(论文)
- ReAct: Synergizing Reasoning and Acting in Language Models(论文)
- Tree of Thoughts: Deliberate Problem Solving with LLMs(论文)
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)