你有没有见过这样的场景:奶茶店来了个新店员,翻遍了厚厚一本产品手册,还是分不清“少冰正常甜”和“去冰七分甜”到底该怎么填标签。店长索性抽出三张外卖小票塞给她:“你看,这三张是顾客说的话,下面是对应的填法,照着来。”新店员秒懂。大语言模型也是这样。它肚子里装着海量知识,但遇到你特定的任务——比如把评论分成“好评/差评”、从合同里抽出“甲方/乙方”、模仿你喜欢的品牌语气——如果只抛一句“帮我分类”,它常常回得模棱两可。可只要你在提示词里贴上一两个“输入→正确输出”的活例子,它立刻会照猫画虎,把新问题按同样的样式处理好。这种“贴几个示例教AI”的方法,就叫 Few-Shot 提示。它做的其实是:用三张“示范小票”,把模型脑子里已有的知识,对齐到你的业务语言上来。
对 AI 从业者来说,Few-Shot 是 Prompt 工程中最实用的“第一板斧”:不用重新训练模型,只需几行示例就能大幅提升输出质量,帮你节省大量标注与调参成本,是迈向大模型应用落地最快的路径之一。
目录
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
输入输出示例: 准确率 (%)Few-Shot提示可视化:展示示例数量与模型准确率的关系,以及边际递减效应
原理内核:三张示范卡改变输出方向
奶茶店的故事还没讲完。为什么三张小票比厚厚一本手册更管用?因为新人小新并不是“零基础”——她在培训学校已经学会了调饮和贴标的全部操作。她缺的,只是“你这个店的口头禅和标签习惯”。三张范例的作用,是把她已有的能力“对齐”到你的场景上。大模型也一样。它已经读过万亿字,认识“好评”“差评”“甲方”“文案”这些概念。Few-Shot 要做的,不是教它新知识,而是借用几个“输入→输出”的配对,告诉它:“现在,请你按这种风格来回答。”
所谓 Few-Shot,学术上叫“少样本提示”,即在提示词中放置少量任务示例,让模型在推理时模仿示例完成任务。与之相对的是 Zero-Shot(零样本):只说“把这段话分成两类”就直接开问;以及 One-Shot(单样本):只给一个示例。Few-Shot 通常指给 2 到 5 个示例。示例本身并不改变模型的参数,模型还是那个模型,却在“看到”示例的瞬间调整了自己的输出分布——这种能力叫上下文学习,相当于小新临场瞄一眼便签,立刻改变了手头的动作。
可以用一个简化的数学视角来理解。模型对某个输出 y 的倾向,同时被它自己的“本能”和每个示例左右:
所以 Few-Shot 的本质是“用少量高质示例调整输出方向”,而不是“教会模型新知识”。这决定了它的适用边界:适合格式、风格、判断口径的迁移,不适合教模型它根本没学过的数学定理或全新事实。
- 条件概率 P(y|x,E)给定新输入 x 和示例集 E 时,模型输出 y 的概率。可以理解为“看到新问题和小票后,小新给出答案 y 的把握”。
- 正比符号 ∝左边不是严格等于右边,而是“跟着右边一起涨落”。右边数值大,左边概率就高。
- 先验 P(y)模型自己原有的倾向。比如在没有任何提示时,模型默认更爱说“好的”而不是“这是一个巨大的失败”。
- 连乘符号 ∏把每个示例的示范效果累乘起来。示例越多,引导的“合力”通常越大,但也越容易被某个坏示例带偏——这正是下一节要讲的质量问题。
示例构建:示范卡的内容设计
既然示范卡是给新人看的,那三张卡上写什么就大有讲究。店长不会把“今天的招牌是杨枝甘露”当作示例,而会选开业以来最常见的三种备注方式:少冰、换椰奶、去小料。因为示例的价值不在于“有没有道理”,而在于“能不能代表接下来会遇到的情况”。模型也是一样——它从示例中归纳规律,你要是给三个一模一样的例子,它归纳出来的规律就非常偏。
高质量的示例应当来自真实业务数据。你上个月处理过的工单、历史评论、典型合同,都是最好的素材。把这些真实样本整理成“输入→正确输出”的配对,远胜于拍脑袋编出来的例子。真实样本里藏着用户“奇怪的口语”“罕见的缩写”,这些恰是模型最容易翻车的地方。
其次要注意多样性与类别均衡。比如做情感分类,不能只给“好评”示例。至少要覆盖:典型好评、典型差评、带转折的含混评价,这样模型才能学会分辨“虽然上菜慢,但味道很好”这种复杂句。如果示例全落在同一个类别,模型会形成“啥都往那边归”的偏见。简而言之,示范卡要像一盒完整的色卡:每种常见颜色都有一格,而不是给你 50 格同一号蓝。好的示例结构,是 Few-Shot 的第一块地基。
数量把控:不是越多越好
店长如果把 50 张小票塞给新人,会发生什么?新人确实看得更久,但记住的反而是最后几张,看到一半还容易眼花。而且每张小票都是要“成本”的——打印费、阅读时间、消化难度。Few-Shot 的数量决策,本质上是一道“边际收益”题。实践中,1 到 5 个示例就能覆盖大多数任务。给得再多,效果曲线会明显变平,而每次调用提交的 token 却在直线上升。
用一条饱和曲线来描述这个现象:
这条曲线的启发是:先给 3 个示例跑一版,看效果;不够再加到 5 个;如果 5 个还上不去,别急着加到 20 个——那多半是示例质量或格式的问题,而不是数量的错。给新人加小票到 50 张,她焦虑;给模型塞 50 个示例,你的账单先焦虑。
- 效果函数 R(n)模型输出质量随示例数量 n 的变化。n 是示例个数。
- 理论上限 R_max这个任务用 Few-Shot 能达到的最好效果。它取决于模型本身的能力上限。
- 指数项 e^(-n/λ)n 增大时这一项缩小,R(n) 逐渐逼近上限。开头增得快,后面增得慢。
- 饱和速率 λ一个控制“多快达到上限”的参数。任务越简单,λ 越小,意味着 3 个示例就够;任务越复杂,λ 越大,可能需要 8 个甚至更多。
格式规范:便签要写得像便签
给新人示范卡时,你一定会在每张卡上写清楚“这是顾客留言,这是店长批注”。如果三张卡一张写在餐巾纸上、一张写在杯套上、一张写在手机上,新人反而看不懂。Few-Shot 同样讲究“版式”。模型的阅读方式虽然与人类不同,但对“哪些是输入、哪些是输出、边界在哪里”同样敏感。格式混乱的示例,等于让模型做连线题时发现线头全缠在一起。
格式规范的核心有四点。第一,统一分隔符:在每条示例前用【示例】这样的固定标记,让模型清楚地看到“一个示例从哪开始、到哪结束”。第二,固定标签命名:不要这一条用“情感:”下一条用“用户情绪=”,标签一变,模型就要重新猜。第三,输入输出要有明确的“方向感”:先说输入后说输出,每条都按同一顺序排。第四,输出约束要一致:分类任务中,示例的输出就写“正面评价”,不要写大段解释,模型会模仿这种克制。
一个推荐的模板长这样:
把版式定下来之后,模型才能把注意力放在“语义规律”上,而不是花大量力气去猜“你到底要我输出什么”。便签越清爽,新人上手越快。
【示例1】用户:这家店的红烧肉软糯入味,肥而不腻。情感:正面评价 【示例2】用户:上菜等了四十分钟,服务态度还很差。情感:负面评价
任务应用:同一张卡,不同岗位
示范卡的道理放之四海而皆准,但不同“岗位”的用法略有差异。在文本分类这类判别任务里,Few-Shot 能直接把输出“锁死”在固定标签集上。给它 3 个“用户留言→所属类别”的示例,模型就不会再自由发挥出“其他”这种不在清单里的答案。在信息抽取里,示例的作用是“教格式”。你希望模型输出 JSON,就把示例写成“原文片段→JSON 字段”的样子,模型会照着返回同构的结构化数据。
在文本生成任务里,Few-Shot 则更像“风格定调”。给模型三条你品牌历史文案,让它写新品介绍,它输出的句子节奏、用词习惯都会往示例上靠。注意,这里示例的“内容”不重要,重要的是“文风”。在对话场景中,给一两条“用户问题→理想回复”的示例,也能显著减少模型答非所问、啰嗦堆砌的问题。
选任务时记住一个判断标准:Few-Shot 适合“表达方式”类问题,不适合“知识边界”类问题。如果模型本来不知道某件事,“给例子”也教不会它;但如果它知道却不会按你的格式说,几个例子就能立刻校准。就像你没法用三张小票教会一个甜品师做川菜,但能快速教会她本店的“话术”。
调试优化:先查卡,再怪人
新人答错了,店长不会立刻怪新人笨,而是先检查示范卡:是不是我给错了?示例和今天来的客人根本不像?这是 Few-Shot 调试的核心心法——凡是输出不对,先怀疑示例,再怀疑提示。调试的第一步是“失败归因”:把模型答错的输入单独拎出来,和现有示例放在一起对比。如果这条输入在业务上明显属于“售后”类别,而你给的示例里全是“售前咨询”,那问题就在示例没能覆盖这个区域。
第二步是“补边界”。错误的输入往往是边界情况:比如一条评论同时包含好评和差评,或者一条工单既是物流问题又涉及退款。针对这类输入,专门补充一条示例,甚至不需要很多——往往一两个边界示例,就能让模型的分界线大幅右移。第三步是“对比迭代”。改动一次只动一个变量:要么换示例,要么改格式,要么调数量。同时,用一组固定的验证样本(比如 20 条真实输入)来测,上一版对几条、这一版对几条,量化比较,而不是凭感觉“好像变好了”。
调试的目标不是把示例堆到完美,而是用最少的卡片覆盖最多的确定性。店长的高明之处不是记住所有小票,而是知道“哪几张卡能覆盖 90% 的场景”。模型只需要你示意的“决策分界线”,剩下的交给它自己。
进阶组合:示范卡加口头叮嘱
如果店长只给三张卡,新人偶尔还是会迷。这时店长往往会再补一句叮嘱:“记住,如果客人说‘去冰’就按少冰处理”,或者告诉她“你先想一下自己也是顾客,会怎么点单”。Few-Shot 也可以和其他提示技术叠加,让引导力更强。最常用的组合,是“指令 + 示例”。在示例之前先写一句明确的任务指令,如“请把下面评论分为正面或负面,只输出标签”。指令给方向,示例给手感,两者配合通常好过单独用任何一样。
还可以加上角色设定:“你是一位资深电商客服。”角色的作用是激活模型在相关知识域中的“人格化记忆”,让它在示例之外额外获得一套业务常识。更进阶一点的玩法是“动态示例”:不固定提示里的示例,而是每次调用前,从你的示例库里挑出与当前输入最相似的 3 条放进去。这就像店长看着眼前这位客人的订单,临时抽出最像的三张小票,而不是永远给同一套。
把这些影响因素放在一起,可以看成一个加权组合:
这些权重在实际使用中很难精确求出,但思考方式很实用:当某类引导不够时,就加大那一项。示例没覆盖就补示例,指令模糊就写清指令,语境太干就加角色。组合的目标,是让新人不仅“照猫画虎”,还能“举一反三”。
- 总引导力 Score模型按你期望方向输出的综合强度。
- 指令项 α·Instruction明确的任务描述对模型的直接引导,α 是它的权重。
- 示例相似度均值当前输入 q 与每个示例 e_i 的平均相似度,乘上权重 β 后表示示例的“示范力”。β/n 可以理解为每个示例分享同等权重。
- 角色项 γ·Role角色设定带来的额外语境加成。
误区避坑:那些让示范卡失效的坑
最后一节,带你看看几个最常踩的坑。第一个是“同质化示例”。三条示例全是正面评价,模型就会把差评也归到正面,因为它的视野里根本没有“负面”这个选项。这就好比给小新的三张小票全是“少冰”,她自然以为本店所有客人都只要少冰。第二个是“边界缺失”。给了一堆最典型的例子,唯独没有“又爱又恨”的复杂评价,模型永远学不会处理转折句。第三是“格式混乱”。示例一会儿用“情感:”一会儿用“情绪=”,模型的注意力全部耗在瞎猜格式上,哪还有余力学规律。
第四个坑最隐蔽:“拿 Few-Shot 当微调用”。Few-Shot 不改变模型权重,只是临场引导。如果任务本身的推理强度超过模型能力——比如解偏微分方程、做复杂代码重构——你给 100 个示例也救不回来。因为新人小新本质上没学过这些,给再多示范卡她也只能硬演。这时候正确的做法是换更强的模型,或者做微调(相当于送她去上专门培训班)。识别这四类坑,你的 Few-Shot 才不会从“助推器”变成“绊脚石”。
AI 应用场景
电商客服工单自动分类
阶段:推理阶段 / Prompt 工程
解决的问题:传统规则引擎要维护几百条关键词规则,用户说法一变就失效;人工分类成本高。用 Few-Shot 在提示词中放 3-5 条“工单文本→分类标签”的示例,模型即可稳定输出“物流延迟/商品破损/退款/咨询”等固定分类。
具体案例:某电商平台每天上万条售后消息,提示词中固定放入 4 条覆盖典型场景的示例。模型先将消息自动归入对应队列,再由人工处理疑难件。上线后分类准确率从规则引擎的 82% 提升到 94%,且新话术出现时只需补充示例,无需改代码。
合同关键字段信息抽取
阶段:数据预处理 / 结构化抽取
解决的问题:合同长短不一,用正则表达式抽“合同金额”“租赁期限”等字段经常漏掉表述变体。Few-Shot 给模型展示 2 条“合同片段→结构化字段”的示例,模型会照着输出统一的 JSON 结构。
具体案例:法务团队把上百份租赁合同交给模型,提示词中附上两条标准抽取示例:“甲方:XX公司 / 租期:24个月 / 押金:3个月租金”。模型对条款表述不规范的合同同样能正确抽取,字段召回率明显提升。
品牌文案风格模仿
阶段:生成后处理 / 内容创作
解决的问题:直接让模型“写一条活泼的文案”,产出的内容往往空泛、不像自家品牌。给 3 条历史爆款文案作示例,模型输出的语气、断句、热点词会立刻贴近品牌调性。
具体案例:某精品咖啡品牌推出新品,运营在提示词中放入 3 条小红书风格的往期文案示例,并要求模型仿写新品介绍。生成的初稿经人工微调即可发布,文案制作周期从半天缩短到 20 分钟。
Python 演示
# -*- coding: utf-8 -*-"""Few-Shot 提示的极简演示:构造示例提示 + 模拟模型分类""" EXAMPLES = [ ("这家店的红烧肉软糯入味,肥而不腻。", "正面评价"), ("上菜等了四十分钟,服务态度还很差。", "负面评价"), ("装修挺有格调,不过桌子有点脏。", "中性评价"), ("味道不错,就是份量有点小。", "正面评价"),] def build_prompt(query, examples): lines = ["请判断以下用户评价的情感倾向(正面/中性/负面)。", ""] for i, (text, label) in enumerate(examples, 1): lines.append(f"【示例{i}】") lines.append(f"用户:{text}") lines.append(f"情感:{label}") lines.append("") lines.append("【新评论】") lines.append(f"用户:{query}") lines.append("情感:") return "\n".join(lines) def mini_model(prompt): # 用负面词/正面词命中,模拟模型从示例中吸收的风格规律 text = prompt.split("用户:")[-1] if any(w in text for w in ("差", "慢", "脏", "难吃", "偏高", "贵")): return "负面评价" if any(w in text for w in ("不错", "满意", "入味", "新鲜", "好喝")): return "正面评价" return "中性评价" if __name__ == "__main__": query = "酸奶很浓稠,芒果很新鲜,但价格有些偏高。" prompt = build_prompt(query, EXAMPLES) print(prompt) print("模拟模型判断:", mini_model(prompt))
EXAMPLES = [...]定义示范卡:每一条是“用户评价→正确标签”的示例对,对应 Few-Shot 中的示例集。for i, (text, label) in enumerate(examples, 1):逐条把示例排好编号,按固定格式拼进提示词。lines.append(f"情感:{label}")用统一的“情感:”标签输出,让模型(这里是模拟器)看清输入与输出的对应关系。prompt.split("用户:")[-1]取出“【新评论】”后面的文本,模拟模型把注意力放在最新的输入上。if any(w in text for w in (...))用负面词先行命中,模拟模型从示例中学到的“先抓否定信号”的判断习惯。
常见误区
误区以为 Few-Shot 和传统机器学习一样,样本越多效果必然越好。于是把 50 条甚至 100 条示例一股脑塞进提示词,觉得“模型总该学会了吧”。
正解Few-Shot 的效果随示例数量呈饱和曲线,1-5 条即可覆盖大多数任务。示例过多不仅让提示词变长、推理成本上升,还会稀释模型的注意力——它抓不住你真正想突出的那个规律。就像给小新一沓 50 张小票,她反而记不住你这店最核心的“少冰”习惯。
为何常见:人们直觉上认为“数据多=模型强”,这个惯性思维来自传统机器学习训练,却没意识到 Few-Shot 发生在推理阶段,模型权重根本没变。
误区觉得示例只是“摆个样子”,随便从历史数据里抓几条塞进去就行,不检查输出标签是否正确、示例是否互相矛盾。
正解示例是模型唯一的“行为标准”,一条标签错误的示例足以带偏整个输出方向。示例之间如果规则不一致,模型会无所适从。构造示例要像挑选教材例题一样严格:来源真实、答案正确、边界清晰。
为何常见:因为 Few-Shot 的门槛看起来太低——“不就是抄几个例子嘛”,让人忽略了示例质量对结果的绝对影响。
误区示例选的全是“一看就知道答案”的典型输入,比如情感分类只给“你很棒”和“我恨你”,结果模型遇到“虽然服务差但味道好”就翻车。
正解模型的判断分界线往往由示例的边界决定。你给的示例里没有转折句,它就没法学到“转折后语气词更重要”这类隐含规则。主动补充边界示例(模糊的、混合的、特殊的),才能划出准确的分界线。
为何常见:人脑也习惯用典型例子教学,因为典型例子最容易讲清楚;但模型需要的不是“理解的顿悟”,而是“判定边界的参照系”。
误区认为只要示例给得足够多、足够好,模型就能学会任何任务,包括它本来不具备的知识和推理能力,因此不需要微调。
正解Few-Shot 是“临场发挥”而非“长期训练”,不改变模型参数。对于模型已知但不会按你格式输出的任务,Few-Shot 很有效;对于模型本就不会的高难推理或全新知识,示例给再多也教不会。这时应换更强的基座模型或做微调。
为何常见:两者表面相似——都是“给模型看数据”。但 Few-Shot 是“看例题上场”,微调是“重修课程改变思维”,学习深度完全不同。
面试题
Q1. Few-shot提示最核心的做法是?
- A.在提示中加入少量示例← 正确答案
- B.重新训练一遍大模型
- C.增加模型的输出长度
- D.调高对话温度参数
答案:A。Few-Shot 的核心就是在提示词中放入少量“输入→输出”示例,让模型照着格式回答。选项 B 是微调,C 只是改变生成长度,D 是采样参数调整,都与 Few-Shot 的定义不符。
Q2. 零样本与Few-shot的关键区别在哪?
- A.零样本必须调参数
- B.零样本完全不给示例← 正确答案
- C.Few-shot用大量数据
- D.Few-shot无需提示词
答案:B。零样本是直接给任务指令,不附带任何示例;Few-Shot 则附带了少量示例。两者都要写提示词,都不需要调参数,Few-Shot 用的是“少量”而非“大量”示例。
Q3. 挑选Few-shot示例时首先要保证?
- A.示例输出与问题相符← 正确答案
- B.示例数量尽可能多
- C.示例格式越复杂越好
- D.示例内容完全相同
答案:A。示例的首要价值是“正确答案示范”。如果示例本身的输入输出对应错误,模型学到的就是错误规律。数量多、格式复杂、内容重复都不是高质量示例的特征。
Q4. Few-shot示例数量一般选多少最划算?
- A.选出的示例数量上限
- B.一到五个最常用← 正确答案
- C.每组至少五十个
- D.与示例数量无关
答案:B。实践表明 1-5 个示例即可覆盖大多数任务,效果曲线在此区间上升最快。50 个以上通常边际收益很小,但 token 成本和注意力负担明显上升。
Q5. 当示例无法覆盖用户输入时怎么办?
- A.增加该场景真实示例← 正确答案
- B.把输入变得和示例相同
- C.放弃提示直接做微调
- D.删除已有全部示例
答案:A。正确做法是补上该场景的真实示例,让模型看到边界情况。选项 B 是“改用户适配模型”,本末倒置;C 忽略了个别场景可通过补示例解决;D 删掉全部示例会丢失已有引导。
Q6. Few-shot提示中示例格式不统一会?
- A.干扰模型提取规律← 正确答案
- B.增加示例的准确度
- C.让输出更加多样性
- D.对结果没有任何影响
答案:A。格式统一是 Few-Shot 的基石。标签命名、分隔符、输入输出顺序如果不一致,模型要把大量注意力花在“猜格式”上,自然难以专心学习语义规律。B、C、D 都不符合实际效果。
Q7. Few-shot提示主要提升模型的哪方面?
- A.输出格式与风格← 正确答案
- B.训练数据大小
- C.服务器硬件性能
- D.参数数量的规模
答案:A。Few-Shot 在推理阶段发挥作用,通过示例让模型模仿指定的输出格式、标签口径与风格。它不改变模型参数、不扩大训练数据、更与硬件和参数规模无关。
Q8. 好的Few-shot示例应该具备哪些条件?
- A.与目标输入相似度高← 正确答案
- B.输出标签明确正确← 正确答案
- C.覆盖不同边界情况← 正确答案
- D.越简略随意越好
答案:ABC。高质量示例应接近真实业务输入、标签准确无歧义,并覆盖典型和边界场景。选项 D 完全错误,示例简略随意会导致模型学不到稳定规律。
Q9. 示例数量过多会导致哪些问题?
- A.提示词变得非常长← 正确答案
- B.推理成本显著上升← 正确答案
- C.注意力分散失去重点← 正确答案
- D.输出准确必然提升
答案:ABC。示例过多会拉长提示词、增加每次调用的 token 成本,并稀释模型对核心规律的注意力。D 是典型误解,数量增加不保证准确率提升,甚至可能下降,因为收益递减且坏示例风险累积。
Q10. 以下哪些任务适合优先用Few-shot?
- A.电商评论情感分类← 正确答案
- B.超大质因数精确分解
- C.模仿品牌文案风格← 正确答案
- D.全新科学理论推导
答案:AC。Few-Shot 适合“表达方式类”任务:情感分类需要固定的标签口径,文案模仿需要风格对齐。而 B(超大质因数分解)和 D(全新科学理论推导)都超出了模型已有的知识边界,给示例也教不会。