少样本示例法
有时候,你想要的效果很难用文字描述清楚——比如一种特定的语气、一种独特的格式风格。这时候,直接给例子比反复描述更有效。这种方法叫做少样本学习(Few-Shot Learning)。
为什么示例比描述更有效?
一个真实的对比
想象你要教一个新员工写产品文案:
方式A:描述要求
"写一个有吸引力的产品标题,要突出卖点,语言要生动,格式要用竖线分隔..."
员工可能还是一头雾水:"什么样的才算有吸引力?"
方式B:给示例
看这几个例子:
- 原标题:运动水壶 → 改写后:大容量运动水壶 | 健身房补水神器,一次喝够全天所需
- 原标题:蓝牙耳机 → 改写后:主动降噪蓝牙耳机 | 沉浸式音质,通勤路上从此隔绝噪音
现在你来改写这个:保温杯
员工立刻就懂了!
少样本学习就是这样——用2-3个实际例子教会AI你想要的风格和格式。
少样本学习的基本模式
任务描述
【示例1】
输入:xxx
输出:xxx
【示例2】
输入:xxx
输出:xxx
现在请处理:
输入:yyy
输出:AI会从示例中学习"输入→输出"的模式,然后应用到新输入上。
实战案例:产品标题改写
场景描述
你想让AI把电商产品标题改写成更有吸引力的版本。光靠描述很难说清楚那个"感觉"。
使用少样本学习
将电商产品标题改写为更有吸引力的版本。
【示例1】
原标题:男士黑色休闲裤
改写后:舒适弹力百搭休闲裤 | 男士通勤首选,一裤多穿不费心
【示例2】
原标题:蓝牙耳机降噪
改写后:主动降噪蓝牙耳机 | 沉浸式音质,通勤路上从此隔绝噪音
【示例3】
原标题:女士帆布包
改写后:复古帆布托特包 | 大容量轻便,上课购物都能拿得出手
请改写以下标题:
原标题:不锈钢保温杯AI从三个示例中学到了:
- 固定格式:产品核心描述 | 卖点描述
- 表达风格:面向用户利益,情感化表达
- 词汇特点:使用"神器"、"首选"等吸引眼球的词
输出示例:
改写后:大容量不锈钢保温杯 | 12小时长效保温,随时随地喝上一口热饮好示例的三个标准
标准一:覆盖典型变体
如果是分类任务,每个类别都要有示例,否则AI会对没见过例子的类别判断失准:
# 情感分类示例,必须三类都覆盖
【示例1】
评论:这个产品真的很好用!
分类:positive
【示例2】
评论:完全是浪费钱,后悔购买。
分类:negative
【示例3】
评论:收到了,外观和图片一致。
分类:neutral
现在请分类:
评论:还行吧,没什么特别的。
分类:为什么这很重要?
如果只给了"positive"和"negative"的示例,AI看到中性评论时可能不知道如何处理,强行归类为正面或负面。
标准二:格式完全统一
所有示例的输入格式和输出格式必须保持一致。即使一个小差异,也会让AI的输出格式混乱:
❌ 格式不统一
【示例1】
输入:张三,28岁
输出:{"name": "张三", "age": 28}
【示例2】
输入:李四,35岁
输出:{name: "李四", age: 35} ← 少了引号!
✅ 格式完全统一
【示例1】
输入:张三,28岁
输出:{"name": "张三", "age": 28}
【示例2】
输入:李四,35岁
输出:{"name": "李四", "age": 35}
【示例3】
输入:王五,42岁
输出:{"name": "王五", "age": 42}标准三:质量高于数量
2-3个精心设计的示例 > 10个随便凑的示例
每个示例都应该是你理想输出的完美代表:
❌ 低质量示例
【示例】
写一个函数:
def func():
pass
✅ 高质量示例
【示例】
需求:写一个计算阶乘的递归函数
代码:
def factorial(n: int) -> int:
"""计算n的阶乘
Args:
n: 非负整数
Returns:
n的阶乘
Raises:
ValueError: 当n为负数时
"""
if n < 0:
raise ValueError("n必须为非负整数")
if n <= 1:
return 1
return n * factorial(n - 1)高质量的示例展示了类型提示、文档字符串、错误处理——AI会学习并复制这些优秀实践。
更多实战案例
案例一:JSON格式转换
将用户信息转换为JSON格式。
【示例】
输入:张三,28岁,邮箱zhangsan@example.com,会Python和JavaScript
输出:
{
"name": "张三",
"age": 28,
"email": "zhangsan@example.com",
"skills": ["Python", "JavaScript"]
}
现在请处理:
输入:李四,35岁,邮箱lisi@company.cn,会Java、Go和Rust案例二:代码注释生成
为Python函数添加中文注释。
【示例1】
代码:
def add(a, b):
return a + b
添加注释后:
def add(a, b):
"""两数相加
Args:
a: 第一个数
b: 第二个数
Returns:
两数之和
"""
return a + b
【示例2】
代码:
def find_max(lst):
return max(lst)
添加注释后:
def find_max(lst):
"""找出列表中的最大值
Args:
lst: 数字列表
Returns:
列表中的最大值
"""
return max(lst)
请为以下函数添加注释:
代码:
def calculate_average(numbers):
return sum(numbers) / len(numbers)案例三:错误信息解释
将技术错误信息转换为用户友好的提示。
【示例1】
错误:ConnectionError: Max retries exceeded
解释:网络连接失败,请检查您的网络设置后重试。
【示例2】
错误:ValueError: invalid literal for int()
解释:输入格式不正确,请输入有效的数字。
【示例3】
错误:FileNotFoundError: No such file or directory
解释:找不到指定的文件,请确认文件路径是否正确。
请解释以下错误:
错误:PermissionError: [Errno 13] Permission denied与其他技巧组合使用
少样本学习可以和其他技巧叠加,效果更好:
组合一:角色设定 + 少样本
你是一位产品文案专家,擅长写出吸引眼球的产品描述。
请将以下产品标题改写为更有吸引力的版本。
【示例】
原标题:运动水壶
改写后:大容量运动水壶 | 健身房补水神器,一次喝够全天所需
请改写:
原标题:儿童安全座椅组合二:少样本 + 格式控制
请将用户反馈分类,并提取关键信息。
【示例】
反馈:收到的商品和描述不符,申请退款。
分类:售后问题
关键词:商品不符、退款
优先级:高
请处理以下反馈:
反馈:希望能增加深色模式,夜间使用更舒服。组合三:少样本 + 思维链
请分析代码的时间复杂度。
【示例】
代码:
for i in range(n):
for j in range(n):
print(i, j)
分析过程:
- 外层循环执行n次
- 内层循环每次执行n次
- 总操作次数 = n × n = n²
结论:时间复杂度为 O(n²)
请分析以下代码:
代码:
for i in range(n):
print(i)
for j in range(n):
print(j)零样本、单样本、少样本的区别
| 方法 | 示例数量 | 适用场景 |
|---|---|---|
| 零样本 | 0个 | 简单任务,格式不敏感 |
| 单样本 | 1个 | 只需展示格式 |
| 少样本 | 2-5个 | 需要学习风格、模式 |
| 多样本 | 5个以上 | 复杂模式,很少需要 |
经验法则:从零样本开始,效果不好就加示例。通常2-3个就够了,不必太多。
小结
少样本学习的核心要点:
| 要点 | 说明 |
|---|---|
| 覆盖变体 | 每种情况都要有示例 |
| 格式统一 | 所有示例格式完全一致 |
| 质量优先 | 精心设计的2-3个示例胜过10个凑数的 |
| 可组合 | 与角色设定、格式控制等技巧叠加效果更好 |
专业建议
建立自己的"示例库",把工作中常用的有效示例保存下来,随时复用。好的示例是可以重复利用的宝贵资产。
下一步
掌握了少样本学习后,让我们学习 防幻觉策略,减少AI"一本正经胡说八道"的情况。