3 核心推理模式
介绍
大型语言模型本身并不推理——它们预测 token。然而,2022-2025 年的研究表明,特定的提示模式可以激发系统性的推理行为,在复杂任务上显著提高性能。
本章涵盖了每个提示工程师应该掌握的核心推理模式,从基础的 Zero-shot 和 Few-shot 技术到 Tree of Thoughts 和 Self-Consistency 等高级方法。
LLM 推理的演变
2020: 基础提示
├─ 直接提问,直接回答
└─ 没有推理结构
2022: 思维链革命
├─ Wei 等人引入 CoT(数学 +23-50%)
├─ Kojima 等人发现 zero-shot CoT
└─ "让我们一步步思考" 成为标志性口号
2023: 高级推理
├─ Tree of Thoughts(24 点游戏 74% vs 4%)
├─ ReAct 模式用于工具使用(+34%)
├─ Self-Consistency 提高鲁棒性(+11-17%)
└─ Graph of Thoughts 出现
2024-2025: 推理模型
├─ OpenAI o1 和 o3 具有扩展思维
├─ DeepSeek R1 具有长链思维
├─ 测试时计算扩展
└─ 内在推理能力成熟
性能总结
| 模式 | 最适用 | 性能提升 | Token 成本 |
|---|---|---|---|
| Zero-Shot | 简单任务 | 基线 | 低 |
| Zero-Shot CoT | 快速推理 | +10-25% | 中等 |
| Few-Shot | 格式对齐 | +40% | 中等 |
| Few-Shot CoT | 复杂推理 | +23-50% | 高 |
| Self-Consistency | 高风险决策 | CoT +11-17% | 非常高 |
| ReAct | 工具使用,代理 | 代理任务 +34% | 高 |
| Tree of Thoughts | 多步骤问题 | 74% vs 4% (CoT) | 非常高 |
1. Zero-Shot 提示
什么是 Zero-Shot
Zero-Shot 提示不提供任何示例。模型完全依赖其预训练知识来理解和完成任务。
使用时机
| 使用场景 | Zero-Shot 为何有效 |
|---|---|
| 简单的事实查询 | 模型拥有广泛的世界知识 |
| 常见任务 | 在训练数据中有很好的代表 |
| 快速原型设计 | 无需精心制作示例即可快速迭代 |
| 强大的现代模型 | GPT-4、Claude 3、Gemini Pro 在 zero-shot 上表现出色 |
研究洞察(2024-2025)
最新研究表明,现代微调模型已经内化了推理能力,使 Zero-Shot 提示出人意料地有效:
"在 Zero-Shot CoT 设置下,最近的强大模型已经表现出强大的推理能力,Few-Shot CoT 示例的主要作用是对齐输出格式。" — EMNLP 2025 研究发现
关键发现:对于 GPT-4、Claude 3 和类似模型,当指定了输出格式时,Zero-Shot 通常在数学推理任务中匹配或超过 Few-Shot 的性能。
最佳实践
1. 明确指定任务:
<!-- ❌ 太模糊 -->
<instruction>帮我处理这段代码</instruction>
<!-- ✅ 具体 -->
<instruction>
审查这个 Java 方法的空指针异常。
列出每个风险及其行号和修复建议。
</instruction>
2. 明确指 定输出格式:
<instruction>
对以下评论进行情感分类。
输出格式:
{
"sentiment": "positive" | "negative" | "neutral",
"confidence": 0.0-1.0,
"key_phrases": ["phrase1", "phrase2"]
}
评论:[文本]
</instruction>
3. 对推理使用 Zero-Shot CoT:
<instruction>
一步步解决这个问题,然后提供最终答案。
问题:[复杂问题]
仔细思考后再回答。
</instruction>
Spring AI 实现
@Service
public class ZeroShotService {
private final ChatClient chatClient;
public ZeroShotService(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
public String classify(String text) {
return chatClient.prompt()
.system("""
你是一个情感分类器。
只回复一个词:positive、negative 或 neutral。
""")
.user(text)
.call()
.content();
}
// 用于推理的 Zero-Shot CoT
public String solveWithReasoning(String problem) {
return chatClient.prompt()
.user("""
一步步解决这个问题:
%s
仔细思考每个步骤,然后提供你的最终答案。
""".formatted(problem))
.call()
.content();
}
}
2. Few-Shot 提示
什么是 Few-Shot
Few-Shot 提示提供示例(通常是 2-8 个)来演示期望的输入-输出模式。模型通过这些示例学习来处理相似任务。