Skip to content

思维链提示

Prompt Engineering - 思维链 (CoT) 提示

Section titled “Prompt Engineering - 思维链 (CoT) 提示”

思维链(Chain-of-Thought,简称 CoT)提示是一种先进的技术,能显著提升大型语言模型(LLMs)的推理能力,特别适用于需要算术、常识或符号推理的复杂任务。CoT 不是直接要求最终答案,而是鼓励模型生成一系列中间推理步骤。

本章将探讨 CoT 提示的概念、其优势以及如何实现它,以从 ChatGPT 等 LLMs 中引出更准确、更可解释的响应。

思维链提示要求 LLM 在给出最终答案之前,一步一步地输出其推理过程。这模仿了人类分解复杂问题的方式。通过外部化推理过程,模型更有可能遵循逻辑路径并得出正确答案。

主要有两种类型:

  • 零样本 CoT (Zero-shot CoT): 在问题后附加一个简单的短语,如“我们一步一步地思考。”或“展示你的推导过程。”
  • 少样本 CoT (Few-shot CoT): 在提示词中提供少量示例(即样本),每个示例都包含问题以及得出答案的详细推理步骤。

CoT 提示提供了几个显著优势:

  • 提高准确性: 特别是对于需要多步推理的任务,CoT 显著提升了 LLM 响应的准确性。
  • 增强可解释性: 生成的思维链提供了关于模型如何得出答案的见解,使过程更加透明,更容易调试。
  • 更好地分解问题: 它鼓励模型将复杂问题分解为更小、更易管理的步骤。
  • 鲁棒性: 使用 CoT 的模型有时对输入提示词的细微变化更具鲁棒性。

这是尝试 CoT 最简单的方式。你只需在你的提示词末尾附加一个触发短语。

User: Roger has 5 tennis balls. He buys 2 more cans of tennis balls. Each can has 3 tennis balls. How many tennis balls does he have now? Let's think step by step.
ChatGPT (预期 CoT 输出):
好的,让我们分解一下:
1. Roger 最初有 5 个网球。
2. 他又买了 2 罐网球。
3. 每罐有 3 个网球。
4. 因此,新买的网球数量是 2 罐 * 3 个/罐 = 6 个网球。
5. 总共,Roger 现在拥有的网球数量是他最初的 5 个 + 新的 6 个 = 11 个网球。
最终答案是 11。

提供一个或多个完整的问题示例,包括其推理链和最终答案。这能更强有力地引导模型。

User:
Q: Natalia sold clips to 48 of her friends. She had 12 clips left. How many clips did she have at first?
A: Natalia sold 48 clips. She had 12 clips left. So, at first, she had the clips she sold plus the clips she had left. 48 + 12 = 60. The final answer is 60.
Q: A juggler can juggle 16 balls. Half of the balls are golf balls, and half of the golf balls are blue. How many blue golf balls are there?
A: The juggler can juggle 16 balls. Half of the balls are golf balls, so there are 16 / 2 = 8 golf balls. Half of the golf balls are blue, so there are 8 / 2 = 4 blue golf balls. The final answer is 4.
Q: The cafeteria had 23 apples. If they used 20 to make lunch and bought 6 more, how many apples do they have?
A: Let's think step by step.

然后,模型会继续对最后一个问题进行推理。

为了最大限度地发挥 CoT 提示的效果:

  • 用于复杂任务: CoT 对需要推理、计算或多步推断的问题最为有益。
  • 确保少样本示例的清晰度: 你示例中的推理步骤应该清晰、逻辑分明且正确。
  • 尝试不同措辞: 对于零样本 CoT,尝试不同的触发短语(例如,“展示你的推导过程”,“解释你的推理。”)。
  • 考虑模型能力: 更大、能力更强的模型(例如,GPT-4)倾向于从 CoT 中获益更多,并能遵循更复杂的推理。
  • 验证推理过程: 即使使用 CoT,模型在推理步骤中也可能出错。务必审阅关键输出。

应用示例:用于 CoT 问题解决的 Python 脚本

Section titled “应用示例:用于 CoT 问题解决的 Python 脚本”

让我们使用 Python 向 OpenAI API 发送一个零样本 CoT 提示词。

import openai
import os
# 安全地加载你的 API 密钥
# openai.api_key = os.getenv("OPENAI_API_KEY")
# 对于本示例,请将 'YOUR_API_KEY_HERE' 替换为你的实际密钥:
openai.api_key = 'YOUR_API_KEY_HERE'
def solve_with_cot(problem_statement):
try:
# 附加一个零样本 CoT 触发短语
prompt_content = f"{problem_statement} Let's think step by step."
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo", # 或使用更新、能力更强的模型,如 gpt-4,处理复杂推理
messages=[
{"role": "system", "content": "You are a helpful assistant that solves problems by showing your reasoning steps."},
{"role": "user", "content": prompt_content}
],
max_tokens=300, # 确保有足够的 token 用于推理和答案
temperature=0.2, # 数值越低,推理越专注、分析性越强
n=1,
stop=None
)
return response.choices[0].message['content'].strip()
except Exception as e:
return f"发生错误: {e}"
# 示例用法:
math_problem = "If a train travels at 60 miles per hour, how many miles will it travel in 2.5 hours?"
solution = solve_with_cot(math_problem)
print(f"问题: {math_problem}")
print(f"使用 CoT 的解决方案:\n{solution}")
问题: If a train travels at 60 miles per hour, how many miles will it travel in 2.5 hours?
使用 CoT 的解决方案:
好的,我们一步一步地思考。
1. 火车的速度是每小时 60 英里。这意味着在 1 小时内,它行驶 60 英里。
2. 我们需要计算它在 2.5 小时内行驶的距离。
3. 要计算距离,我们将速度乘以时间:距离 = 速度 × 时间。
4. 速度 = 60 英里/小时。
5. 时间 = 2.5 小时。
6. 距离 = 60 英里/小时 × 2.5 小时。
7. 让我们计算 60 × 2.5:
60 × 2 = 120
60 × 0.5(即 60 的一半)= 30
120 + 30 = 150。
8. 因此,火车在 2.5 小时内将行驶 150 英里。
最终答案是 150 英里。

思维链提示是提示词工程中一种强大的技术,能显著增强 LLMs 的推理能力。通过引导模型阐述其中间步骤,CoT 能为复杂任务带来更准确、更可靠且更可解释的结果。

当你使用 LLMs 解决更具挑战性的问题时,将 CoT 提示(无论是零样本还是少样本)纳入你的工具箱,可以解锁新的性能水平。为了更深入地理解,可以参考关于思维链提示的原始研究论文(例如,Wei 等人,Kojima 等人的研究)。