Prompt Engineering 提示工程
五层读懂一个词。这次拆的是:Prompt Engineering--与 LLM 对话的系统方法论。不只是「写得好一点」,而是用 Few-shot(示例教学)、Chain-of-Thought(思维链)、Self-Consistency(多重验证)、角色 System Prompt(身份设定)等技巧,系统性地激发 LLM 的隐藏能力。一个 prompt 能差 30% 准确率——这不是玄学,是工程。
L1 · 一句话点破
Prompt Engineering = 设计 LLM 输入以最大化输出质量的系统工程。核心技巧:Few-shot(给示例教模型怎么做)、Chain-of-Thought(让模型一步步推理)、Self-Consistency(采多个答案投票)、System Prompt(设定角色和能力边界)、格式约束(强制结构化输出)。从「跟模型聊天」到「把模型当可编程推理引擎」——差一个 prompt 的距离。
L2 · 通俗类比
LLM 像一个极其聪明但「缺心眼」的实习生:
- 能力超强(能做推理、翻译、编程)
- 但不会「读心」——你需要说清楚要什么
- 也不会「自我纠正」——需要引导它检查
- 更不会「主动问」——给了模糊指令就蒙
Prompt Engineering = 带实习生的一套方法论:
1. Few-shot = 给示例
❌ "把这句话翻译成英文"
✅ "翻译成英文:
Q: 今天天气很好 → A: The weather is great today.
Q: 我喜欢编程 → A: I like programming.
Q: 我们明天开会 → A:"给了 2 个示例后,模型学会了你的翻译风格。
2. Chain-of-Thought = 要求写步骤
❌ "354 + 287 = ?"
✅ "354 + 287 = ?
一步步算:
354 + 200 = 554
554 + 80 = 634
634 + 7 = 641
所以答案是 641"模型被引导着算,比直接猜准确率高 30%+。
3. Self-Consistency = 多算几遍投票
同样的题跑 5 次 (temperature > 0)
Run 1: 641
Run 2: 641
Run 3: 641
Run 4: 642
Run 5: 641
→ 投票: 6414. System Prompt = 给角色
❌ "帮我写代码"
✅ System: "你是资深 Python 工程师,代码要加类型标注、docstring、错误处理"
User: "写一个快速排序"核心洞察:
LLM 推理分两步:理解意图 + 执行能力。Prompt Engineering 负责「理解意图」这一步——意图越清晰,执行越好。
L3 · 正经定义
Prompt Engineering:系统性设计和优化 LLM 输入(prompt)以提升输出质量的工程实践。包括:
- Few-shot Prompting:在 prompt 中提供 k 个输入-输出示例
- Chain-of-Thought (CoT):通过示例或指令引导模型分步推理
- Self-Consistency:对同一问题采样多个答案,多数投票
- Role Prompting:用 System Prompt 设定模型角色和能力边界
- Format Constraints:约束模型输出格式(JSON/Markdown/代码块)
- Prompt Templates:可复用的参数化 prompt 模板
参考资料:
- 📄 Wei et al., Chain-of-Thought Prompting Elicits Reasoning in Large Language Models, NeurIPS 2022
- 📄 Wang et al., Self-Consistency Improves Chain of Thought Reasoning in Language Models, ICLR 2023
- 📄 Brown et al., Language Models are Few-Shot Learners, NeurIPS 2020 (GPT-3, Few-shot)
- 📄 Kojima et al., Large Language Models are Zero-Shot Reasoners, NeurIPS 2022 (Zero-shot CoT)
- 📝 OpenAI Prompt Engineering Guide:https://platform.openai.com/docs/guides/prompt-engineering
- 📝 Anthropic Prompt Library:https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/
L4 · 原理深挖
4.1 Few-shot Prompting
核心:在 prompt 中提供 k 个 (输入, 输出) 示例,模型通过 in-context learning 学会模式。
为什么有效:
- 模型不需要梯度更新,从示例中「临时学会」格式和模式
- 注意力机制从示例中提取 pattern(归纳头)
- 示例纠正了模型的先验偏向
示例设计原则:
✅ 格式一致: 所有示例用相同格式
✅ 覆盖边界: 包含简单和复杂 case
✅ 多样化: 示例覆盖不同输入类型
✅ 顺序重要: 典型 case 放最后(近因效应)
✅ 标注准确: 示例答案必须正确(错了反而误导)k 的选择:
| k | 效果 | 开销 |
|---|---|---|
| 0 (zero-shot) | 基线 | 最小 |
| 1-3 | 显著提升 | 小 |
| 4-8 | 继续提升 | 中 |
| 8+ | 收益递减 | 大 |
GPT-4 时代:zero-shot 已经很强,few-shot 对格式/风格约束仍有效。
4.2 Chain-of-Thought (CoT)
核心:引导模型在给出最终答案前,先输出推理步骤。
两种方式:
1. Few-shot CoT:示例中包含推理链
Q: 小明有 5 个苹果,小红多 3 个,总共几个?
A: 小红有 5 + 3 = 8 个。总共 5 + 8 = 13 个。答案是 13。
Q: 一个长方形长 8 宽 5,周长是多少?
A: [让模型自己生成推理链]2. Zero-shot CoT:加一句"Let's think step by step"
Q: 354 + 287 = ?
A: Let's think step by step.
[模型自动输出推理链]效果(数学推理 GSM8K):
| 方法 | GPT-3 175B | PaLM 540B |
|---|---|---|
| Standard | 17.7% | 21.4% |
| CoT | 58.1% | 56.9% |
CoT 为什么有效:
- 把复杂问题分解为子问题(问题分解)
- 中间步骤出错可被后续步骤纠正(自我纠错)
- 扩展了模型的计算深度(相当于多了几个 forward pass 的思考)
什么时候 CoT 最有效:
- ✅ 数学推理(多步计算)
- ✅ 逻辑推理(三段论、组合问题)
- ✅ 常识推理(需要多步推演)
- ❌ 简单事实问答(单步即可,CoT 浪费)
- ❌ 情感/创意任务(不需要逻辑链)
4.3 Self-Consistency
核心:对同一问题用 temperature > 0 采样 k 个 CoT 推理路径,多数投票选最终答案。
流程:
同一问题 → CoT 推理 × k 次 (temperature > 0)
Path 1: ... → 答案 A
Path 2: ... → 答案 A
Path 3: ... → 答案 B
Path 4: ... → 答案 A
Path 5: ... → 答案 A
多数投票: 答案 A (4/5)为什么有效:
- 单次 CoT 可能因为采样随机性走错路
- 多路径降低方差
- 多数正确的路径 > 少数错误的路径
效果:
| 方法 | GSM8K | 提升 vs CoT |
|---|---|---|
| CoT | 58% | - |
| CoT + SC (k=5) | 72% | +14% |
| CoT + SC (k=10) | 76% | +18% |
| CoT + SC (k=40) | 78% | +20% |
k 的选择:5-10 性价比最高,k>20 收益递减。
4.4 Role Prompting (System Prompt 设计)
核心:用 System Prompt 设定模型的身份、能力、行为边界。
System Prompt 设计要素:
你是 <角色>,职责是 <职责>。
你具备 <能力>。
你必须遵循 <规则>。
你的回答格式是 <格式>。
你绝对不能 <禁止行为>。示例(数据分析助手):
System:
你是资深数据分析师。专长:Python、SQL、统计学。
规则:
1. 代码要有详细注释
2. 分析结论要有数据支撑
3. 不确定性要明确标注
4. 不要做没有数据支持的推测
格式:
- 分析思路: 段落说明
- 代码: ```python ... ```
- 结论: bullet points
绝对禁止:
- 编造不存在的数据
- 在不确定的问题上给出确定答案System Prompt 的位置效应:
- 开头(Primacy):角色和核心规则最重要,放最前面
- 结尾(Recency):最后一行指令权重高
- 中间(Lost):容易被忽略
设计原则:
✅ 角色明确、具体("资深 Python 后端工程师" > "程序员")
✅ 规则用否定句清晰表达禁止项
✅ 关键约束重复强调(开头+结尾各一遍)
✅ 正面示例 > 负面示例("你应该输出 JSON" > "不要输出纯文本")
❌ 规则太多(>10 条)模型可能忽略中间
❌ 自相矛盾的规则
❌ 放在中间位置不重要4.5 格式约束
核心:控制 LLM 的输出格式。
方法 1: 自然语言约束
请用 JSON 格式输出:
{"name": "张三", "age": 30}— 有效但不完美(格式错率 ~5-15%)。
方法 2: 结构化 Prompt(XML/JSON 标记)
<答案>
<名字>张三</名字>
<年龄>30</年龄>
</答案>— 比自然语言好(格式错率 ~2-5%)。
方法 3: Function Calling / Structured Generation
response = llm.gen(json_schema={"name": str, "age": int})— 100% 格式正确。
4.6 Prompt 模板与变量注入
模板化 Prompt:
from langchain import PromptTemplate
template = PromptTemplate(
template="""
你是{role}。
参考文档:
{context}
问题:{question}
回答要求:
1. 基于参考文档
2. 不确定时说不知道
3. 用中文回答
""",
input_variables=["role", "context", "question"],
)
prompt = template.format(
role="法律顾问",
context=legal_docs,
question="合同中第 5 条的违约责任是什么?",
)变量注入顺序:
- Context 放最前(模型需要先理解)
- Question 放最后(近因效应)
- Role 放 system prompt(最高优先级)
4.7 Prompt 调试与 A/B 测试
Prompt 调试方法论:
- 基线测试:先用最简单的 prompt 跑,记录结果
- 单变量修改:一次只改一个变量(如改 system prompt、加 few-shot)
- A/B 对比:旧 prompt vs 新 prompt,相同测试集跑分
- 边界测试:测试极限输入(超长文本、特殊字符、对抗性输入)
- 回归测试:改 prompt 后检查旧 case 是否退化
评估维度:
- 准确率(事实性任务)
- 格式正确率(结构化输出)
- 一致性(相同问题重复问)
- 鲁棒性(输入微小变化是否稳定)
- Token 效率(输出长度合理吗)
4.8 高级技巧
技巧 1: 思维树(Tree of Thoughts)
把 CoT 扩展为树,探索多条推理路径:
根问题
├─ 步骤1-A → 步骤2-A → 结论 A
├─ 步骤1-A → 步骤2-B → 结论 B
├─ 步骤1-B → 步骤2-C → 结论 C
└─ 步骤1-C → 步骤2-D → 结论 D
选最优路径技巧 2: ReAct Prompt
Thought: ... Action: ... Observation: ...
→ 多轮推理+工具调用技巧 3: 链式提示(Prompt Chaining)
Prompt 1 → 输出 1 → Prompt 2(包含输出 1) → 输出 2 → ...适合多阶段任务(大纲→撰写→润色→校对)。
技巧 4: 对比提示(Contrastive)
好的回答: [示例] 差的回答: [示例] 问题: [实际]模型从对比中学习偏好。
技巧 5: 情绪提示(Emotion Prompt)
"这对我的职业生涯很重要" → 模型更认真(论文证实有效)4.9 Prompt Engineering 的局限
局限 1: Prompt 不能突破模型能力上限。GPT-2 写不出 GPT-4 的质量,prompt 再好也没用。
局限 2: Prompt 的脆弱性。微小改动(加个空格、换个词)可能导致输出显著变化。
局限 3: 模型版本依赖。GPT-4 0806 的 prompt 在 GPT-4 1106 上未必有效——需要回归测试。
局限 4: 不保证一致性。temperature > 0 时相同 prompt 可能不同输出。
局限 5: Prompt 隐私泄漏。prompt 中可能包含敏感数据,注意 API 调用安全。
局限 6: Prompt Injection。用户输入中插入恶意指令绕过限制。需要防御。
局限 7: 长 Prompt 的 token 成本。复杂 prompt 消耗大量 token(system prompt 500+ token 常见)。
局限 8: 不能替代训练。prompt 是「临时记忆」,训练是「长期记忆」。关键能力需要训练。
L5 · 沿革与坑
5.1 沿革
- 2020-05:GPT-3 论文(Brown et al.),揭示 in-context learning / few-shot
- 2022-01:Chain-of-Thought(Wei et al.),CoT 革命
- 2022-05:Zero-shot CoT(Kojima et al.),"Let's think step by step"
- 2023-03:Self-Consistency(Wang et al.),多路径投票
- 2023-05:Tree of Thoughts(Yao et al.),思维树
- 2023-10:ReAct Prompt(Yao et al.),推理+行动
- 2024:Automatic Prompt Optimization(APO/DSPy),自动化 prompt 优化
- 2024-2025:System Prompt 设计成为工程标配,Prompt Libraries 兴起
5.2 常见坑
坑 1: few-shot 示例答案错了。模型学到错误模式。要验证每个示例的正确性。
坑 2: 以为 CoT 对所有任务都有用。简单问题 CoT 浪费 token。按任务类型判断。
坑 3: temperature=0 时 Self-Consistency 无意义。多样性来源是 temperature > 0。
坑 4: System Prompt 关键规则放中间。被 Lost in the Middle。要放开头/结尾。
坑 5: prompt 太依赖具体模型版本。GPT-4 6 月的 prompt 12 月可能退化。要持续验证。
坑 6: prompt 缺乏版本管理。改了 prompt 没记录,出问题无法回滚。要 git 管理 prompt。
坑 7: 忽视 token 成本。500 token 的 system prompt + few-shot + CoT,成本是简单 prompt 的 10x。要评估 ROI。
坑 8: Prompt Injection 无防御。用户输入中的指令覆盖 system prompt。要做输入清洗和结构分离。
坑 9: 盲信 prompt engineering 解决一切。prompt 是界面优化,模型本身的能力是上限。
坑 10: 不做 A/B 测试。凭感觉改 prompt,不知道是否真的变好了。要量化评估。
坑 11: 忽略输出长度和质量的关系。CoT 引导模型输出更多 token,但不一定更好。中间 token 可能是废话。
坑 12: 把 prompt 当代码对待。prompt 不是代码,微小变化可能有巨大影响(emergent behavior)。修改要谨慎。
5.3 面试怎么考
- Few-shot vs Zero-shot? 答:Few-shot 在 prompt 里放示例,通过 in-context learning 教模型格式/模式;Zero-shot 不放,靠模型自身能力。复杂格式/小众任务 few-shot 效果好。
- CoT 为什么有效? 答:分解复杂问题为子问题、增加推理步数(相当于更多计算)、中间错误可被纠正。数学/逻辑推理提升最大。
- Self-Consistency 怎么提升效果的? 答:单次 CoT 可能被采样随机性影响走错路。多次采样投票降低方差,多数正确路径胜出。
- System Prompt 怎么设计? 答:角色+职责+规则+格式+禁止。关键规则放开头/结尾(避开 Lost in the Middle)。规则具体、可验证。
- 怎么评估一个 prompt 好不好? 答:A/B 测试(旧 vs 新、相同测试集)、准确率/格式正确率/一致性/Robustness/Token 效率。持续监控。
速记卡
核心技巧:
| 技巧 | 方法 | 提升 |
|---|---|---|
| Few-shot | k 个示例 | +10-20% |
| CoT | 分步推理 | +20-40% |
| Self-Consistency | k 次采样投票 | +10-20% |
| System Prompt | 角色设定 | +5-15% |
| Format Constraint | JSON/XMl/Func Call | 格式 100% |
System Prompt 设计模板:
你是 <角色> | 职责: <职责> | 规则: <规则> | 格式: <格式> | 禁止: <禁止>CoT vs Standard:
| 任务 | Standard | CoT |
|---|---|---|
| GSM8K 数学 | 18% | 58% |
| 逻辑推理 | 35% | 65% |
| 事实问答 | 72% | 72%(不变) |
Self-Consistency 效果:
| k | GSM8K | 提升 |
|---|---|---|
| 1 (CoT) | 58% | - |
| 5 | 72% | +14% |
| 10 | 76% | +18% |
| 40 | 78% | +20% |
Prompt 调试流程:
基线 → 单变量修改 → A/B 测试 → 边界测试 → 回归测试 → 部署监控一句话记忆:Prompt Engineering = 系统性地设计 LLM 输入以最大化输出质量。Few-shot(示例教学)+ CoT(分步推理)+ Self-Consistency(多路径投票)+ System Prompt(角色设定)+ Format Constraints(结构化输出)是五大核心技巧。CoT 对数学/推理提升 20-40%,SC 叠加再提 10-20%。局限:不突破模型能力上限、prompt 脆弱性、版本依赖、Injection 攻击。本质是把模型当可编程推理引擎而非黑盒聊天机器人。评估靠 A/B 测试,管理靠版本控制,优化靠量化指标。
上一篇:SGLang -- 推理引擎的选择,Prompt Engineering 决定了你能从引擎中榨出多少能力。下一篇:HuggingFace 生态 -- 从模型到部署的完整开源生态。