Few-shot 与上下文学习
few-shot 不更新参数,只把任务分布锚定到示例附近,效应是双向的:收敛(格式统一、边界清晰)与收窄(多样性与泛化被压掉)。能用结构化输出表达的格式就不该再堆示例;提示词改动要做消融验证,否则分不清是示例起效还是运气。
也叫:few-shot · 少样本 · zero-shot · in-context learning · 上下文学习 · ICL · 提示词模式
原理拆解出自 T1-1
| 形态 | 它在做什么 | 看得见的症状 |
|---|---|---|
| 标签偏置与顺序敏感 | 示例里某一类占多数,模型倾向输出那一类 | 最后一个示例的影响通常最大 |
| 示例污染 | 把示例中的具体内容当成可用素材抄进结果 | 开篇那个凭空出现的公司名 |
| 覆盖诱导 | 遇到示例没覆盖的输入形态,硬套最接近的那个示例 | 两栏简历被按单栏抽 |
CoT 的机制没变,处境变了。2022–2024 年它把「一步到位」的映射拆成多步,等于给模型更多计算步数,中间结果还显式写进上下文供后续引用;现在模型内部已经在跑同一件事,你再规定路径就是把它限制在你想到的那一条上 —— 更糟的是它容易把这套流程当成输出格式来满足。
few-shot 在做什么:把任务分布锚定到示例附近。
没有示例 给了 5 个示例
┌────────────────────┐ ┌────────────────────┐
│ 模型的可行输出空间 │ │ ███ 锚定区域 │
│ · · · · · │ ────► │ ███ · · │
│ · · · · · │ │ ███ · │
└────────────────────┘ └────────────────────┘
格式不统一,但覆盖广 格式统一了,但覆盖也窄了这张图解释了 few-shot 的双向效应:收敛(好——格式统一、边界清晰)和收窄(坏——探索空间被限制住)。老模型的默认输出太发散,收敛的收益远大于收窄的损失;新模型本身格式和判断力已经够好,天平就翻过来了。官方的实践结论正是这个方向:给示例反而把新一代模型约束在了更窄的探索空间里,于是从「给示例」转向了「设计更有表达力的接口」——比如把状态定义成一个明确的枚举,枚举值本身就在提示用法,比三个示例更省、更准。
few-shot 起反作用的三种典型
- 标签偏置与顺序敏感:示例里某一类占多数,模型会倾向输出那一类;而最后一个示例的影响通常最大。
- 示例污染:抽取、改写类任务里,模型会把示例中的具体内容当成可用素材抄进结果。开头那个「凭空出现的公司名」就是这个。
- 覆盖诱导:遇到示例没覆盖的输入形态,模型会硬套最接近的那个示例,而不是老老实实按真实结构处理。
CoT 为什么曾经有效:把一个「一步到位」的映射拆成多步,等于给模型更多的计算步数去逼近答案,同时把中间结果显式写进上下文供后续步骤引用。这个机制在 2022–2024 年是真实有效的。
为什么现在可能有害:推理模型已经在内部做同一件事。你再在提示词里规定路径,等于把它限制在你想到的那一条上;更糟的是,模型容易把这套流程当成输出格式来满足——认认真真列了个清单,看起来很有条理,实际推理被压缩掉了。
所以需要划一条线,避免矫枉过正:
| 你在规定什么 | 2026 年的判断 |
|---|---|
| 推理过程(先 A 再 B 再检查 C) | 多半负优化 |
| 输出结构(返回哪些字段) | 仍然有效,且应交给结构化输出去硬保证(T1-2) |
| 领域约束与口径(只有你知道的事) | 必须给,模型推不出来 |
一句话:别教它怎么想,要告诉它想什么、以及结果长什么样。
以上节选自T1-1 Prompt 基本模式:few-shot 与 CoT 的有效边界,读全文能看到前后语境。