HelloAI
L4 第 2 篇 🐣 难度 🕒 14 分钟

Prompt 进阶技巧:CoT / Self-Consistency / Tree of Thoughts / Reflexion

L0-05 教你 10 个基础招。这一篇讲学术研究里的"硬核" prompt 工程——能让 GPT-4 在数学题上从 50% 升到 85%。

阿莱
2026/7/18

L0-05 教过 10 个基础 prompt 招——足够日常使用。

这一篇讲学术研究找到的高级技巧——它们能让 GPT-4 在挑战任务上的表现显著提升,是任何”严肃 AI 应用”的必备工具。

第一站:Chain-of-Thought(CoT)

最重要的进阶技巧。

朴素 Prompt

Q: 罗杰有 5 个网球。他又买了 2 罐网球,每罐有 3 个。他现在有多少网球?
A: ?

GPT-3 类模型直接答:经常(比如说 9 或 12)。

CoT Prompt

加一句”请一步步思考”:

Q: 罗杰有 5 个网球。他又买了 2 罐网球,每罐有 3 个。他现在有多少网球?
A: 让我们一步步思考。
   罗杰开始有 5 个网球。
   2 罐 × 3 个/罐 = 6 个新网球。
   5 + 6 = 11 个网球。
   答案是 11。

准确率从 18% 升到 80%(GPT-3 上的数据)。

为什么有效

让模型”显式写出推理”——它的”思考”质量会提升

直觉:模型在每一步生成时,能”看到”自己之前写的——所以它在构建答案时是渐进的,不需要一步到位。

这个看似简单的发现——改变了所有 LLM 应用的设计

第二站:Self-Consistency

CoT 有个问题:模型可能走错思路

Self-Consistency 的招数:

跑 5 次 CoT(每次温度 > 0,路径不同)
看 5 次得到的答案
取多数投票
Run 1: ... → 答案 11
Run 2: ... → 答案 11
Run 3: ... → 答案 13 (走错了)
Run 4: ... → 答案 11
Run 5: ... → 答案 11

投票:11 (4/5) → 输出 11

比单次 CoT 又涨 5-10%。代价:贵 5 倍

关键场景:数学竞赛、复杂推理、医学诊断——值得花这个钱。

第三站:Tree of Thoughts(ToT)

ToT 让模型像下棋一样搜索:

                问题

       想 3 种思路:
      路径A     路径B     路径C
        ↓         ↓         ↓
      子问题1   子问题2   子问题3
        ↓         ↓         ↓
       ...       ...       ...

每步:

  1. 生成几个候选下一步
  2. 让模型自己评估每个候选
  3. 保留有希望的,深入展开
  4. 必要时回溯

适合的问题

  • 数独、Sudoku
  • 24 点游戏
  • 多步规划
  • 长篇代码

GPT-4 + ToT 在 Game of 24 上准确率 从 4%(朴素)到 74%(ToT)

代价

慢且贵——需要几十次 LLM 调用。

第四站:Reflexion(反思)

让模型从自己的错误中学习

回合 1: 试图解决问题 → 失败
回合 2: "你刚才哪里错了?" → 模型自我反省
回合 3: "基于反省再试一次" → 通常能改正
def reflexion(task, max_iters=3):
    for i in range(max_iters):
        attempt = solve(task)
        if is_correct(attempt):
            return attempt
        feedback = critique(task, attempt)
        task = f"{task}\n\nPrevious attempt: {attempt}\nFeedback: {feedback}"
    return attempt

在 HumanEval(代码生成)上 GPT-4 从 67% 升到 91%

这是 AI Agent 的核心机制之一——LLM 不只是一次性回答,而是”反思 - 修正” 的循环。

第五站:Plan & Execute

复杂任务先规划再执行

[Phase 1: Plan]
任务: 写一份关于电动汽车市场的报告

模型规划:
1. 调研全球电车销量数据
2. 分析三大厂商(Tesla / BYD / Volkswagen)
3. 讨论中国 vs 美国 vs 欧洲市场
4. 总结趋势预测

[Phase 2: Execute]
对每个步骤分别调用 LLM 完成(可能用 Tool Use)

比直接说”写报告”质量好 10 倍

工业实践

Notion AI、Perplexity Pro、Claude Code 等产品都用类似设计。

第六站:Generated Knowledge

让模型先生成相关知识,再用知识回答

Step 1: "在回答这个问题前,请生成你知道的相关知识:"
        → 模型列出相关事实
Step 2: "基于以上知识回答:"
        → 模型用 Step 1 的知识回答

减少幻觉——因为强迫它把”知识”显式化。

第七站:Few-shot 选样的艺术

L0-05 教过 few-shot——但例子怎么选大有讲究

经验法则

  1. 多样性:例子要覆盖不同情况,不要全是相似的
  2. 典型性:选最经典、模板化的例子
  3. 难度梯度:从简单到复杂排序
  4. 错误反例:偶尔包含一个”错误然后修正”的例子,让模型学到判断
  5. 保持格式一致:每个例子的输入输出格式完全一致——这帮助模型抓住”模板”

动态 Few-shot

更高级:根据用户问题动态选最相关的例子

def dynamic_few_shot(user_question, example_pool):
    # 用 embedding 找最相关的几个例子
    user_emb = embed(user_question)
    similar = sorted(example_pool, key=lambda e: cos_sim(user_emb, e.emb))[-5:]
    return build_prompt(similar, user_question)

结合 RAG 的思想——动态拼 prompt 而不是固定。

第八站:System Prompt 设计

System prompt 是模型每次对话开头的”系统指令”—— 它对模型行为的影响远超用户每次的 prompt

Anthropic 的发现

他们公开了一些 Claude 的 system prompt 模板。 优秀 system prompt 通常包含

  1. 明确角色定义:你是什么样的助手
  2. 行为准则:诚实、谨慎、refuse 什么
  3. 格式偏好:用什么 markdown 元素,多详细
  4. 领域知识:必要的背景
  5. 错误模式警告:明确告诉模型”不要这样做”

实战例子

一个面向程序员的 system prompt:

你是一个经验丰富的资深软件工程师,专长 Python 和分布式系统。
你的回答应该:
- 直接给出代码,配最少必要的解释
- 默认假设用户懂基础编程,不要解释 if/for 等基本概念
- 用 Type Hints
- 包含错误处理
- 如果有多种方案,简要说明 trade-off
- 不要用 emoji 或表情
- 不要说"我希望这有帮助"等套话

这种 prompt 让 LLM 的输出质量翻倍——而且适用于所有后续对话。

第九站:模型间差异

不同 LLM 对 prompt 风格的”偏好”差别:

GPT-4 系

  • 喜欢 markdown
  • **bold** 和 list
  • 回答前给一段”我会这样做”的总览

Claude 系

  • 喜欢 XML 标签:<example>, <thinking>
  • 你可以让它”先 think 再 answer”
  • 更愿意承认不确定
<task>
分析这个代码并指出问题
</task>

<code>
def add(a, b): return a + c
</code>

<thinking>
让 Claude 在这里思考
</thinking>

<answer>
最终输出
</answer>

Gemini 系

  • 接近 GPT 风格
  • 多模态(图像)效果好

Llama / Mistral

  • 对格式相对宽松
  • 不要过度依赖 system prompt(开源模型支持有限)

第十站:自动化 Prompt Optimization

最前沿:让 AI 自己优化 prompt

DSPy(Stanford 2023)

把”prompt + few-shot 例子”看成”参数”,用数据自动优化

import dspy

class GenerateAnswer(dspy.Signature):
    question = dspy.InputField()
    answer = dspy.OutputField()

generator = dspy.ChainOfThought(GenerateAnswer)
# 用训练数据自动 tune prompt
optimized = dspy.BootstrapFewShot(metric=accuracy).compile(generator, trainset)

未来方向:人手写 prompt → AI 自动生成最优 prompt。

第十一站:实战的”瑞士军刀” prompt

把多种技巧组合:

你是一个 [角色]。

任务: [明确目标]

要求:
- [约束 1]
- [约束 2]

例子:
[Few-shot 例子 1]
[Few-shot 例子 2]

输入: [用户输入]

请按以下顺序回答:
1. 先用 <thinking> 标签思考一步步推理
2. 再用 <answer> 标签给最终答案
3. 在 <confidence> 标签里说你有多确信

这一套 prompt 模板能解决 80% 的复杂任务

💡 Prompt 工程的未来

2026 年的趋势—— 模型本身在”听话”上越来越强(CoT、reasoning 已经内化), 精心写 prompt 的”边际收益”在下降

预言:5 年后大部分高级 prompt 技巧会过时—— 就像汇编程序员被高级语言取代。 当下学这些仍然值得——你需要它们活到那一天。

下一篇推荐:L4-04 Agent 构建详解 —— 把 prompt 工程 + 工具调用结合起来。

📬

读到这里说明你认真在学 🎯

订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。

💬

讨论区

· 用 GitHub 账号登录评论
⚠️ Giscus 评论未配置 —— 在 src/components/Comments.astro 顶部填入 仓库 ID 和分类 ID(见组件注释里的配置步骤)。