跳到主要内容

零样本之墙:为什么上下文示例在生产规模下失效

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数团队发现“零样本墙”(zero-shot wall)的过程都如出一辙:一个新的边界案例导致模型出错,他们向提示词(prompt)中添加一个示例,问题解决了。三个月后,他们已经累积了 40 个示例,消耗了 6,000 个 token 的上下文,性能指标数周没有变化,而那个清楚每个示例来源的提示词工程师刚刚离职了。

少样本提示(Few-shot prompting)非常具有诱惑力,因为它见效快。你观察到一个失败案例,添加一个演示示例,失败就消失了。反馈循环很紧凑,而且胜利感觉是无成本的。你没有注意到的是,随后的每一个示例带来的收益都在递减——到某个阶段,你为了那些几乎可以忽略不计的改进,付出了大量的 token、延迟和认知开销。

这就是“零样本墙”:它不是性能断崖式下跌的硬限制,而是一个收益锐减的区域。在这个区域,上下文学习(in-context learning)对于你的任务已经达到了天花板,剩下的唯一手段就是微调(fine-tuning)。

研究到底说明了什么

少样本提示的性能曲线并非单调递增。多项研究表明,在分类任务中,模型通常在 5–20 个示例范围内表现最优,随着演示示例的增加,性能会逐渐下降。事实上,示例越多,性能反而可能变得更差。

其原因在于结构性,而非偶然性:

小型模型退化最早。 大约在 80 亿参数(8B)以下,少样本理解的连贯性极差,以至于增加示例反而会干扰模型。实践中的规律很明显:一个 3B 模型在处理带有 30 个标注示例的支持工单分类任务时,表现比只有 5 个示例时更差,因为过多的上下文压垮了它泛化模式的能力。

推理能力的退化早于分类能力。 一个最清晰的生产信号是,思维链(chain-of-thought)推理在大约 3,000 个 token 的上下文时就开始崩溃,这远远早于大多数团队触及上下文限制的时间。如果你的任务需要多步推理,你可能会比预想中更早地撞墙,即使是标称支持 128K token 的模型也是如此。

格式敏感性永远不会消失。 测量 ICL 连贯性的研究发现,即使是目前最强大的模型,Cohen's κ 分数也低于 0.75——这意味着同一个模型在同一个任务上,会根据空格、标点符号和示例顺序的不同,产生显著不同的预测。在生产规模下,这是一个无法通过提示词工程解决的延迟/质量变异性问题。

预示天花板的任务特征

并非所有任务都会在同一点撞墙。以下特征预示了更多示例究竟会提供帮助还是造成伤害:

分布偏斜。 如果你的任务存在长尾效应——稀有类别、异常措辞、占实际流量 15% 的边界案例——无论你添加多少个示例,少样本提示在常见案例中表现良好,但在长尾案例中都会失败。你能放入上下文的示例无法涵盖整个分布。微调则可以从你的标注数据集中学习完整的分布。

跨多样化输入的一致性要求。 高平均准确率和可预测行为之间是有区别的。少样本模型经常在实现相同平均准确率的同时,根据提示词的变动对单个数据点做出完全不同的预测。如果你的应用要求输入 A 始终映射到输出 B——而不只是模型有 90% 的概率做对——你需要微调的学习权重,而不是上下文模式匹配。

多步或复合任务。 模型必须将多个推理步骤链接在一起的任务,在少样本提示下会迅速退化。上下文示例演示了端到端行为,但无法教会模型泛化所需的中间表示。在这些任务上,经过微调的模型表现始终优于采用多样本提示(many-shot prompting)的大型模型。

示例顺序敏感性。 如果改变演示示例的顺序会导致 16 个百分点的准确率波动,那么你实际上并没有控制模型的行为——你只是在祈祷当前提示词中示例的随机排列恰好接近最优。这不是生产系统;而是在掷灌铅的骰子。

你已经撞墙的信号

这些是可观察的指标,而非理论指标:

提示词改进已停止产生复合收益。 你尝试了不同的措辞、重新排序示例、添加了负面演示、调整了格式。每一次改动只产生 0.2% 的提升或 0.3% 的倒退。这种迭代是徒劳的劳动,产生的只是噪声。

相同的失败模式反复出现。 你修复了一类错误,它又以略有不同的表现形式再次出现。模型并没有从你的示例中学习到规则;它只是在无法泛化的层面上进行模式匹配。看到同一种失败模式出现三次是一个强烈的信号,表明上下文演示无法编码你所需的变量。

你正在防御性地添加示例。 当一个新的、导致模型出错的工单进来时,有人会把它添加到提示词中。这与深思熟虑的示例筛选完全不同——这是响应式的打补丁,它在增加上下文成本的同时,带来的质量收益却微乎其微。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates