提示词工程03:Few-shot与Zero-shot对比

提示词工程03:Few-shot与Zero-shot对比

📖 系列导航


上篇回顾

上一篇我们学习了提示词的四大结构:

  • 角色设定:让AI扮演特定角色
  • 任务描述:动词开头、具体明确
  • 约束条件:说”要做什么”
  • 示例引导:Few-shot技巧

本篇深入讲解 Few-shotZero-shot 的区别与应用。


什么是 Zero-shot?

Zero-shot(零样本学习)是指不给AI任何示例,直接让它完成任务。

特点

  • 优点:简单快速,适合简单任务
  • 缺点:复杂任务准确率低,输出不稳定

适用场景

✅ 适合 Zero-shot:
• 简单问答("Python是什么?")
• 通用任务("翻译这句话")
• 创意生成("写一首关于春天的诗")
• 常识推理("太阳从哪边升起?")

❌ 不适合 Zero-shot:
• 分类任务(需要明确分类标准)
• 格式要求严格(JSON、表格等)
• 领域特定(需要专业知识)
• 多步骤推理(容易遗漏)

什么是 Few-shot?

Few-shot(少样本学习)是指给AI 2-5个示例,让它模仿你的期望输出。

核心原理

AI 通过示例”学习”你期望的模式:

  • 输入格式是什么样
  • 输出格式应该是什么样
  • 有哪些边界情况需要处理

效果对比

Few-shot 示例质量对比


何时使用 Few-shot?

判断标准

场景推荐原因
任务简单、通用Zero-shotAI已有足够训练数据
需要特定输出格式Few-shot示例明确格式要求
分类/标注任务Few-shot示例定义分类边界
领域特定知识Few-shot示例传递领域规范
输出要一致性Few-shot示例约束输出风格

实战案例对比

案例1:情感分类

Zero-shot 失败:

提示词:
判断这句话的情感

AI回答:
请提供具体的句子,我才能判断情感。
(AI不知道输出格式)

Few-shot 成功:

提示词:
判断这句话的情感:

示例:
"太棒了!" → 正面
"还行吧" → 中性
"太差了" → 负面

请判断:"这家餐厅服务很好"

AI回答:
正面
(AI理解了输入输出格式)

案例2:数据提取

Zero-shot 失败:

提示词:
从简历中提取关键信息

AI回答:
好的,请提供简历内容。
(格式不明确)

Few-shot 成功:

提示词:
从简历中提取关键信息,输出JSON格式。

示例:
输入:"张三,男,28岁,5年Python开发经验"
输出:{"name": "张三", "gender": "男", "age": 28, "experience": "5年Python开发"}

输入:"李四,女,1995年出生,Java架构师"
输出:{"name": "李四", "gender": "女", "birth_year": 1995, "position": "Java架构师"}

请提取:"王五,男,30岁,前端开发3年,熟悉React"

AI回答:
{"name": "王五", "gender": "男", "age": 30, "experience": "前端开发3年", "skills": ["React"]}

案例3:代码转换

Zero-shot 不稳定:

提示词:
把Python代码转换成JavaScript

输入:x = [1, 2, 3]

AI回答(第一次):
const x = [1, 2, 3];

AI回答(第二次):
let x = Array.from([1, 2, 3]);
(输出不一致)

Few-shot 稳定:

提示词:
把Python代码转换成JavaScript,使用const声明。

示例:
Python: x = [1, 2, 3]
JavaScript: const x = [1, 2, 3];

Python: name = "hello"
JavaScript: const name = "hello";

Python: nums = [i**2 for i in range(5)]
JavaScript: const nums = Array.from({length: 5}, (_, i) => i * i);

请转换:result = sum([1, 2, 3])

AI回答:
const result = [1, 2, 3].reduce((a, b) => a + b, 0);

如何设计高质量示例?

示例设计的三大原则

根据 Anthropic 研究:

1. 多样性

示例要覆盖不同情况:

❌ 缺乏多样性:
"好" → 正面
"很好" → 正面
"超好" → 正面

✅ 有多样性:
"太棒了!" → 正面(强正面)
"还行吧" → 中性(中性)
"太差了" → 负面(强负面)
"一般般" → 中性(弱中性)
"超喜欢" → 正面(情感词)
"不建议" → 负面(隐含负面)

2. 代表性

示例要反映真实数据分布:

真实场景:正面60%、中性30%、负面10%

✅ 示例分布:
正面:3个(60%)
中性:2个(30%)
负面:1个(10%)
(符合真实分布)

3. 清晰性

示例格式要清晰一致:

✅ 使用 XML 标签(推荐):
<examples>
<example>
<input>这家餐厅服务很好</input>
<output>正面</output>
</example>
</examples>

✅ 使用箭头格式(简洁):
"太棒了" → 正面

❌ 混乱格式:
示例1:太棒了是正面
第二个:还行 → 中性

Few-shot 进阶技巧

1. 边界示例

包含边界情况,提高AI处理能力:

任务:判断用户输入是否有效

示例:
"你好" → 有效
"hello" → 有效
"" → 无效(空字符串)
"   " → 无效(只有空格)
"123" → 有效(数字也是输入)
"@@@" → 有效(特殊字符也是输入)

请判断:"  hi  "

AI回答:
有效(去除空格后为"hi")

2. 推理示例

包含推理过程:

任务:数学应用题

示例1:
问题:"小明有5个苹果,给了小红2个"
推理:初始5个,给出2个,剩余 5 - 2 = 3
答案:3个

示例2:
问题:"商店有10瓶水,卖了3瓶,又进货5瓶"
推理:初始10,卖出后 10 - 3 = 7,进货后 7 + 5 = 12
答案:12瓶

请解决:"图书馆有100本书,借出30本,还回15本"

3. 格式示例

明确输出格式:

任务:分析代码复杂度

示例:
代码:for i in range(n): for j in range(n): print(i+j)
分析:
{
  "time_complexity": "O(n²)",
  "space_complexity": "O(1)",
  "explanation": "嵌套循环,外层n次,内层n次"
}

请分析:def fib(n): return fib(n-1) + fib(n-2) if n > 1 else n

4. 错误示例

展示常见错误和正确做法:

任务:代码审查

示例:
代码:x = 1
问题:变量名太短,不清晰
建议:使用有意义的名称,如 user_count

代码:if a == True:
问题:冗余比较
建议:直接写 if a:

代码:result = []
for i in range(10):
    result.append(i * 2)
问题:可以使用列表推导式
建议:result = [i * 2 for i in range(10)]

实战练习

练习1:判断使用 Zero-shot 还是 Few-shot

以下任务哪些适合 Zero-shot,哪些需要 Few-shot?

  1. 把”Hello, World”翻译成中文
  2. 判断邮件是否为垃圾邮件
  3. 写一首关于夏天的诗
  4. 提取简历中的关键信息(JSON格式)
  5. 总结一篇文章的主旨
  6. 判断代码是否符合PEP8规范
  7. 生成一个随机故事
  8. 将口语转写成正式商务语言

练习2:设计 Few-shot 示例

为”代码风格检查”任务设计 Few-shot 示例:

任务:判断 Python 代码是否符合 PEP8 规范

要求:
• 设计 5 个示例
• 包含符合规范的代码
• 包含不符合规范的代码
• 包含边界情况
• 输出格式统一

练习3:优化示例

以下示例有什么问题?如何改进?

示例:
x=1 → 符合规范
y=2 → 符合规范
z=3 → 符合规范

请判断:x=1+2

问题分析:

  1. 示例只有”符合”情况,没有”不符合”的对比
  2. 示例过于简单,没有覆盖复杂情况
  3. 没有说明什么是”规范”

练习4:对比测试

用 Zero-shot 和 Few-shot 完成同一个任务,对比效果:

任务:将以下文本改写成正式商务语言

原句:"这代码写得真烂,全是bug"

Zero-shot:
[你的答案]

Few-shot:
设计示例后再次测试:
[你的答案]

练习5:创建完整 Few-shot 提示词

创建一个完整的 Few-shot 提示词,任务是将口语转写成正式语言:

要求:
1. 角色设定
2. 5个示例(不同场景)
3. 输出格式要求
4. 边界情况处理

本篇要点

  1. Zero-shot:无示例,适合简单通用任务
  2. Few-shot:有示例,适合分类、格式化、领域特定任务
  3. 示例设计:多样性、代表性、清晰性
  4. 进阶技巧:边界示例、推理示例、格式示例、错误示例
  5. 实战应用:通过对比案例理解选择标准

下篇预告

下一篇我们将学习 Chain-of-Thought(思维链)

  • 什么是思维链?为什么它能提升复杂任务准确率?
  • 如何在提示词中加入”思考过程”
  • 思维链的适用场景和最佳实践
  • 与 Few-shot 结合使用

👉 下一篇:Chain-of-Thought思维链


💡 本系列文章

💬 评论区

返回文章列表