7 个 Prompt 框架汇总:从 Chain of Thought 到 ReAct + PoT
作者:AI 开发者社区
标签:#Prompt工程 #CoT #ReAct #AI技巧 #思维链
阅读时长:13 分钟
前言
同样是问 AI,"帮我写个排序算法"和"用 Python 实现一个快速排序函数,要求原地排序、时间复杂度 O(n log n)",得到的答案质量天差地别。
差距在哪?Prompt 设计。
2026 年,Prompt Engineering 已经从"聊聊天"进化为一门系统工程学科。本文不灌水,直接带你搞懂 7 个核心 Prompt 框架,每个都附可复制的模板和实测对比。
目录
- Zero-Shot / Few-Shot ------ 基本功
- Chain of Thought(CoT)------ 让 AI 会推演
- ReAct --- 推理 + 行动循环
- Tree of Thoughts(ToT)------ 多路径探索
- Program of Thoughts(PoT)------ 用代码推理
- Plan-and-Solve --- 先规划再执行
- Self-Consistency --- 多数投票法
- 框架对比 & 场景选型指南
1. Zero-Shot / Few-Shot ------ 所有框架的基石
Zero-Shot :直接提问,不给示例。
Few-Shot:给 2-3 个示例,让模型学会"格式"和"风格"。
markdown
## Zero-Shot 示例
问题:请将以下英文翻译成中文
"The future belongs to those who believe in the beauty of their dreams."
## Few-Shot 示例
你是一个专业的技术文档翻译。请将以下英文翻译成中文,要求:
- 保持技术术语的准确性
- 中文自然流畅
- 格式保持一致
示例 1:
E: "The system uses a transformer architecture."
C: "该系统采用 Transformer 架构。"
示例 2:
E: "Fine-tuning improves downstream task performance."
C: "微调可以提升下游任务的性能。"
现在请翻译:
E: "The mixture of experts approach reduces computational cost."
适用场景:翻译、分类、格式化输出等"格式 > 推理"的任务。
2. Chain of Thought(CoT)------ 思维链推演
核心思想:引导模型"一步步想",而不是直接给答案。
markdown
## 标准 Prompt(不加 CoT)
问题:我有 15 个苹果,给了小明 3 个,又买了 8 个,然后给了小红一半,
最后又吃了 2 个。我还剩几个?
模型可能直接说:8 个(❌ 猜的)
## CoT Prompt
问题:我有 15 个苹果,给了小明 3 个,又买了 8 个,然后给了小红一半,
最后又吃了 2 个。我还剩几个?
让我们一步步思考:
1. 初始:15 个
2. 给小明 3 个后:15 - 3 = 12 个
3. 买 8 个后:12 + 8 = 20 个
4. 给小红一半后:20 / 2 = 10 个
5. 吃 2 个后:10 - 2 = 8 个
答案:8 个 ✅
CoT 实战模板
python
# Python 中使用 CoT 的系统提示词
SYSTEM_PROMPT = """你是一个严谨的推理助手。在回答任何需要推理的问题时,
请遵循以下格式:
步骤 1:分析问题,识别关键信息
步骤 2:列出已知条件和待求目标
步骤 3:逐步推导,每步标注逻辑
步骤 4:验证答案的合理性
最终答案:[你的答案]
"""
实测效果(GSM8K 数学题集):
| Prompt 方式 | 准确率 |
|---|---|
| Zero-Shot | 47.9% |
| CoT | 74.5% |
| CoT + Few-Shot | 82.3% |
只需加一句"Let's think step by step",准确率从 48% 飙升到 74%。这就是思维链的威力。
3. ReAct --- 推理 + 行动循环
核心思想 :让模型交替执行 推理(Thought) 和 行动(Action),像人一样"边想边做"。
ReAct 循环:
Thought → Action → Observation → Thought → Action → ...
对比:
CoT:推理链(纯脑力)
ReAct:推理 + 工具调用(脑力 + 动手)
ReAct 实战:让 LLM 搜索 + 推理
python
from langchain.agents import create_react_agent
from langchain.tools import Tool
tools = [
Tool(name="搜索", func=search_web, description="搜索互联网获取实时信息"),
Tool(name="计算器", func=calculator, description="执行数学计算"),
]
react_prompt = """你是一个能使用工具的推理助手。
可用工具:
- 搜索:搜索互联网获取实时信息
- 计算器:执行数学计算
请用以下格式回答:
Thought: [你的思考过程]
Action: [工具名称]
Action Input: [工具输入]
Observation: [工具返回结果]
...(可重复)
Thought: 我已获得足够信息
Final Answer: [最终答案]
问题:{question}
"""
agent = create_react_agent(llm, tools, react_prompt)
result = agent.invoke({"question": "2026年特斯拉股价相比2025年涨了多少?"})
输出示例:
Thought: 我需要查询特斯拉2026年和2025年的股价
Action: 搜索
Action Input: "特斯拉 2025 股价"
Observation: 2025年均价约 $250
Thought: 还需要2026年数据
Action: 搜索
Action Input: "特斯拉 2026 股价"
Observation: 2026年均价约 $320
Thought: 现在计算涨幅
Action: 计算器
Action Input: (320 - 250) / 250 * 100
Observation: 28.0
Final Answer: 特斯拉2026年股价相比2025年上涨了约28%
4. Tree of Thoughts(ToT)------ 多路径探索
核心思想 :不只一条推理链,而是同时探索多条路径,选出最优解。
CoT: A → B → C → 答案(一条线)
ToT: A → B1 → C1 → 答案1
A → B2 → C2 → 答案2 → 评估 → 选最优
A → B3 → C3 → 答案3
ToT 实战:解决"24点游戏"
python
def tree_of_thoughts(llm, problem: str, num_branches: int = 3):
"""
ToT 实现:生成多分支、评估、回溯
"""
# 阶段 1:生成多条推理分支
branches = []
for i in range(num_branches):
prompt = f"""问题:{problem}
请提出{num_branches}种不同的解题思路中的第{i+1}种。
注意:尽量与之前的思路不同。"""
branch = llm.generate(prompt)
branches.append(branch)
# 阶段 2:评估每条分支
evaluations = []
for branch in branches:
prompt = f"""思路:{branch}
请评估这条思路的可行性(1-10分),并说明理由。"""
eval_result = llm.generate(prompt)
evaluations.append(extract_score(eval_result))
# 阶段 3:选最佳分支展开
best_idx = evaluations.index(max(evaluations))
return explore_branch(branches[best_idx], depth=3)
ToT 适用场景:需要创造性、多方案对比的问题(写作大纲、算法设计、策略规划)。
5. Program of Thoughts(PoT)------ 用代码推理
核心思想 :数学/逻辑推理不要用自然语言,生成代码执行更准确。
CoT:一步步心算 → 容易出错
PoT:生成 Python 代码 → 执行得精确结果
PoT 实战
python
def pot_solve(llm, question: str):
"""
使用 PoT 解决数学问题
"""
prompt = f"""你将解决以下数学问题。不要用文字推理,而是编写一个
Python 函数来求解。
问题:{question}
要求:
1. 编写一个完整的 Python 函数,接受必要参数
2. 在函数末尾调用它并打印结果
3. 代码中加注释说明每一步的计算逻辑
```python
"""
code = llm.generate(prompt)
# 安全沙箱执行
result = execute_in_sandbox(code)
return result
# 示例
question = "一个水池,A管4小时注满,B管6小时放空,两管同时开,几小时注满?"
# PoT 生成的代码:
code = """
# A管每小时注水 1/4,B管每小时放水 1/6
# 两管同时开,每小时净注水:1/4 - 1/6 = 1/12
# 注满时间:1 / (1/12) = 12 小时
def solve():
rate_a = 1/4 # A管每小时注水量
rate_b = 1/6 # B管每小时放水量
net_rate = rate_a - rate_b # 净注水速率
hours = 1 / net_rate
print(f"需要 {hours} 小时注满")
return hours
solve() # 输出:需要 12.0 小时注满
"""
PoT vs CoT 实测(GSM8K):
| 方法 | 准确率 |
|---|---|
| CoT | 74.5% |
| PoT | 84.3% |
代码推理比文字推理准 10 个百分点。
6. Plan-and-Solve --- 先规划再执行
核心思想:把复杂任务拆成子任务,逐个击破。
markdown
## Plan-and-Solve 示例
问题:帮我在本地部署一个 AI 客服系统,要求支持中文、
能查询知识库、自动记录对话。
请按以下格式回答:
【总体计划】
1. [子任务1] 环境准备
2. [子任务2] 模型选型与部署
3. [子任务3] 知识库搭建
4. [子任务4] 对话系统集成
5. [子任务5] 部署测试
------
【执行】
### 步骤1:环境准备
- 安装 Docker: `curl -fsSL https://get.docker.com | sh`
- 安装 Python 3.12: `conda create -n ai-chat python=3.12`
- GPU 驱动检查: `nvidia-smi`
### 步骤2:模型选型
- 推荐:Qwen2.5-7B-Instruct(中文能力强,4-bit 量化仅需 4GB 显存)
- 部署方式:Ollama + vLLM
- 启动命令:...
### 步骤3:知识库搭建
...
Plan-and-Solve 让模型的回答从"东一句西一句"变成"有层次有逻辑"。
7. Self-Consistency --- 多数投票法
核心思想:同一个问题问 N 次(用不同措辞),取多数答案。
python
def self_consistency(llm, question: str, n_samples: int = 5):
"""
多次采样 + 投票,取最一致答案
"""
answers = []
for i in range(n_samples):
# 使用不同的 temperature 增加多样性
answer = llm.generate(question, temperature=0.7 + i * 0.05)
answers.append(normalize_answer(answer))
# 投票:取出现频率最高的答案
from collections import Counter
final_answer = Counter(answers).most_common(1)[0][0]
return {
"final_answer": final_answer,
"all_answers": answers,
"confidence": Counter(answers).most_common(1)[0][1] / n_samples,
}
效果实测(ARC 推理题):
| 采样次数 | 准确率 |
|---|---|
| 1(单次 CoT) | 73.5% |
| 5(Self-Consistency) | 82.1% |
| 10 | 85.7% |
5次投票就能提升 ~9 个百分点,成本仅为 5 倍 token 消耗,性价比极高。
8. 框架对比 & 场景选型指南
┌──────────────────────────────────────────────────────────┐
│ 7 种 Prompt 框架对比 │
│ │
│ Zero/Few-Shot ████ 格式控制 / 简单任务 │
│ CoT ██████ 逻辑推理 / 数学题 │
│ ReAct ██████████ 需要工具调用 │
│ ToT ████████████ 多方案对比 / 创意任务 │
│ PoT ██████████ 数学 / 代码生成 │
│ Plan-Solve ██████████ 复杂多步骤任务 │
│ Self-Consistency ██████ 高精度推理 │
│ │
└──────────────────────────────────────────────────────────┘
场景选型速查表
| 你的任务 | 推荐框架 | 为什么 |
|---|---|---|
| 翻译 / 格式化 / 分类 | Zero-Shot / Few-Shot | 不需要推理 |
| 数学题 / 逻辑推理 | CoT + PoT | 代码执行更准确 |
| 信息检索(需要搜索) | ReAct | 支持工具调用 |
| 创意写作 / 方案设计 | ToT | 多路径探索最优 |
| 复杂多步骤操作 | Plan-and-Solve | 结构化拆分 |
| 高精度场景 | Self-Consistency | 投票纠错 |
| 综合(最佳实践) | CoT + ReAct + Self-Consistency | 三合一 |
💡 终极模板:三合一 Prompt
markdown
你是一个严谨且功能齐全的推理助手。
### 你的能力
- 逻辑推理:使用思维链(Chain of Thought)逐步推导
- 工具使用:需要实时信息时可以搜索网络
- 自我验证:如果不够确定,给出多种可能并说明你最倾向哪个
### 回答格式
## 问题分析
[简要分析问题,识别关键信息]
## 推理过程
步骤 1: ...
步骤 2: ...
步骤 3: ...
## 工具调用(如需要)
**搜索**: [搜索内容]
**结果**: [搜索结果]
## 最终答案
[答案]
## 置信度
[高/中/低] - [简要说明]
总结
┌──────────────────────────────────────────────┐
│ Prompt 工程进阶要点 │
│ │
│ 📌 基础功:Zero-Shot / Few-Shot 格式控制 │
│ 🧠 推理:CoT 思维链让 AI 学会"想一想" │
│ 🔧 行动:ReAct 让 AI 能查能算 │
│ 🌳 探索:ToT 多路径选择最优解 │
│ 💻 代码:PoT 用代码代替文字推理 │
│ 📋 规划:Plan-Solve 分解复杂任务 │
│ 🗳️ 纠错:Self-Consistency 投票提精度 │
│ │
│ 🏆 终极组合:CoT + ReAct + Self-Consistency │
└──────────────────────────────────────────────┘
延伸阅读:
- Chain of Thought 论文:arXiv:2201.11903
- ReAct 论文:arXiv:2210.03629
- Tree of Thoughts 论文:arXiv:2305.10601
- LangChain ReAct Agent:python.langchain.com
如果这篇对你有帮助,欢迎点赞、收藏、关注!下一篇:《我的 Prompt 踩坑日记:100 条错误用法与正确姿势》