想象你是一位书法初学者,师父没有让你先临上三年碑帖,而是直接递来几幅字帖:“照这个气韵写。”你端详片刻——不必背下每个字,只需悟出笔画的走向、结构的疏密、墨色的浓淡。然后你提笔落纸,写出的虽不是字帖上的原字,却带着同样的神采。这就是“临帖”。 大模型的 Few-shot 学习,恰如临帖。你无需长篇大论的规则说明,只需在提示(Prompt)中放上几个“字帖”——标注好的示例——模型便能从短短几个例子中领会“这类任务该怎么答”,然后对新输入给出格式一致的答案。它不像 Zero-shot 那样凭空发挥,也不像 Fine-tuning 那样重训模型,而是一种“即学即用”的轻量适配方式。 这个能力从何而来?为什么几个例子就能改变模型的行为?答案藏在预训练阶段的大规模学习中:模型早已“练过”海量文本,Few-shot 示例只是帮它唤起最合适的“笔法”。本文将从概念定位、工作流程、模式归纳、涌现机制到工程实践,层层拆解 Few-shot 的底层逻辑。
掌握 Few-shot 的底层逻辑,是 AI 从业者用好大模型的必修课。它决定了你如何在数据稀缺时用最小成本撬动最大模型能力,也是设计高效 Prompt、评估模型边界的基础。
目录
可视化演示
展示Few-shot学习的示例引导机制、示例质量与数量对效果的影响对比,以及动态示例检索增强策略的工作流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+captions.fewshot+'
概念定位:临帖的三种境界
书法学习中存在三种境界:没看过字帖,提笔就写,全凭天分——这是 Zero-shot;看过几幅字帖,照猫画虎,形神兼备——这是 Few-shot;跟随师父日复一日临上千卷,笔法融入肌肉记忆——这是 Fine-tuning。三者对“功底”的介入程度完全不同,投入与效果也大相径庭。
从技术视角看,Zero-shot 是在提示中不提供任何示例,仅靠任务描述让模型作答;Few-shot 则提供少量(通常 1 到 50 个)标注示例,让模型在推理时“就地参考”;Fine-tuning 是在大量标注数据上通过梯度更新模型参数,从根本上重塑行为。三者构成了从零到一、从轻到重的完整频谱,而 Few-shot 恰好位于中央——它不改变功底,只改变观察方式。
这个定位在数学上非常优雅:模型参数 θ 完全固定,给定查询 x 和示例集 S_demo,只需选择概率最高的答案即可。
临帖不是变功力,而是换一种观察方式。Few-shot 也一样:参数纹丝不动,上下文一换,任务就换了。理解这一层,你便知道为什么它能“即插即用”地服务多类任务。
- 输入与示例查询 x 是需要回答的新问题,示例集 S_demo 是提示中附带的小样本对。
- 条件概率模型模型在“看过了示例”这个条件下,对每个候选答案 y 给出置信度。
- 参数冻结标识下标 θ 表示使用预训练权重,整个推理过程零更新。
- 遍历候选答案在所有可能的输出中逐一评估概率。
- 挑出最大概率者选择概率最高的答案作为最终输出。
工作流程:临帖的四个动作
拿到一幅字帖,你的动作是固定的:先摊开字帖(构造示例),再与宣纸并排(拼接上下文),然后落笔书写(生成答案),最后验收成品(提取结果)。少一步,临帖就不完整;乱一步,效果就飘了。
Few-shot 的工作流同样由四步构成。第一步是示例构造,挑选若干对(输入,输出)样本,按统一模板成对格式化;第二步是上下文拼接,将示例依序排入 Prompt,放在查询之前;第三步是推理生成,模型以自回归方式逐词产出答案;第四步是答案提取,从生成文本中解析出干净的结果字段。工程中大量“不稳定”问题,往往就出在第二步的模板与第四步的解析上。
生成环节可以形式化地表达为:答案的整体概率,等于逐词生成概率的连乘。每一步都以上文和完整提示为条件。
临帖四步看似琐碎,每一步都决定最终作品的气韵。Few-shot 的工程实现同样如此——构造、拼接、生成、提取,环环相扣。一个疏忽,可能让前功尽弃。
- 答案序列概率整段答案的联合概率,由所有词的局部概率相乘得到。
- 逐词连乘从第 1 个词乘到第 T 个词。
- 当前词第 t 步正在生成的词元。
- 历史依赖生成当前词时,要参考此前所有已生成的词。
- 完整提示包含全部示例与查询的输入序列,是生成的唯一“上下文”。
模式归纳:从字帖中读出笔法
临帖高手不会一笔一划照描,而是会悟出帖中的笔法规律:横轻竖重、撇捺舒展、转折方圆。模型在 Few-shot 中的“理解”也类似——它并非死记硬背示例,而是从示例对中归纳出一个映射规则 f,将输入 x 映射到输出 y。
这个映射从哪里来?它来自预训练阶段的“惯性”:模型见过海量文本,早已知道“当输入长成什么样时,输出通常长成什么样”。示例的作用,是把这条隐形规则在模型的“能力仓库”中点亮。研究者把这种机制称为上下文学习(In-Context Learning)——模型不是学到了新知识,而是被唤醒了旧知识。
形式上,Few-shot 的归纳过程可以写成:
悟出笔法的学徒,换一本没见过的字帖也能写出相似气韵。模型同样如此:一旦从示例中识别出任务模式,面对全新的输入也能按同样的格式与逻辑产出答案。这就是 Few-shot 的“迁移”魔力。
- 输入 x新来的查询,是模型要作答的对象。
- 输出 y模型给出的最终答案。
- 映射规则 f从输入到输出的对应关系,就是“任务”本身。
- 归纳来源f 是从示例集中提炼出来的,示例集给出了“任务长什么样”的线索。
涌现能力:为什么大字典帖才管用
为什么小模型看几个示例无动于衷,大模型一看就懂?这如同一个初学书法的人拿到王羲之的字帖,看不出门道;而一位浸淫书法二十年的老手,只消看一眼便能心领神会。Few-shot 的能力,是模型规模达到某个临界点后才“涌现”的。
研究观察到一个反直觉的现象:Few-shot 性能与模型规模之间并非平滑上升,而是存在明显的阈值效应。在参数量低于阈值时,示例数量的增加几乎不带来提升;一旦越过阈值,性能跃升,仿佛“顿悟”。这一现象说明,Few-shot 并非简单的模式匹配,而是依赖于预训练阶段积累的深层语言规律——规模越大,储备越足,示例的“点火”效率越高。
临帖能学到什么程度,取决于你已有的功底;Few-shot 能发挥多少,取决于模型的规模储备。这解释了为什么“给模型加几个例子”这种看似轻巧的操作,只有大型模型才玩得转。
- 任务准确率模型在目标任务上答对的概率,衡量 Few-shot 是否生效。
- 参数量规模模型的参数量 N,是涌现能力的“燃料”。
- 随机水平低于阈值时,性能与瞎猜无异。
- 涌现阈值性能发生跃升的临界参数量。
- 显著提升超过阈值后,示例激活了预训练积累的能力,性能跳升。
优势局限:临帖虽好,不是万能
临帖也有烦恼:字帖里若掺了几个错字,你会一并学了去;篇幅所限,帖上放不下太多字;而且临出来的字时好时坏,全看状态。Few-shot 同样有它的软肋。
优势一目了然:标注数据稀缺时能快速启动,无需训练即可部署,多任务切换只需换个 Prompt。局限性也同样鲜明——示例噪声会显著拉低性能,因为模型会一视同仁地把错误当作规律;上下文窗口限制了可容纳的示例规模;结果稳定性不如微调,换一组示例、甚至只调整示例顺序,性能都可能剧烈波动。
示例规模与上下文窗口之间的关系,可以写成一个硬约束:
临帖前要先检查字帖是否干净、篇幅是否够用。设计 Few-shot 时同样要审视示例质量与窗口容量——这两条是效果的天花板,也是工程中最常见的坑。
- 示例数量提示中放置的标注样本个数。
- 单条示例长度每条示例平均消耗的 token 数。
- 总占用所有示例消耗的 token 总量。
- 上下文上限模型的注意力窗口大小,是硬性天花板。
应用实践:如何选好字帖
师父给你的字帖,选得好不好天差地别:给初学者一幅狂草,他只会画虎不成反类犬;给一幅工整的楷书,他很快就能临得像样。Few-shot 工程中,示例的选择是最大的杠杆。
实践要点有四。一是示例选择:示例要与目标查询分布相近,最好覆盖任务的不同变体;二是数量调优:通常 4 到 16 个示例就能达到不错的效果,超过后收益递减,要找到一个“甜点值”;三是顺序影响:研究证明模型对示例顺序敏感,相关性强的示例放在靠近查询的位置往往效果更好;四是模板设计:统一的格式分隔符和清晰的输入输出结构,能显著降低模型的“理解成本”。
从机制上看,示例对预测的影响可以理解为一种相似度加权投票:
选字帖的智慧,全在于“懂你需要补什么”。Few-shot 工程里,懂查询、懂示例、懂顺序,你就能用最少的示例撬动最大的性能。
- 预测得分答案 y 的得分与其成为最终输出的概率成正比。
- 相似度加权查询 x 与示例输入 x_i 的相似度越高,该示例的影响越大。
- 标签匹配指示只有当示例标签恰好是 y 时,权重才被计入。
- 累加求和所有示例共同投票,决定答案的最终得分。
与微调对比:临帖 vs 拜师学艺
临帖是即兴的:不改变你的书写功底,写下即走;拜师学艺则是系统训练:日复一日,从根本上重塑笔法。Few-shot 与 Fine-tuning 的对比,正是这两种投入模式的投射。
Few-shot 不更新任何参数,推理即完成,近乎零成本,适合快速试探与多任务切换;Fine-tuning 需要数据标注、GPU 训练与版本管理,换来的是稳定、可预期的性能与领域风格的深度内化。两者并非替代关系,而是互补:业务探索期用 Few-shot 验证方向,核心成熟期用 Fine-tuning 固化能力。
两种方式对模型参数的影响,可以用一个公式对照:
临帖者与拜师者没有高下之分,只有时机与目标的不同。Few-shot 与 Fine-tuning 的选择同理——急流试水文用临帖,深耕一域用拜师,聪明的工程师总是两者兼修。
- 零更新Few-shot 直接沿用预训练权重,参数一行不变。
- 微调新参数Fine-tuning 产出一组新的权重。
- 学习率步长控制每一步更新的幅度,太大震荡、太小缓慢。
- 损失梯度指示参数应该往哪个方向调整的错误信号。
AI 应用场景
智能客服的意图识别冷启动
阶段:应用部署与冷启动
解决的问题:传统意图识别需要准备数千条标注语料并训练分类器,新业务线冷启动周期以周计。用 Few-shot,只需整理 10 到 20 条典型对话示例放入 Prompt,模型即可按相同意图格式对新提问分类,实现小时级上线。这正是“临几张字帖就能开工”的落地。
具体案例:某金融科技公司新增“保险理赔”客服通道,标注团队尚未跟上。客服主管挑选了 12 条历史对话作为 Few-shot 示例,涵盖理赔咨询、进度查询、材料补交三类意图,模型当天即可准确处理新进线,人工复核通过率超过八成。
多品类商品文案的风格迁移
阶段:内容生成与多风格适配
解决的问题:不同品类的商品文案调性差异极大,传统方式为每个品类微调一个生成模型,成本高、周期长。Few-shot 只需在提示中放入 3 到 5 条目标品类的爆款文案示例,即可稳定复刻其语气与结构,实现“看得懂字帖、写得出同款”。
具体案例:某电商运营团队同时负责美妆、数码、食品三类商品,运营将历史爆款文案各选 3 条作为示例,新品文案自动匹配各品类调性,A/B 测试显示点击率平均提升约两成,且无需任何模型训练。
Python 演示
"""Few-shot 学习模拟演示:通过计算查询与示例的文本相似度, 模拟模型从少量示例中归纳映射规则的过程""" import mathimport re EXAMPLES = { "体育": [ "库里今天命中九个三分球", "足协杯决赛点球大战分胜负", ], "科技": [ "公司发布新一代手机芯片", "量子计算迎来新的突破", ],} def tokenize(text): """按双字切分中文文本, 模拟词元化""" chars = re.sub(r"[^\u4e00-\u9fa5]", "", text) return [chars[i:i + 2] for i in range(len(chars) - 1)] def build_vector(text): """统计双字词频并做 L2 归一化, 得到向量表示""" freq = {} for gram in tokenize(text): freq[gram] = freq.get(gram, 0) + 1 norm = math.sqrt(sum(v * v for v in freq.values())) if norm == 0: return {} return {k: v / norm for k, v in freq.items()} def cosine_similarity(v1, v2): """计算两个向量夹角的余弦值, 值越接近 1 表示越相似""" common = set(v1) & set(v2) return sum(v1[k] * v2[k] for k in common) def few_shot_predict(query, examples): """Few-shot 核心: 逐示例累加相似度得分, 归入总分最高的类别""" qvec = build_vector(query) scores = {} for label, samples in examples.items(): total = 0.0 for sample in samples: total += cosine_similarity(qvec, build_vector(sample)) scores[label] = total best = max(scores, key=scores.get) return best, scores if __name__ == "__main__": test_queries = [ "全红婵在跳台决赛中获得满分", "大模型今天又发布了新版本", ] for q in test_queries: label, scores = few_shot_predict(q, EXAMPLES) print(f"查询: {q}") print(f" 类别得分: {scores}") print(f" 预测类别: {label}") print()
chars = re.sub(r"[^\u4e00-\u9fa5]", "", text)只保留中文字符,去掉标点干扰,相当于“洗去字帖上的墨渍”。freq[gram] = freq.get(gram, 0) + 1统计每个双字特征出现的次数,构建词频向量。norm = math.sqrt(sum(v * v for v in freq.values()))计算向量模长,用于归一化,避免长文本天然占优势。return {k: v / norm for k, v in freq.items()}归一化后的向量,让相似度比较只看“方向”不看“长度”。total += cosine_similarity(qvec, build_vector(sample))逐个示例累加相似度,模拟“每张字帖都投一票”。best = max(scores, key=scores.get)选出总得分最高的类别,作为最终的 Few-shot 预测结果。
常见误区
误区觉得 Few-shot 和背单词一样,示例给得越多,模型学得越扎实,所以把能塞进 Prompt 的内容全塞进去。
正解示例数量存在收益递减规律,超过甜点值后不仅提升微弱,还可能因上下文过长、噪声混入而拉低效果。上下文窗口是硬约束,示例过多会挤占查询空间,甚至让模型“迷失在字帖堆里”。
为何常见:直觉上“看得越多学得越好”,忽略了 Few-shot 不是在学习新知识,而是在激活已有模式——少量高质量示例足以完成任务识别。
误区既然效果提升了,那模型一定“记住”了这些例子,权重肯定发生了变化。
正解Few-shot 的推理过程中参数完全冻结,没有任何梯度计算或权重更新。它只是通过输入序列中的示例来引导模型已有的行为模式。这与 Fine-tuning 有本质区别——一个是换字帖,一个是改功底。
为何常见:看到性能提升就自然地认为是“学到东西了”,但上下文学习是“唤醒”而非“写入”。
误区Few-shot 只是加几个示例的通用技巧,任何模型都能从中受益,模型大小不影响。
正解Few-shot 是大模型“涌现”出的能力,小模型即使给了示例,性能提升也很有限。示例的作用更像“点火”,燃料是预训练阶段积累的规律,规模不足则火力不足。
为何常见:将 Few-shot 简单理解为“提示词技巧”,忽略了其背后对模型容量和预训练质量的依赖。
误区模型足够聪明,能自动忽略示例中的错误标签,只吸收正确的格式。
正解模型会一视同仁地把示例当作规律来归纳,一个错误标签可能被当作“规则的一部分”泛化到新样本上。研究显示,Few-shot 对示例噪声非常敏感,即使单个错误也可能显著降低准确率。
为何常见:低估了模型“照单全收”的拟合倾向——它不是在批判性阅读字帖,而是在模仿字帖的一切特征。
误区Few-shot 零成本且效果不错,既然这么方便,以后就不再需要微调了。
正解Few-shot 适合任务模式清晰、容错率较高的场景;对于需要持续稳定输出、领域风格强约束的核心业务,微调仍不可替代。两者是互补关系:先用 Few-shot 快速验证方向,再用微调固化成熟方案。
为何常见:拿着 Few-shot 的亮眼表现与微调做简单对比,忽略了稳定性、可控性和领域深度这些微调独有的价值。
面试题
Q1. Few-shot 学习的核心做法是:
- A.用海量数据重新训练模型
- B.提示中提供少量标注示例← 正确答案
- C.完全不给示例直接推理
- D.只更新输出层的模型参数
答案:B。Few-shot 的核心就是在提示(Prompt)中提供少量标注示例引导模型完成任务。选项 A 是微调,C 是 Zero-shot,D 是参数高效微调,均与 Few-shot 的定义不符。
Q2. Zero-shot 与 Few-shot 的本质区别是:
- A.提示中是否有任务示例← 正确答案
- B.模型参数量是否够大
- C.是否需要 GPU 加速
- D.是否用反向传播训练
答案:A。Zero-shot 不提供任何示例,Few-shot 则提供少量标注示例,两者的本质区别就在于提示中是否有示例。二者都不会更新参数(排除 D),也都需要 GPU 推理(排除 C)。
Q3. Few-shot 推理时模型参数的状态是:
- A.随推理过程动态更新
- B.完全冻结不发生改变← 正确答案
- C.只更新注意力层参数
- D.用反向传播逐步更新
答案:B。Few-shot 推理时模型参数完全冻结,与 Fine-tuning 的本质区别就在于此。模型只是通过输入中的示例改变输出分布,而非改变自身权重。
Q4. 关于 Few-shot 中示例的作用,正确的是:
- A.为模型注入全新的知识
- B.激活预训练习得的能力← 正确答案
- C.增大模型参数的总量
- D.降低模型推理的延迟
答案:B。示例不注入新知识,也不改变参数,而是激活预训练阶段已经编码的任务模式——就像“字帖”唤起书家的记忆。参数量和延迟都与示例无关。
Q5. 示例数量 k 与 Few-shot 性能的关系是:
- A.k 越大性能一定越好
- B.收益递减且受窗口限制← 正确答案
- C.k 与性能完全不相关
- D.k 必须超过一百才有效
答案:B。Few-shot 性能随示例数量增加而提升,但遵循收益递减规律,且受上下文窗口硬约束。超过甜点值后继续增加示例,不仅提升甚微,还可能引入噪声。
Q6. Few-shot 与 Fine-tuning 最本质的区别是:
- A.使用的底座模型不同
- B.是否更新模型内部参数← 正确答案
- C.是否需要文本类型输入
- D.结果是否经过人工审核
答案:B。Few-shot 冻结全部参数,仅通过输入示例引导模型;Fine-tuning 通过梯度更新改变权重。模型不同、输入类型、人工审核都与二者的本质区分无关。
Q7. “涌现能力”描述的是大模型的:
- A.参数量越大推理越快
- B.规模达阈值后能力突现← 正确答案
- C.训练数据永远无法耗尽
- D.网络层数可以无限加深
答案:B。涌现是指模型参数量超过某个临界点后,原本随机水平的任务突然获得显著性能提升的现象。它与推理速度、数据耗尽、层数加深无关,是规模效应的非线性表现。
Q8. 设计高质量 Few-shot 示例时应当注意:
- A.示例格式与目标输出保持一致← 正确答案
- B.示例尽量覆盖任务的不同变体← 正确答案
- C.示例数量越多效果一定越好
- D.示例的标签必须保证准确← 正确答案
答案:ABD。格式一致、覆盖变体、标签准确是高质量示例的三大要素。示例数量并非越多越好(C 错),收益递减且有窗口限制。
Q9. Few-shot 学习的主要局限性包括:
- A.受模型上下文窗口长度限制← 正确答案
- B.输出稳定性不如微调方案← 正确答案
- C.完全不需要任何计算资源
- D.对示例质量和噪声较敏感← 正确答案
答案:ABD。上下文窗口限制示例规模、输出稳定性不如微调、对示例噪声敏感是三大局限。C 显然错误——推理仍需要计算资源,只是无需训练。
Q10. 从“模式归纳”视角理解 Few-shot, 正确的有:
- A.模型从示例中提取映射规律← 正确答案
- B.模型将示例存入长期记忆
- C.模型复用预训练任务先验← 正确答案
- D.模型通过梯度更新记忆示例
答案:AC。Few-shot 的底层机制是从示例中提取输入到输出的映射规律(A 对),并复用预训练阶段习得的任务先验(C 对)。它不会把示例存入长期记忆(B 错),也不进行梯度更新(D 错)。这正是“临帖悟笔法”而非“背下全帖”。