4、零样本与少样本提示:Zero-shot、Few-shot、思维链(Chain-of-Thought)提示
好,咱们今天聊一个非常核心的话题——怎么让大模型在没有训练数据的情况下,也能干好活。
说白了,就是「零样本」和「少样本」提示。我刚开始接触这个领域时,总觉得这俩概念有点玄乎。后来在项目里踩了几次坑,才真正理解它们的威力。
4.1 零样本提示:让模型「无师自通」
零样本提示,英文叫 Zero-shot Prompting。意思很简单:不给任何例子,直接让模型干活。
你想想看,这其实挺反直觉的。我们平时教人做事,总得给几个示范吧?但大模型不一样,它预训练阶段已经「见过」海量数据了。你只要把任务描述清楚,它就能直接推理。
核心要点:零样本提示的成功,完全取决于任务描述的清晰度。
举个例子。我让模型做情感分类:
提示词:
请判断以下评论的情感是「正面」还是「负面」。
评论:这家餐厅的服务太差了,等了一个小时才上菜。
输出:
负面
看到了吗?没有给任何示例,模型直接给出了正确答案。这就是零样本。
我个人习惯在零样本提示里加一个「角色设定」。比如:
你是一位资深的情感分析师。请判断以下评论的情感倾向。
评论:这家餐厅的服务太差了,等了一个小时才上菜。
输出:
加了角色后,模型的输出质量会明显提升。我在项目中遇到过,不加角色时模型偶尔会输出「中性」,加了角色后几乎不会出现这种情况。
小技巧:零样本提示中,尽量使用「请」「输出格式为」等指令性词汇。避免模糊表达,比如「你觉得呢」这种。
4.2 少样本提示:给模型「打个样」
少样本提示,Few-shot Prompting。就是给模型提供几个输入输出的示例,让它照着这个模式来。
为什么要用少样本?因为有些任务太特殊了,模型在预训练时没见过。或者,你需要模型输出某种特定格式。
我记得有一次做数据清洗,需要把非结构化的文本转成 JSON。零样本提示下,模型输出的字段名总是对不上。后来我给了两个示例,效果立竿见影。
提示词:
请将以下文本转换为JSON格式,包含字段:姓名、年龄、职业。
示例1:
文本:张三,28岁,程序员
输出:{"姓名": "张三", "年龄": 28, "职业": "程序员"}
示例2:
文本:李四,35岁,设计师
输出:{"姓名": "李四", "年龄": 35, "职业": "设计师"}
现在请转换:
文本:王五,42岁,产品经理
输出:
模型会严格按照示例的格式输出。这里有个关键点:示例的数量和质量。
| 示例数量 | 效果 | 适用场景 |
|---|---|---|
| 1-2个 | 基本可用,但格式可能不稳定 | 简单任务,格式要求不严格 |
| 3-5个 | 效果稳定,格式一致 | 大多数任务,推荐使用 |
| 6个以上 | 边际效益递减,可能增加Token消耗 | 复杂推理任务 |
避坑指南:我曾经给过8个示例,结果模型开始「学习」示例中的噪声模式,反而降低了准确率。少样本不是越多越好,3-5个通常是最优解。
4.3 思维链提示:让模型「边想边说」
思维链,Chain-of-Thought,简称 CoT。这是目前最火的提示技术之一。
它的核心思想很简单:不要只让模型输出答案,让它输出推理过程。
为什么会这样?因为大模型本质上是一个「下一个词预测器」。如果你直接问它答案,它可能跳过中间步骤,直接猜一个。但如果你让它一步步推理,它就能沿着逻辑链条走,准确率大幅提升。
看个对比:
普通提示:
问:小明有5个苹果,小红给了小明3个,小明又给了小刚2个。小明现在有几个苹果?
答:6个。
思维链提示:
问:小明有5个苹果,小红给了小明3个,小明又给了小刚2个。小明现在有几个苹果?
让我们一步步思考:
1. 小明最初有5个苹果。
2. 小红给了小明3个,所以小明现在有5+3=8个。
3. 小明给了小刚2个,所以小明现在有8-2=6个。
答:6个。
看到了吗?同样的答案,但思维链提示让模型「暴露」了推理过程。这在复杂任务中尤其重要。
关键发现:思维链提示不仅提高了准确率,还让模型的错误变得「可解释」。你可以从推理过程中定位问题出在哪一步。
我在项目中用过一次思维链做数学应用题。零样本下准确率只有40%,加了「让我们一步步思考」后,准确率直接跳到75%。嗯,这个提升幅度让我印象深刻。
4.4 三种提示的实战选择
好,现在你知道了三种方法。但什么时候用哪个?我总结了一个简单的决策流程:
- 先试零样本:如果任务简单,模型能直接理解,零样本就够了。省Token,速度快。
- 零样本不行,上少样本:给2-3个示例,看看效果。如果格式或内容有偏差,调整示例。
- 需要推理,用思维链:数学、逻辑、多步推理任务,直接上CoT。别犹豫。
个人经验:我习惯在少样本提示中也加入思维链。比如,示例里不仅给输入输出,还给出推理步骤。这样模型既学到了格式,又学到了推理方式。效果往往1+1>2。
4.5 避坑与进阶技巧
最后,分享几个我踩过的坑:
- 示例不要「太完美」:我曾经给的都是完美示例,结果模型遇到一点噪声就崩了。后来我故意在示例里加了一些「不完美」的情况,模型的鲁棒性反而提升了。
- 思维链不要「太长」:CoT的推理步骤建议控制在3-5步。太长了模型容易「走神」,输出无关内容。
- 零样本的「角色」要具体:不要说「你是一个助手」,要说「你是一位资深的数据分析师,擅长处理金融数据」。越具体,模型越能进入状态。
好了,这一章的内容就到这里。零样本、少样本、思维链,这三种提示技术是每个提示工程师的「基本功」。你想想看,掌握了它们,你就能让大模型在绝大多数任务上直接干活,不需要微调,不需要标注数据。这效率,是不是很爽?
下一章,我们会聊更高级的调优策略。到时候见。