Few-shot Prompting 是一种通过在 prompt 中提供少量示例,引导 AI 模型理解任务模式并生成符合预期输出的技术。
什么是 Few-shot
Few-shot 字面意思是"少量样本"。在 AI prompting 中,它指的是在请求前提供 **2-5 个输入-输出示例,**让模型从中学习规律。
与之相关的概念:
| 术语 | 示例数量 | 说明 |
|---|---|---|
| Zero-shot | 0 | 直接描述任务,不给示例 |
| One-shot | 1 | 提供 1 个示例 |
| Few-shot | 2-5 | 提供少量示例 |
为什么需要 Few-shot
Zero-shot 有时无法准确传达你想要的输出格式或风格。通过示例,模型能更好地理解:
- • **输出格式:**JSON、Markdown、特定结构
- • **语气风格:**正式、口语、技术文档
- • **处理逻辑:**分类规则、转换模式
实际示例
Zero-shot(无示例)
go
将以下句子分类为正面或负面情感:
"这个产品太难用了"
模型可能返回各种格式:负面、这是负面情感、Negative 等。
Few-shot(有示例)
go
将句子分类为正面或负面情感。
示例:
输入:这家餐厅的服务太棒了
输出:正面
输入:等了一个小时还没上菜
输出:负面
输入:价格合理,味道一般
输出:中性
现在分类这个句子:
输入:这个产品太难用了
输出:
模型会按照示例格式输出:负面
Few-shot 的应用场景
1. 格式化输出
go
将用户反馈转换为 JSON 格式。
示例:
反馈:用户张三说登录按钮点不动
JSON:{"user": "张三", "issue": "登录按钮无响应", "type": "bug"}
反馈:李四建议增加深色模式
JSON:{"user": "李四", "issue": "增加深色模式", "type": "feature"}
反馈:王五反映页面加载很慢
JSON:
2. 代码风格统一
go
将 Python 代码转换为项目规范风格。
示例:
原始:def getUser(id): return db.query(id)
规范:
def get_user(user_id: int) -> User:
"""根据 ID 获取用户"""
return db.query(user_id)
原始:def calcTotal(items): return sum([i.price for i in items])
规范:
3. 特定领域翻译
go
翻译技术文档,保留专业术语。
示例:
英文:The API returns a 429 status code when rate limited.
中文:当触发 rate limit 时,API 返回 429 状态码。
英文:Use dependency injection to decouple components.
中文:使用 dependency injection 解耦组件。
英文:The cache invalidation strategy affects throughput.
中文:
Few-shot 最佳实践
选择示例的原则
- • **多样性:**覆盖不同类型的输入情况
- • **代表性:**选择典型场景,避免边缘案例
- • **一致性:**所有示例的格式必须统一
- • **简洁性:**示例尽量简短,突出关键模式
示例数量
一般 2-5 个示例效果最佳:
- • 太少:模型可能无法归纳规律
- • 太多:占用 context window,增加成本,可能引入噪音
示例顺序
将最相关或最复杂的示例放在最后,靠近实际输入。模型对最近的内容记忆更强。
Few-shot vs Fine-tuning
| 对比项 | Few-shot | Fine-tuning |
|---|---|---|
| 实现成本 | 低,只需修改 prompt | 高,需要训练数据和计算资源 |
| 灵活性 | 高,随时调整示例 | 低,需重新训练 |
| 适用场景 | 任务多变,数据量少 | 任务固定,数据量大 |
| 效果上限 | 受限于模型能力 | 可针对性优化 |
总结
Few-shot Prompting 是提升 AI 输出质量的实用技术。核心思路是用示例代替复杂的文字描述,让模型"看样学样"。在实际使用中,选择 2-5 个多样且一致的示例,通常能显著改善输出效果。