思维链提示技巧


文档摘要

思维链提示技巧 思维链(Chain of Thought, CoT)是一种强大的提示策略,通过引导模型逐步推理来提升复杂问题的解决能力。 基本原理 什么是思维链 传统提示: 思维链提示: 为什么有效 分解复杂任务:将大问题拆解为小步骤 减少跳跃性错误:逐步推理降低错误率 增加透明度:可以检查推理过程 基础技巧 零样本思维链 少样本思维链 高级技巧 自我一致性 树状思维 思维树 应用场景 数学问题 逻辑推理 代码生成 优化策略 提示词模板 验证与反思 常见陷阱 过度推理 推理链断裂 错误的推理方向 思维链提示是提升大模型推理能力的关键技术,合理运用可以显著改善复杂任务的解决质量。

思维链提示技巧

思维链(Chain of Thought, CoT)是一种强大的提示策略,通过引导模型逐步推理来提升复杂问题的解决能力。

1. 基本原理

什么是思维链

传统提示:

问题:15 + 23 * 2 = ? 直接给出答案。 模型输出:61

思维链提示:

问题:15 + 23 * 2 = ? 请一步步思考。 模型输出: 1. 先计算乘法:23 * 2 = 46 2. 再计算加法:15 + 46 = 61 答案:61

为什么有效

  • 分解复杂任务:将大问题拆解为小步骤
  • 减少跳跃性错误:逐步推理降低错误率
  • 增加透明度:可以检查推理过程

2. 基础技巧

零样本思维链

# 只需添加"请一步步思考" prompt = """ Q: 罗杰有5个网球,他又买了2罐网球,每罐3个。现在他有多少个网球? A: 请一步步思考。 """ # 模型会自动生成推理链 # 1. 罗杰一开始有5个网球 # 2. 他买了2罐,每罐3个,所以买了2 * 3 = 6个 # 3. 总共有5 + 6 = 11个网球

少样本思维链

# 提供完整示例 prompt = """ Q: 王老师有15个苹果,她给5个学生每人2个苹果,还剩多少个? A: 让我们一步步思考: 1. 王老师一开始有15个苹果 2. 她给5个学生每人2个,所以给出去5 * 2 = 10个 3. 剩下15 - 10 = 5个苹果 Q: 一个矩形长12cm,宽8cm,周长是多少? A: 让我们一步步思考: 1. 矩形周长公式:2 * (长 + 宽) 2. 长12cm,宽8cm 3. 周长 = 2 * (12 + 8) = 2 * 20 = 40cm Q: 一个停车场有25个车位,已经有16辆车,还能停几辆? A: 让我们一步步思考: """ # 模型会延续模式

3. 高级技巧

自我一致性

# 多次采样,选择最一致的答案 def self_consistency(prompt, samples=5): answers = [] for _ in range(samples): response = llm.generate( prompt, temperature=0.7 # 增加多样性 ) answers.append(extract_answer(response)) # 投票选择最频繁的答案 from collections import Counter most_common = Counter(answers).most_common(1)[0][0] return most_common # 使用场景:数学计算、逻辑推理

树状思维

# 探索多个可能的推理路径 def tree_of_thoughts(problem, max_branches=3, max_depth=3): # 生成多个可能的下一步 thoughts = generate_next_steps(problem) # 选择top-k个最有希望的 selected = select_promising(thoughts, k=max_branches) # 递归探索 for thought in selected: if depth < max_depth: result = tree_of_thoughts( thought, max_branches, max_depth + 1 ) if result: return result return None

思维树

问题:证明√2是无理数 根节点:证明√2是无理数 ├─ 分支1:假设√2是有理数 │ ├─ 子分支1.1:表示为分数p/q │ │ └─ 推导:p² = 2q² │ └─ 子分支1.2:p和q互质 │ └─ 矛盾:p和q都是偶数 ├─ 分支2:使用反证法 │ └─ 与分支1类似 └─ 分支3:其他证明方法 └─ ...(可能行不通) 选择最佳路径:分支1 → 子分支1.1 → 矛盾

4. 应用场景

数学问题

math_prompt = """ 问题:一个等差数列首项是3,公差是5,求前20项的和。 让我们一步步思考: 1. 等差数列求和公式:Sₙ = n(a₁ + aₙ)/2 2. 首项a₁ = 3,公差d = 5,项数n = 20 3. 第20项:a₂₀ = a₁ + (20-1)d = 3 + 19*5 = 3 + 95 = 98 4. 求和:S₂₀ = 20*(3 + 98)/2 = 20*101/2 = 1010 答案:1010 """

逻辑推理

logic_prompt = """ 问题:小明比小红大,小红比小刚大,小刚比小丽大。谁最小? 让我们一步步思考: 1. 小明 > 小红 2. 小红 > 小刚 3. 小刚 > 小丽 综合推理: 小明 > 小红 > 小刚 > 小丽 答案:小丽最小 """

代码生成

coding_prompt = """ 问题:实现一个函数,判断一个数是否为素数 让我们一步步思考: 1. 素数的定义:只能被1和自己整除的大于1的整数 2. 边界情况:小于2的数不是素数 3. 检查方法:试除法,从2到√n 4. 优化:跳过偶数 代码实现: def is_prime(n): if n < 2: return False if n == 2: return True if n % 2 == 0: return False for i in range(3, int(n**0.5) + 1, 2): if n % i == 0: return False return True """

5. 优化策略

提示词模板

# 结构化思维链提示 def cot_prompt(question): return f""" 请一步步思考并回答以下问题。 问题:{question} 请按以下格式回答: 思考过程: [你的推理步骤] 最终答案: [你的答案] """

验证与反思

# 引导模型自我检查 verification_prompt = """ 请检查你的答案是否正确。 问题:{question} 你的答案:{answer} 请验证: 1. 答案是否满足所有条件? 2. 是否有计算错误? 3. 逻辑是否合理? 验证结果: """

6. 常见陷阱

过度推理

问题:2 + 2 = ? 错误:过于复杂的推理链 正确:直接给出答案,简单问题不需要复杂推理

推理链断裂

问题:一个复杂的多步骤问题 错误:推理链中间跳步 正确:每一步都要明确,不要省略中间步骤

错误的推理方向

问题:求圆的面积 错误:从周长公式开始推理 正确:从面积公式A = πr²开始

思维链提示是提升大模型推理能力的关键技术,合理运用可以显著改善复杂任务的解决质量。


发布者: 作者: 转发
评论区 (0)
U