任务:让 AI 将用户反馈分类为"功能请求"、"Bug 报告"、"使用疑问"三类。
Level 1:设计高质量示例请设计 3 个 few-shot 示例,覆盖不同情况并保持格式一致。
本课目标:
- 理解 zero-shot、one-shot、few-shot 的区别
- 学会用 2-5 个示例让 AI 理解模式
- 掌握选择高质量示例的原则
前置知识:<< 02 Prompt 的基本结构 | 下一课 04 >>
你想让 AI 用特定的格式输出数据——比如"提取文章中的关键信息,按 JSON 格式输出"。你在 prompt 里写了半天 JSON 的字段名、数据类型、嵌套结构……AI 还是输出了一个跟你预期不一样的格式。
换个方式:别描述格式了,直接给 AI 看 2-3 个标准示例。它一看就明白你要什么样的输出,第一次就能输出正确格式。这就是 few-shot learning(少样本学习)的威力——示例比文字更清晰1。
Few-shot learning 是一种 prompt 技术,通过在 prompt 中提供少量示例(通常 2-5 个)来引导 AI 理解你想要的模式2 1。AI 会从这些示例中学习输入输出的关系、格式、风格,然后应用到新的输入上。
对比三种方式:
❌ Zero-shot prompt:
AI 可能输出:
没有示例,AI 只能根据自己的理解来判断边界情况。
✅ Few-shot prompt:
AI 看到示例后,理解了:
所以它会输出"中性",因为这条评论跟第三个示例的模式一致。
Few-shot learning 利用了大语言模型的上下文学习(in-context learning)能力2。模型不需要重新训练,只需要在当前对话中看到几个示例,就能推断出规律并应用。
模型从示例中学到三类信息:
关键发现:研究表明,示例的格式和多样性比示例的正确性更重要2。即使示例中的标签有一些错误,只要格式一致、覆盖了不同类型的输入,AI 仍然能学到有用的模式。
不是随便给几个示例就行,示例的质量直接影响 AI 的输出1。
从 2 个开始,如果效果不好再加到 3-4 个1。
示例应该覆盖任务中可能出现的不同类型——也就是示例多样性2。
❌ 示例缺少多样性:
所有示例都是手机,AI 没见过其他电子产品的例子,可能不知道怎么处理。
✅ 示例有多样性:
覆盖了不同品类,AI 能学到更通用的分类逻辑。
格式一致性是 few-shot 成功的关键2。
❌ 格式不一致:
格式乱七八糟,AI 不知道该输出"正面"、"正面情绪"还是别的。
✅ 格式一致:
清晰统一,AI 知道输出应该是单个形容词。
如果任务有模糊地带,示例中要包含1。
场景:判断代码注释是否有用
❌ 只有明显的例子:
✅ 包含边界情况:
第 3、4 个示例帮助 AI 理解边界:不是所有"解释代码做什么"的注释都有用,关键是代码本身是否已经清楚表达了意图。
任务场景最常见的场景是从非结构化文本中提取结构化数据。
Zero-shot 版本(效果不稳定):
AI 可能输出各种格式:
或者
字段名、格式、单位都不统一。
Few-shot 版本(格式稳定):
示例覆盖了三种薪资单位(年薪、月薪、时薪)和三种工作地点类型(城市、城市+区、远程),AI 学到了:
只给 1 个示例,AI 看到的是个例,不是规律。
解决:至少 2 个,最好 3 个。
一会儿用箭头 →,一会儿用冒号 :,一会儿分多行。
解决:确定一种格式,所有示例严格遵守。
真实数据有噪音、有歧义、有缺失,示例只展示理想情况,AI 遇到边界案例就不知所措。
解决:至少 1 个示例应该包含边界情况(比如缺失某个字段、有歧义的表述)。
超过 5 个示例,收益很小,反而多耗 token,拉长响应时间。
解决:从 2-3 个开始,不够再加,很少需要超过 5 个。
Few-shot 最适合这些场景:
✅ 格式转换任务:非结构化文本 → JSON、Markdown、CSV ✅ 分类任务:情感分析、主题分类、意图识别 ✅ 风格模仿:学习特定的写作风格、代码风格 ✅ 复杂规则难以用文字描述:比如"什么样的注释是无用的"
不适合的场景:
❌ 任务本身很简单:"把这段文字翻译成英文",不需要示例 ❌ 每个输入都很独特:创意写作、头脑风暴,示例反而限制了发挥 ❌ 需要外部知识:问"2024 年世界杯冠军是谁",示例帮不上忙
判断标准:如果你给一个人类同事演示 2-3 个例子后,他就能明白该怎么做,那就适合用 few-shot。
Few-shot learning 通过 2-5 个示例让 AI 理解你想要的模式,比文字描述更清晰。高质量示例的标准是:数量适中(2-5 个)、有代表性和多样性、格式完全一致、包含边界情况。
Few-shot 最适合格式转换、分类、风格模仿等任务。设计示例时,从 2 个开始,确保覆盖不同类型的输入,所有示例用同一种格式。
下一课学习 chain-of-thought(思维链)——如何让 AI 展示推理步骤,提升复杂任务的准确性。
下一课 Chain-of-Thought:让 AI 展示推理过程 >>
Few-Shot Prompting Guide — https://www.prompthub.us/blog/the-few-shot-prompting-guide ↩ ↩2 ↩3 ↩4 ↩5
Prompt Engineering Guide - Few-Shot Prompting — https://www.promptingguide.ai/techniques/fewshot ↩ ↩2 ↩3 ↩4 ↩5 ↩6
Zero-shot Learning - Wikipedia — https://en.wikipedia.org/wiki/Zero-shot_learning ↩
请设计 3 个 few-shot 示例,覆盖不同情况并保持格式一致。
问题:AI 的输出不稳定,有时字段名是中文,有时优点用形容词("good")而不是具体点("quality")。
将下面的用户评论分类为"正面"、"负面"或"中性"。
评论:这个产品用起来还行,但价格有点贵。分类:将用户评论分类为"正面"、"负面"或"中性"。
示例:
评论:这个产品质量很好,非常满意!分类:正面
评论:完全不能用,浪费钱。分类:负面
评论:功能还可以,但客服响应慢。分类:中性
现在分类这条评论:
评论:这个产品用起来还行,但价格有点贵。分类:示例 1:iPhone 15 Pro → 手机示例 2:iPhone 14 → 手机示例 3:iPhone 13 → 手机
现在分类:MacBook Pro示例 1:iPhone 15 Pro → 手机示例 2:MacBook Air → 笔记本电脑示例 3:AirPods Pro → 耳机
现在分类:iPad Pro示例 1:输入:天气真好输出:正面
示例 2:"这个电影太无聊了" --> 负面情绪
示例 3:还行吧 → 中性示例 1:输入:天气真好输出:正面
示例 2:输入:这个电影太无聊了输出:负面
示例 3:输入:还行吧输出:中性示例 1:代码:x = x + 1 # 加 1判断:无用(注释只是重复代码)
示例 2:代码:result = calculate_tax(income, deductions) # 计算应纳税额判断:有用(解释了业务含义)示例 1:代码:x = x + 1 # 加 1判断:无用(注释只是重复代码)
示例 2:代码:result = calculate_tax(income, deductions) # 计算应纳税额判断:有用(解释了业务含义)
示例 3:代码:time.sleep(2) # 等待 API 限流重置判断:有用(解释了为什么等待,不是显而易见的)
示例 4:代码:users = users.filter(active=True) # 筛选活跃用户判断:无用(方法名已经很清楚了)从下面的招聘信息中提取:职位名称、薪资范围、工作地点、经验要求。用 JSON 格式输出。
招聘信息:我们正在寻找一位资深 Python 开发工程师,坐标北京,3-5 年经验,月薪 20-30k。{"职位": "Python开发", "薪资": "20k-30k", ...}
{"job": "资深 Python 开发工程师", "salary": "20-30k/月", ...}
从招聘信息中提取关键字段,按以下 JSON 格式输出。
示例 1:输入:招聘前端工程师,上海,2-3年经验,年薪30-40万输出:{ "position": "前端工程师", "location": "上海", "experience": "2-3年", "salary": "30-40万/年"}
示例 2:输入:急招 Java 后端,深圳南山,要求5年以上经验,月薪25k-35k输出:{ "position": "Java 后端", "location": "深圳南山", "experience": "5年以上", "salary": "25-35k/月"}
示例 3:输入:数据分析师,远程,不限经验,时薪200-300元输出:{ "position": "数据分析师", "location": "远程", "experience": "不限", "salary": "200-300元/小时"}
现在处理这条:输入:我们正在寻找一位资深 Python 开发工程师,坐标北京,3-5 年经验,月薪 20-30k。输出:提取产品评论中的优点和缺点,输出 JSON。
示例:"质量不错" -> {"pros": ["quality"], "cons": []}"太贵了,而且物流慢" -> {"pros": [], "cons": ["expensive", "slow delivery"]}
现在处理:[评论内容]