Zero-shot、Few-shot 和 One-shot Prompt 有什么区别?

Zero-shot、Few-shot 和 One-shot Prompt 有什么区别?
这道题考的是 Prompt Engineering 里面最基础也最重要的概念。
简单来说,三者的区别就在于:给不给示例、给几个示例。Zero-shot 不给示例,One-shot 给 1 个示例,Few-shot 给 2 个及以上示例。但背后的原理比这复杂一点——这涉及到模型是怎么"看示例学习"的。
下面我把这个知识点掰开讲。
什么是 Shot 提示技术
先把这三个概念说清楚。
Zero-shot Prompt 就是只给指令,不给任何示例。比如你让模型翻译一句话,直接说"把下面这句话翻译成英文:今天天气真好"。模型靠自己的预训练知识直接回答。
One-shot Prompt 是给 1 个示例。比如先给一个例子:"苹果→Apple,香蕉→Banana",然后再问"猫→?"。让模型从这一个示例里找规律。
Few-shot Prompt 就是给 2 个及以上的示例。继续翻译的例子,给 3-5 个词对示例,然后让模型翻译新的词。
这三个技术有个共同的核心:示例不是用来训练模型的,而是用来激活模型已有的知识。模型早就"见过"这些知识了,示例只是告诉它:该用哪部分知识、以什么格式输出。

为什么说是"激活"而不是"训练"?这里要引入一个关键概念——In-Context Learning(上下文学习),也叫情境学习。
In-Context Learning 原理
这是理解 Shot 提示技术的关键。
当你给模型一个示例:
输入:我今天很开心
输出:Positive模型并不是"记住"了这个对应关系。它的处理过程是:
- 看到示例后,在自己的预训练知识里搜索类似的任务模式
- 找到"判断情感倾向"这类任务的处理方式
- 把你新输入的内容套用这个模式输出
打个比方。你做数学应用题时,翻开教材看了两道例题。看例题不是为了背住例题的答案,而是回忆这类应用题该用什么方法、什么步骤去解。然后遇到新题,用同样的方法去套。
这就是 In-Context Learning 的本质:示例提供上下文,模型从上下文中匹配任务模式,激活相关知识。
重要的事情说三遍:示例不更新模型权重!示例不更新模型权重!示例不更新模型权重!你给 100 个示例和 1 个示例,模型本身的参数没有任何变化。变化的只是这次推理时的"思考方式"。
示例数量影响的是模式匹配的清晰度。一个示例,模型只能猜大概的方向;三个示例,模型能更确定地找到正确的模式;给太多示例,反而可能让模型困惑或者浪费 token。

什么时候用哪个
这是面试里经常被问到的问题。
Zero-shot 适用场景:
- 任务足够简单、通用。模型在预训练时见过大量这类任务,比如基础翻译、摘要生成、简单问答
- 任务定义很明确,不需要额外解释格式
- 需要节省 token、提高响应速度
One-shot 适用场景:
- 想轻量级地"教"模型理解任务格式
- 任务稍微复杂一点,但模型应该能快速理解
- 作为 Zero-shot 和 Few-shot 之间的过渡
Few-shot 适用场景:
- 任务涉及领域知识或特定格式。比如医学术语分类、代码生成、特定文风写作
- 任务模式不明显,需要多个示例让模型"悟"出规律
- 需要确保输出格式高度一致
举几个具体例子:
| 任务类型 | 推荐方式 | 原因 |
|---|---|---|
| "把'你好'翻译成英文" | Zero-shot | 太简单,模型直接会 |
| 生成符合特定JSON格式的报告 | Few-shot | 需要示例来明确格式 |
| 用中文写诗 | One-shot | 稍微复杂,给个示例帮助理解风格 |
选择的核心逻辑很简单:任务越复杂、越垂直,越需要示例;任务越通用、越简单,越不需要示例。
就像老师出题:简单的口算题直接让学生做就行;复杂的应用题,得先讲几道例题学生才能理解。

好示例怎么写
Few-shot 用得多,但很多人用得不对。关键在于示例质量,而不是数量。
好示例的三个特征:
代表性:覆盖任务的典型情况。别只给特例,否则模型会学到错误的模式。比如做情感分类,别全给强烈的情感示例,也得给中性句。
多样性:示例之间要有差异。如果做翻译,词性要有名词、动词、形容词;如果做分类,类别要尽量均衡。
格式一致:示例的输入输出格式必须和最终任务完全一致。示例用 JSON,任务也用 JSON;示例输出带引号,任务输出也带引号。
关于数量,这里有个反直觉的点:不是越多越好。
研究显示,2-5 个示例通常是最优区间。超过这个数量,边际效益急剧下降,反而可能带来负面影响:
- 模型开始"记住"示例而不是理解模式
- token 消耗大幅增加
- 格式过于固定,缺乏灵活性
而且,如果你的示例质量差,10 个差示例只会让结果更差。宁可只有 2 个高质量示例,也不要 10 个凑数的。

还有个容易被忽略的概念:Test Instance 和 Demonstration。Few-shot 里的示例叫 Demonstration,就是你提供的那些例子。Test Instance 是你真正要模型回答的新问题。两者格式必须一致,否则模型会困惑。
面试怎么答
基础版(直接背):
Zero-shot、One-shot、Few-shot 的区别在于是否提供示例以及示例数量。Zero-shot 直接给指令不给示例,One-shot 给 1 个示例,Few-shot 给 2 个及以上示例。它们的原理是 In-Context Learning,即示例激活模型预训练知识中的相关模式,而非真正训练模型。选择上,简单通用任务用 Zero-shot,复杂或领域特定任务用 Few-shot,One-shot 作为轻量过渡。
加分版(在基础版上加这些):
需要补充几个关键点。第一,示例的作用是"激活"而非"训练",不更新模型参数。第二,示例质量比数量更重要,2-5 个高质量示例通常优于大量低质量示例。第三,好示例要具备代表性、多样性、格式一致性。第四,Few-shot 中的示例称为 Demonstration,Test Instance 是真正要回答的问题。

一句话总结
Zero/One/Few-shot 的核心区别是示例数量,背后通过 In-Context Learning 激活模型已有知识,选择依据是任务复杂度——简单任务直接答,复杂任务看例题。
