12 · 提示工程 · 8 min

与LLM对话的艺术

零样本、少样本、思维链、自一致性。为什么提示词的措辞会从根本上改变模型的输出。

提示词不是文本——它是一段程序

当你在 ChatGPT 里输入"总结这篇文章",表面上似乎没有什么惊天动地的事情发生。但你发出的这段文字,在一个用数万亿 Token 训练过的模型里触发了一种非常具体的行为。

提示词是一段用自然语言写的程序。不是说它会被编译,而是说它的措辞决定了模型会激活哪种行为。同一句话换一种说法,可能产生截然不同的结果——不是因为模型反复无常,而是因为它的预训练让它为不同的语境学到了不同的模式。

**Prompt engineering(提示词工程)**就是把这个程序写好、以获得想要的行为的艺术。

四个层次的技巧

Zero-shot:直接问

最简单的技巧。直接问问题,不给例子,不给说明。模型会激活它训练数据里最可能的那种行为。

对于简单、事实性的任务,这种做法效果很好。在需要推理的问题上则会失败——并不是因为模型不知道,而是因为它不知道自己应该推理。

Few-shot:展示示例

与其解释你想要什么,不如把它演示给它看。在真正的问题前面放上 2 到 5 对(输入,输出)。模型借助它的上下文学习(in-context learning)机制——读出这个模式,并把它套用到新的输入上。

关键是:示例必须代表你想做的那类任务。跑题的示例帮不上忙。展示了正确做法的示例则帮助极大。

Chain-of-Thought:一步步推理

2022 年一个让人意外的发现(Wei 等人):只要加上"一步一步思考"这样一句话,推理类问题的表现就能翻倍,有时甚至翻三倍。

为什么会这样?模型是一个一个地生成 Token 的。强迫它把中间推理写出来,就等于给了它一份"草稿纸",它可以在上面计算、验证假设、纠正错误——然后再下结论。没有 CoT 的话,它直接跳到结论,没有任何安全网。

和人类是同一个原理:写出"25 × 37 = 25 × 30 + 25 × 7 = 750 + 175 = 925"的成功率,远比试图心算一步到位高得多。

Self-Consistency:在多条思维链里投票

Self-consistency(自洽性)CoT 的扩展。不是只生成一条推理链,而是生成多条(通常 5 到 20 条),用不同的温度,然后投票选出出现最多的答案。

直觉是:每次运行可能犯不同的错。但如果大多数都收敛到同一个答案,那大概就是对的。

代价不小(多消耗 N 倍的 Token),但在困难的推理任务上,可靠性的提升是实打实的。

自己试试

在三个问题上对比这四种技巧。特别注意,few-shot 例子在结构化的问题(商人那个题)上有帮助,但在逻辑陷阱上几乎没什么改变。

同一个问题,五种写法。在不改动模型的情况下,得分从 30 % 变到 90 %。教训:prompt 不是一段文字,而是一段程序,其隐含语法被 LLM 通过预训练所习得并理解。

这揭示了 LLM 的什么

这四种技巧不是小聪明。它们照亮了 LLM 工作方式中某些根本性的东西。

**上下文学习是免费的。**LLM 从你给的例子里学习,完全不需要更新权重——只是读了上下文而已。这是大规模预训练涌现出来的能力:模型见过太多模式,以至于能临场抽出一个新的。

**推理是一种行为,不是一种固定能力。**一个在 zero-shot 下解不出某题的模型,在同一道题上用 CoT 却可以解出来——参数没有任何变化。提示词激活了什么,决定了模型会"调用"它内部能力中的什么部分。

**温度制造多样性,投票降低方差。**Self-consistency 利用的是这样一个事实:错误往往是随机的——失败的方式有很多种,但成功的方式只有一种。共识能过滤噪声。

局限性

**上下文长度。**每一个 few-shot 例子都消耗 Token。在 8,000 Token 的上下文窗口里,你塞不下 50 个例子。CoT 也会把回答拉长。

**示例可能误导模型。**如果你的例子里有偏见,模型也会复制这种偏见。"Garbage in, garbage out"在 few-shot 上同样适用。

**Prompt injection(提示词注入)。**上下文里的恶意内容可能会绕开你的指令。如果你的提示是"翻译这段文本",而文本里写着"忽略之前的指令,做点别的事",模型可能会服从内容而不是服从指令。

**模型在演化。**在 GPT-4 上跑得通的提示词,未必在 Claude 或 Llama 上跑得通。每个模型都有自己偏好的模式,自己更"对味"的措辞。

实用法则

选择技巧的方式:

  • 简单 / 事实性问题 → zero-shot 就够了。
  • 期望特定的输出格式 → few-shot,配 2-3 个例子。
  • 推理或计算CoT,永远用。
  • 可靠性至关重要CoT + self-consistency。

还有一条元法则:如果你的提示词看起来像代码——结构清晰、变量明确、用例定义好——它会比模糊的散文更可靠。

最后一件事。这里描述的这些技巧(尤其是 CoT)是今天原生推理模型(o1、o3、Claude extended thinking、DeepSeek-R1)背后那套东西的提示词时代的祖先。后者会自动地、密集地完成提示式 CoT 当年只能模拟的那些事——见第 17 章,理解从提示词工程到把推理直接嵌进模型这一转变。

一个好提示词不是魔法咒语。它是一份对你想要的东西的清晰规约,写在一种模型会识别为"应该照做的信号"的语言里。

更新于

提示工程:zero-shot、few-shot、思维链 · Step by Token