Ink
登录注册

提示词不是玄学,是工程

AI爱好者·2/18/2026·3

PART 01

提示词不是玄学,是工程

提示词工程(Prompt Engineering)这个词被用烂了。从 2023 年 ChatGPT 爆火开始,各种「万能提示词模板」「一句话让 AI 效率翻倍」的内容铺天盖地,搞得很多人以为这就是个文字游戏。

但如果你真正在生产环境里用过大模型,你会知道:提示词设计是一门严肃的工程学科,它有明确的设计模式、可复现的效果差异、以及经过论文验证的理论基础。

今天不聊那些花里胡哨的「角色扮演」模板,而是拆解几个真正经典的、经过学术验证和工业实践检验的提示词范式。每一个都值得深入理解其背后的原理,而不只是复制粘贴。

PART 02

案例一:Chain-of-Thought —— 一句话让推理准确率翻倍

2022 年 Google Brain 的 Jason Wei 等人发表了一篇论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models》,这篇论文可以说是提示词工程的分水岭。

核心发现极其简单:在提示词末尾加上 "Let's think step by step" 这一句话,就能让模型在 GSM8K 数学推理基准测试上的准确率从 17.7% 飙升到 78.7%

来看一个具体对比:

❌ 标准提示(Standard Prompting)
Q: 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?
A: 11 ← 直接给答案,正确

Q: The cafeteria had 23 apples. If they used 20 to make lunch and bought 6 more, how many apples do they have?
A: 27 ← 错误!正确答案是 9
✅ CoT 提示(Chain-of-Thought)
Q: Roger has 5 tennis balls...
A: Roger started with 5 balls. 2 cans of 3 = 6. 5 + 6 = 11.

Q: The cafeteria had 23 apples...
A: Started with 23. Used 20, so 23 - 20 = 3. Bought 6 more, so 3 + 6 = 9. ✓
💬 深度解读

CoT 之所以有效,本质上是在利用 Transformer 的一个架构特性:模型的「思考深度」受限于生成的 token 数量。标准提示下,模型被迫在一次前向传播中完成所有推理;而 CoT 让模型把中间步骤外化为文本,相当于给了它更多的「计算步骤」。这不是什么魔法,而是在用生成长度换计算深度。

但要注意一个常见误区:CoT 对小模型(参数量低于 ~100B)效果很差,甚至会降低准确率。这是因为小模型的推理链本身就不可靠,「一本正经地胡说八道」反而比直接猜答案更危险。所以 CoT 是大模型时代的专属技巧。

来源:Wei et al., "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models", NeurIPS 2022

PART 03

案例二:Few-Shot Prompting —— 用例子代替说明书

Few-Shot Prompting 是 GPT-3 论文(Brown et al., 2020)的核心贡献之一。它的思路反直觉地简单:与其费劲描述你想要什么格式,不如直接给几个例子。

这个技巧在实际开发中的使用频率远超 CoT,因为它解决的是一个更普遍的问题——输出格式控制

// Few-Shot 示例:情感分析任务

输入:"这家餐厅的牛排太棒了,下次还来!"
输出:{"sentiment": "positive", "confidence": 0.95, "aspect": "food_quality"}

输入:"等了四十分钟才上菜,服务态度也很差"
输出:{"sentiment": "negative", "confidence": 0.90, "aspect": "service"}

输入:"环境一般,但价格还算公道"
输出:{"sentiment": "neutral", "confidence": 0.72, "aspect": "value"}

// 现在处理新输入:
输入:"甜品种类很多,但味道中规中矩"
输出:

这个例子展示了 Few-Shot 的精髓:三个示例同时定义了输出的 JSON 结构、字段命名规范、confidence 的取值范围、以及 aspect 的分类体系。如果你试图用自然语言把这些规则全部描述清楚,提示词长度至少翻三倍,而且模型的遵循率反而更低。

Few-Shot 示例数量 vs 效果(经验数据)
62%
0-shot
81%
1-shot
89%
3-shot
91%
5-shot
92%
8-shot
典型分类任务中,Few-Shot 示例数量与准确率的关系(示意)
💬 深度解读

Few-Shot 的收益曲线是典型的边际递减。从 0 到 3 个示例,效果提升最显著;超过 5 个之后,增益几乎可以忽略,但 token 消耗线性增长。在生产环境中,3 个精心挑选的示例通常是性价比最高的选择

选择示例时有个关键原则:示例要覆盖边界情况,而不是重复典型情况。三个都是「好评」的例子,不如一个好评、一个差评、一个中性评价。多样性比数量更重要。

来源:Brown et al., "Language Models are Few-Shot Learners", NeurIPS 2020

PART 04

案例三:System Prompt 的结构化设计 —— 被低估的工程实践

如果说 CoT 和 Few-Shot 是学术界贡献的经典范式,那 System Prompt 的结构化设计就是工业界在实战中摸索出来的最佳实践。

OpenAI 在其官方 Prompt Engineering Guide 中给出了一个核心建议:用分隔符(delimiters)明确区分提示词的不同部分。这看起来是个小技巧,但在复杂系统中,它是防止 prompt injection 和保证输出稳定性的关键。

来看一个生产级 System Prompt 的结构:

# Role
你是一个专业的代码审查助手,专注于 Python 代码质量分析。

# Context
用户会提交 Python 代码片段,你需要从以下维度进行审查:
- 代码风格(PEP 8 合规性)
- 潜在 Bug
- 性能问题
- 安全漏洞

# Output Format
以 JSON 格式返回审查结果:
```json
{
  "issues": [
    {
      "severity": "high|medium|low",
      "line": number,
      "category": "style|bug|performance|security",
      "description": "问题描述",
      "suggestion": "修复建议"
    }
  ],
  "summary": "总体评价",
  "score": 0-100
}
```

# Rules
- 只关注代码本身,不要解释 Python 基础语法
- severity 为 high 的问题必须给出具体修复代码
- 如果代码没有问题,返回空的 issues 数组
- 不要编造不存在的问题

# Examples
<example>
输入:def get_user(id): return db.query(f"SELECT * FROM users WHERE id={id}")
输出:{"issues":[{"severity":"high","line":1,"category":"security",
"description":"SQL 注入漏洞","suggestion":"使用参数化查询"}],
"summary":"存在严重安全漏洞","score":20}
</example>

这个结构遵循了一个被广泛验证的模式:Role → Context → Format → Rules → Examples。每个部分用 Markdown 标题分隔,让模型能清晰地解析不同层次的指令。

💬 深度解读

Anthropic 在其官方文档中特别强调了一个原则:"Put words in Claude's mouth"——在 Assistant 回复的开头预填内容,强制模型沿着你期望的方向生成。比如你想要 JSON 输出,可以在 assistant message 的开头预填一个 {,这比在 system prompt 里写十遍「请返回 JSON 格式」都有效。

另一个实战经验:Rules 部分用否定句式比肯定句式更有效。「不要编造不存在的问题」比「只报告真实存在的问题」更能降低幻觉率。这可能和模型训练时的 RLHF 数据分布有关——否定指令在安全训练中出现频率更高,模型对其更敏感。

PART 05

案例四:Self-Consistency —— 用「投票」对抗不确定性

Self-Consistency(自洽性采样)是 Google 的 Xuezhi Wang 等人在 2023 年提出的方法,它解决了 CoT 的一个致命缺陷:单次推理链可能走偏,而你无法判断它是否走偏了

方法很直觉:对同一个问题,用较高的 temperature(比如 0.7)生成多条推理路径,然后对最终答案做多数投票。

Self-Consistency 工作流程
路径 1 23 - 20 = 3, 然后 3 + 6 = 9
路径 2 先用掉 20 个,剩 3 个,再买 6 个,总共 9
路径 3 23 + 6 = 29, 29 - 20 = 9
路径 4 23 - 20 + 6... 嗯应该是 29
路径 5 用了 20 个还剩 3 个,加上新买的 6 个 = 9
🗳️ 投票结果:9 获得 4 票 vs 29 获得 1 票 → 最终答案:9

在 GSM8K 上,Self-Consistency + CoT 的组合将准确率从 CoT 单次采样的 78.7% 进一步提升到了 91.0%

💬 深度解读

Self-Consistency 的代价是显而易见的:API 调用次数乘以采样数。5 次采样意味着 5 倍的成本和延迟。在生产环境中,这个方法更适合用在高价值、低频次的场景——比如医疗诊断辅助、法律文书分析、金融风控决策。对于聊天机器人的日常对话,这个成本完全不值得。

一个工程上的折中方案:先用低成本模型做初次推理,只在 confidence 低于阈值时才触发 Self-Consistency 采样。这样可以把平均成本控制在 1.3-1.5 倍,同时覆盖大部分不确定性场景。

来源:Wang et al., "Self-Consistency Improves Chain of Thought Reasoning in Language Models", ICLR 2023

PART 06

案例五:ReAct —— 让模型学会「边想边做」

ReAct(Reasoning + Acting)是 Yao et al. 在 2023 年提出的框架,它解决了一个根本性问题:纯推理的模型无法获取实时信息,纯行动的模型不会规划

ReAct 的提示词模式让模型在 Thought(思考)、Action(行动)、Observation(观察)三个状态之间交替:

Question: 《奥本海默》的导演还执导过哪部获得奥斯卡最佳影片的电影?

Thought 1: 我需要先确认《奥本海默》的导演是谁。
Action 1: Search["奥本海默 导演"]
Observation 1: 《奥本海默》由克里斯托弗·诺兰执导...

Thought 2: 导演是诺兰。我需要查他的其他获奥斯卡最佳影片的作品。
Action 2: Search["克里斯托弗·诺兰 奥斯卡最佳影片"]
Observation 2: 《奥本海默》获得第96届奥斯卡最佳影片...

Thought 3: 看起来诺兰只有《奥本海默》获得了最佳影片。
Action 3: Finish["《奥本海默》是诺兰唯一获得奥斯卡最佳影片的电影"]

这个模式直接催生了后来的 AI Agent 生态。LangChain、AutoGPT、OpenAI 的 Function Calling,