Basics
prompting LLMs 的基本概念,以及 zero-shot / few-shot prompting
Prompting LLMs
你可以通过简单的 prompt 获得大量结果,但结果的质量与你提供的信息数量和完善度有关。一个 prompt 可以包含你传递到模型的指令或问题等信息,也可以包含其他详细信息,如上下文、输入或示例等。你可以通过这些元素来更好地指导模型,并因此获得更好的结果。
看下面一个简单的示例:
Prompt:
The sky is
Output:
blue.
如果你正在使用 OpenAI Playground 或其他任何 LLM Playground,你可以按照以下截图中的方式 prompt 模型:

需要注意的是,当使用 OpenAI 的 gpt-4 或者 gpt-3.5-turbo 等 chat 模型时,你可以使用三个不同的 role 来构建 prompt:system、user 和 assistant。其中 system 不是必需的,但有助于设定 assistant 的整体行为,帮助模型了解用户的需求,并根据这些需求提供相应的响应。上面的示例仅包含一条 user message,你可以使用 user message 直接作为 prompt。为简单起见,本章所有示例(除非明确提及)将仅使用 user message 来作为 gpt-3.5-turbo 模型的 prompt。上面示例中 assistant 的 message 是模型的响应。你还可以定义 assistant message 来传递模型所需行为的示例。你可以在此处了解有关使用 chat 模型的更多信息:https://www.promptingguide.ai/models/chatgpt
从上面的示例中可以看出,语言模型能够基于我们给出的上下文内容 "The sky is" 完成续写。输出可能是出乎意料的,或者与你想要完成的任务相去甚远。实际上,这个基本示例突出了提供更多上下文或明确指示你想要实现什么的必要性。这正是 prompt engineering 的核心所在。
让我们试着改进一下:
Prompt:
Complete the sentence:
The sky is
Output:
blue during the day and dark at night.
结果是不是要好一些了?本例中,我们告知模型去完善句子,因此输出结果看起来要好得多,因为它完全按照你告诉它要做的(“完善句子”)去做。
以上示例基本说明了现阶段的大语言模型能够发挥的功能作用。它们可以用于执行各种高级任务,如 text summarization、math reasoning、code generation 等。
Model settings
如果你发现同一个 prompt 每次输出差异很大,优先检查和调整 model settings(例如 temperature / top_p)。建议先看下一章:
Prompt 格式
前文中我们采取的是比较简单的 prompt。标准 prompt 通常遵循以下格式:
<question>?
或:
<instruction>
你也可以将其格式化为 Q&A 格式(在许多 Q&A dataset 中是标准格式),如下所示:
Q: <question>?
A:
当像上面那样 prompt 时,这也被称为 zero-shot prompting,即你直接 prompt 模型给出一个回答,而没有提供任何关于你希望它完成的任务的示例或示范。一些大型语言模型具备进行 zero-shot prompting 的能力,但这取决于任务复杂度、知识覆盖,以及模型训练时的对齐方式。
一个 zero-shot prompt 示例:
Prompt:
Q: What is prompt engineering?
对于一些较新的模型,你可以省略 “Q:” 部分,因为模型会根据序列的构成将其理解为 Q&A 任务。换句话说,prompt 可以简化如下:
Prompt:
What is prompt engineering?
基于以上标准格式,一种流行且有效的提示技术被称为 few-shot prompting,其中你提供示例(即 demonstration)。你可以按照以下格式组织 few-shot prompting:
<question>?
<answer>
<question>?
<answer>
<question>?
<answer>
<question>?
Q&A 格式的版本:
Q: <question>?
A: <answer>
Q: <question>?
A: <answer>
Q: <question>?
A: <answer>
Q: <question>?
A:
请记住,是否使用 Q&A 格式取决于任务类型。例如,你可以执行一个简单的 classification task,并给出如下所示的示例来示范任务:
Prompt:
This is awesome! // Positive
This is bad! // Negative
Wow that movie was rad! // Positive
What a horrible show! //
Output:
Negative
LLM 可以基于少量说明了解和学习某些任务,而 few-shot prompting 正好可以赋能 in-context learning 能力。我们会在后续章节更广泛地讨论如何使用 zero-shot prompting 和 few-shot prompting。
把这章的知识,直接变成实战能力
进入交互式实验室,用真实任务练 Prompt,10 分钟快速上手。
📚 相关资源
❓ 常见问题
关于本章主题最常被搜索的问题,点击展开答案
OpenAI chat 模型里 system / user / assistant 三个 role 各干什么?
用 gpt-4 或 gpt-3.5-turbo 时:system 设定整体行为(不必填,但定身份很有用),user 是真正的提问,assistant 是模型回复。也可以预填 assistant message 当作示范。本章绝大多数示例只用 user message 跑 gpt-3.5-turbo,足够覆盖基础场景。
为什么「The sky is」输出 blue,而「Complete the sentence: The sky is」输出更长?
前者只给 LLM 一段未完成文本,模型按概率续写最短合理 token——blue。后者多了显式指令「Complete the sentence」,模型识别这是补全任务,输出 blue during the day and dark at night。差别就是有没有告诉它「要做什么」。
同一个 Prompt 每次输出差异巨大,先调 Prompt 还是先调参数?
先查 model settings——重点是 temperature 和 top_p。Prompt 没问题但输出不稳定,几乎都是采样参数没控住。把 temperature 设到 0、top_p 留 1.0,再决定要不要改 prompt 措辞,否则会把参数问题误判为指令问题。
标准 Prompt 格式有哪些写法?
三种基础写法:直接问句 `<question>?`、纯指令 `<instruction>`、Q&A 模板 `Q: <question>?\nA:`。新模型已经能从语境推断出 Q&A 任务,所以「Q:/A:」可以省略;老模型或要严格控格式时再加上。
Zero-shot 和 Few-shot 在 prompt 写法上差别多大?
Zero-shot 直接发问不给示例(如 `What is prompt engineering?`);Few-shot 在问之前堆 1-N 个示范对,例如 `This is awesome! // Positive` 接 `This is bad! // Negative`,最后留一行空让模型分类。Few-shot 触发的就是 in-context learning——靠例子对齐输出风格和标签。