Few-Shot 样本工程设计
Few-Shot Learning 通过提供示例让模型快速学习任务,样本设计直接影响效果。
一、核心概念
1.1 什么是 Few-Shot
Few-Shot = 少量示例 + 任务描述
Zero-Shot: 无示例
One-Shot: 1 个示例
Few-Shot: 2-5 个示例
1.2 效果对比
任务:情感分析
Zero-Shot:
"分析这句话的情感"
准确率:65%
One-Shot:
"示例:我喜欢这个产品 → 正面
分析这句话的情感"
准确率:75%
Few-Shot (3 个):
"示例:
我喜欢这个产品 → 正面
质量太差了 → 负面
还可以 → 中性
分析这句话的情感"
准确率:85%
二、样本选择
2.1 代表性原则
# ✅ 推荐:覆盖各种情况
examples = [
{"text": "很好", "label": "正面"},
{"text": "太差", "label": "负面"},
{"text": "还行", "label": "中性"},
]
# ❌ 避免:单一类型
examples = [
{"text": "很好", "label": "正面"},
{"text": "不错", "label": "正面"},
{"text": "优秀", "label": "正面"},
]
2.2 多样性设计
# 多样性维度
diversity = {
"length": [短,中,长],
"style": [正式,口语,专业],
"complexity": [简单,中等,复杂],
"edge_cases": [边界情况,异常值]
}
2.3 难度递进
examples = [
# 简单
{"input": "1+1", "output": "2"},
# 中等
{"input": "(2+3)*4", "output": "20"},
# 复杂
{"input": "sum([1,2,3,4,5])", "output": "15"},
]
三、样本格式
3.1 标准格式
template = """
示例{index}:
输入:{input}
输出:{output}
"""
3.2 思维链格式
template = """
示例{index}:
输入:{input}
思考:{reasoning}
输出:{output}
"""
3.3 对比格式
template = """
示例{index}:
输入:{input}
正确输出:{correct_output}
错误输出:{wrong_output}
错误原因:{error_reason}
"""
四、质量评估
4.1 评估指标
metrics = {
"accuracy": "样本是否正确",
"relevance": "与任务的相关性",
"diversity": "样本多样性",
"clarity": "表述清晰度",
"coverage": "场景覆盖率"
}
4.2 自动化评估
def evaluate_examples(examples, task):
scores = {
"consistency": check_consistency(examples),
"diversity": check_diversity(examples),
"relevance": check_relevance(examples, task),
}
return sum(scores.values()) / len(scores)
4.3 A/B 测试
def ab_test_examples(test_set, variant_a, variant_b):
results = {"a": [], "b": []}
for item in test_set:
pred_a = llm.generate(format_prompt(item, variant_a))
pred_b = llm.generate(format_prompt(item, variant_b))
results["a"].append(evaluate(pred_a, item["expected"]))
results["b"].append(evaluate(pred_b, item["expected"]))
return compare_results(results["a"], results["b"])
五、最佳实践
5.1 样本数量
简单任务:1-2 个示例
中等任务:3-5 个示例
复杂任务:5-10 个示例
5.2 样本顺序
# ✅ 推荐:难度递进
examples = [简单,中等,复杂]
# ❌ 避免:随机顺序
examples = [复杂,简单,中等]
5.3 样本更新
# 定期更新样本库
def update_examples(new_performance):
if new_performance < threshold:
# 添加新样本
examples.append(generate_new_example())
# 移除过时样本
examples.remove(outdated_example)
六、总结
Few-Shot 核心要点:
| 方面 | 要点 | 说明 |
|---|---|---|
| 样本选择 | 代表性、多样性 | 覆盖各种情况 |
| 样本格式 | 标准、思维链、对比 | 根据任务选择 |
| 质量评估 | 准确性、相关性、多样性 | 自动化 + 人工 |
| 数量 | 1-10 个 | 根据任务复杂度 |
Few-Shot 设计是 Prompt 工程的核心技能,好的样本设计能显著提升模型效果。