Few-shot Learning:给AI几个例子,它就学会了
从Zero-shot到Few-shot,解锁AI的快速学习能力
你上学时,老师讲题前会不会先举几个例子?
比如老师要教你"把主动句改成被动句",可能先说:
示例1:"小明吃了苹果" → "苹果被小明吃了"
示例2:"猫抓了老鼠" → "老鼠被猫抓了"
示例3:"我写完了作业" → "作业被我写完了"
看完这几个例子,你再遇到新句子,自然就知道怎么改了。
AI也是这样。给它几个例子,它就能学会怎么做。这就是 Few-shot Learning。
1从 Zero-shot 到 Few-shot
在讲 Few-shot 之前,我们先理解几个相关概念。它们是一脉相承的:
不提供任何示例,直接问AI。就像你不教学生,直接让他做题。
用户:
把"小红买了书"改成被动句。
AI:
书被小红买了。
✅ 简单任务:AI靠预训练知识就能搞定
⚠️ 复杂任务:可能理解偏差,答非所问
提供一个示例。就像老师先讲一道例题,再让学生做类似的。
用户:
把主动句改成被动句:
"小明吃了苹果" → "苹果被小明吃了"
现在请改:"小红买了书"
AI:
书被小红买了。
✅ AI从这一个例子中学习到了模式
→ 成功率比 Zero-shot 高很多
提供多个示例(通常2-5个)。就像老师讲好几道例题,学生理解更深。
用户:
把主动句改成被动句:
"小明吃了苹果" → "苹果被小明吃了"
"猫抓了老鼠" → "老鼠被猫抓了"
"我写完了作业" → "作业被我写完了"
现在请改:"小红买了书"
AI:
书被小红买了。
✅ 多个示例让模式更清晰
✅ AI对任务的理解更准确、更稳定
2Few-shot 为什么有效?
你可能会问:AI不是已经训练好了吗?为什么给几个例子就能让它"学会"新任务?
原理1:明确任务格式
示例告诉AI"你要输出什么格式"。比如上面的例子,AI看到了输入是主动句、输出是被动句的模式,就明白"哦,原来是要这样改"。没有示例,AI可能理解为要翻译、要改写、要解释……谁知道呢?
原理2:激活相关知识
大模型在预训练时已经学过海量的语言知识。示例就像"触发器",把相关知识从模型的"记忆深处"调出来。给它几个翻译示例,它就会激活翻译相关的知识;给它几个代码示例,它就会进入编程模式。
原理3:上下文学习(In-context Learning)
这是大模型的核心能力之一。示例进入模型的上下文窗口后,会影响后续token的生成。模型不是在"修改参数",而是在"参考上下文"——就像你做题时会翻看前面的例题一样。
⚠️ 关键区别:Few-shot vs 微调
Few-shot 不改变模型参数。示例只是放进上下文窗口,影响这一次对话的输出。对话结束,模型"忘掉"这些示例。而微调是真的修改模型参数,变化是永久的。
→ Few-shot 是"临场学习",微调是"正式培训"
3如何设计好的 Few-shot 示例?
给示例不是随便给的。好的示例能让AI事半功倍,差的示例可能适得其反。
多样性
示例要覆盖不同的"情况"。比如你教AI做情感分析,不要只给"好评"的例子,也要给"差评"和"中性评价"的例子。否则AI可能会误以为"所有输入都是好评"。
代表性
示例要"典型",不要太边缘、太特殊。你给AI看的例子应该是"大部分情况下会遇到的",而不是"百年一遇的特殊case"。
格式一致
所有示例的格式要统一。如果第一个示例是"输入:xxx 输出:xxx",后面的也要一样。格式不一致会让AI困惑。
数量适中
研究表明,2-5个示例通常效果最好。给太多示例不仅浪费上下文空间,还可能让AI"过拟合"到示例上,对真正的问题反而处理不好。
与真实任务相似
示例要尽量接近你真正要解决的问题。如果你想用AI处理"产品评论的情感分析",示例就应该用产品评论,而不是用电影评论或餐厅评论。
4Few-shot 实际应用示例
📝 场景1:文本分类
判断以下评论是正面、负面还是中性:
评论:"这个产品质量还行,就是物流太慢了。"
分类:中性
评论:"太棒了!完全超出预期!"
分类:正面
评论:"垃圾,千万别买!"
分类:负面
评论:"[你的评论]"
分类:
🔄 场景2:格式转换
把以下信息转换成JSON格式:
姓名:张三,年龄:25岁,职业:工程师
→ {"name": "张三", "age": 25, "job": "工程师"}
姓名:李四,年龄:30岁,职业:设计师
→ {"name": "李四", "age": 30, "job": "设计师"}
姓名:[新信息]
→
✍️ 场景3:风格模仿
用简洁的口吻重写以下句子:
"由于今天天气非常不好,所以我决定不出去玩了。"
→ "天气不好,不出去了。"
"我非常非常喜欢你,喜欢到无法用语言来形容。"
→ "我很喜欢你。"
[新句子]
→
🧩 场景4:推理任务
判断两句话是否表达相同意思:
"他今天没来上班" vs "他今天请假了"
→ 不相同(前者原因未知,后者是请假)
"这电影真好看" vs "这电影非常精彩"
→ 相同(都表达正面评价)
[新句子对]
→
5Few-shot 的局限与注意事项
⚠️ 局限1:上下文窗口限制
每个示例都要塞进上下文窗口。示例太多、太长,会占用宝贵的空间。如果你的任务本身需要长上下文,给示例就要精打细算。
→ 精选示例,宁精勿滥
⚠️ 局限2:示例偏差会被放大
如果你的示例有偏差,AI会学到这个偏差。比如示例全是"好评→正面",AI可能学会"不管输入什么都输出正面"。
→ 确保示例覆盖各种情况
⚠️ 局限3:对模型能力有要求
Few-shot需要模型有强大的"上下文学习能力"。参数量太小的模型(比如几亿参数),从Few-shot中获益有限。
→ 使用足够大的模型
⚠️ 局限4:不如微调稳定
如果你有大量特定任务的数据,微调的效果通常比Few-shot更稳定、更可控。Few-shot适合"快速尝试"和"少量数据"的场景。
→ 数据多时考虑微调
6Few-shot vs 微调:怎么选?
| 维度 | Few-shot | 微调 |
|---|---|---|
| 是否改参数 | 否(临时生效) | 是(永久改变) |
| 需要数据量 | 几个示例 | 通常几百~几千条 |
| 技术门槛 | 低(写Prompt即可) | 较高(需要训练流程) |
| 成本 | 低(只消耗Token) | 高(GPU训练费用) |
| 效果稳定性 | 一般(依赖Prompt质量) | 高(专门训练) |
| 适合场景 | 快速尝试、少量数据、灵活需求 | 生产环境、大量数据、稳定需求 |
💡 实用建议
- • 先试Few-shot:成本低、见效快,不行再考虑微调
- • 数据多了再微调:有100+条高质量标注数据时,微调通常更划算
- • 两者可以结合:微调后的模型仍然可以用Few-shot进一步提升
7Few-shot 进阶技巧
🎯 技巧1:动态选择示例
不是每次都给同样的示例。根据用户的输入,从示例库里选最相关的几个。比如用户问的是"产品售后问题",就选售后相关的示例,而不是选物流相关的。
→ 用向量相似度来选示例,效果会更好
🔄 动态选示例:工作流程
🔀 技巧2:打乱示例顺序
研究表明,示例的顺序会影响结果。有时把顺序换一换,效果会变好或变差。如果发现AI总是给出某种偏向性的答案,试试调换示例顺序。
→ 最近的研究建议:把不同类别的示例"穿插"排列,而不是"聚类"排列
🤔 技巧3:结合Chain of Thought
在Few-shot示例中加入推理步骤。不仅告诉AI"输入→输出"的对应关系,还展示"输入→思考过程→输出"的完整路径。这对复杂推理任务特别有效。
→ 这就是Few-shot CoT,我们上一篇讲过的内容
8核心总结
🎓 一句话总结
- ①Few-shot是什么:给AI几个示例,让它从示例中学习任务模式
- ②为什么有效:明确格式、激活知识、上下文学习——不改参数,只借"语境"
- ③设计原则:多样、代表、一致、适量、相似——五个关键词
- ④vs 微调:Few-shot是"临时借力",微调是"长期培训";先试Few-shot,不够再微调
- ⑤进阶技巧:动态选示例、打乱顺序、结合CoT——让效果再上一层楼
→下一篇预告
👉 下一篇:In-context Learning
Few-shot 能工作的核心原因是"In-context Learning"——AI在对话中学习的能力。下一篇我们会深入探讨:为什么AI能在不修改参数的情况下"学习"?这背后的原理是什么?
✏️ 手绘图解 · AI Catch 出品
第 41 篇 / 共 84 篇 · 第五阶段:LLM高级技巧