提示词工程03:Few-shot与Zero-shot对比
提示词工程03:Few-shot与Zero-shot对比
📖 系列导航
- 上一篇:提示词的基本结构
- 本篇:Few-shot与Zero-shot对比(你正在阅读)
- 下一篇:Chain-of-Thought思维链
- 系列:提示词工程从零到精通(共7篇)
上篇回顾
上一篇我们学习了提示词的四大结构:
- 角色设定:让AI扮演特定角色
- 任务描述:动词开头、具体明确
- 约束条件:说”要做什么”
- 示例引导:Few-shot技巧
本篇深入讲解 Few-shot 和 Zero-shot 的区别与应用。
什么是 Zero-shot?
Zero-shot(零样本学习)是指不给AI任何示例,直接让它完成任务。
特点
- 优点:简单快速,适合简单任务
- 缺点:复杂任务准确率低,输出不稳定
适用场景
✅ 适合 Zero-shot:
• 简单问答("Python是什么?")
• 通用任务("翻译这句话")
• 创意生成("写一首关于春天的诗")
• 常识推理("太阳从哪边升起?")
❌ 不适合 Zero-shot:
• 分类任务(需要明确分类标准)
• 格式要求严格(JSON、表格等)
• 领域特定(需要专业知识)
• 多步骤推理(容易遗漏)
什么是 Few-shot?
Few-shot(少样本学习)是指给AI 2-5个示例,让它模仿你的期望输出。
核心原理
AI 通过示例”学习”你期望的模式:
- 输入格式是什么样
- 输出格式应该是什么样
- 有哪些边界情况需要处理
效果对比
何时使用 Few-shot?
判断标准
| 场景 | 推荐 | 原因 |
|---|---|---|
| 任务简单、通用 | Zero-shot | AI已有足够训练数据 |
| 需要特定输出格式 | 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?
- 把”Hello, World”翻译成中文
- 判断邮件是否为垃圾邮件
- 写一首关于夏天的诗
- 提取简历中的关键信息(JSON格式)
- 总结一篇文章的主旨
- 判断代码是否符合PEP8规范
- 生成一个随机故事
- 将口语转写成正式商务语言
练习2:设计 Few-shot 示例
为”代码风格检查”任务设计 Few-shot 示例:
任务:判断 Python 代码是否符合 PEP8 规范
要求:
• 设计 5 个示例
• 包含符合规范的代码
• 包含不符合规范的代码
• 包含边界情况
• 输出格式统一
练习3:优化示例
以下示例有什么问题?如何改进?
示例:
x=1 → 符合规范
y=2 → 符合规范
z=3 → 符合规范
请判断:x=1+2
问题分析:
- 示例只有”符合”情况,没有”不符合”的对比
- 示例过于简单,没有覆盖复杂情况
- 没有说明什么是”规范”
练习4:对比测试
用 Zero-shot 和 Few-shot 完成同一个任务,对比效果:
任务:将以下文本改写成正式商务语言
原句:"这代码写得真烂,全是bug"
Zero-shot:
[你的答案]
Few-shot:
设计示例后再次测试:
[你的答案]
练习5:创建完整 Few-shot 提示词
创建一个完整的 Few-shot 提示词,任务是将口语转写成正式语言:
要求:
1. 角色设定
2. 5个示例(不同场景)
3. 输出格式要求
4. 边界情况处理
本篇要点
- Zero-shot:无示例,适合简单通用任务
- Few-shot:有示例,适合分类、格式化、领域特定任务
- 示例设计:多样性、代表性、清晰性
- 进阶技巧:边界示例、推理示例、格式示例、错误示例
- 实战应用:通过对比案例理解选择标准
下篇预告
下一篇我们将学习 Chain-of-Thought(思维链):
- 什么是思维链?为什么它能提升复杂任务准确率?
- 如何在提示词中加入”思考过程”
- 思维链的适用场景和最佳实践
- 与 Few-shot 结合使用
💡 本系列文章
💬 评论区