什么是 上下文学习?

上下文学习(In-Context Learning,ICL)是语言模型在推理时利用当前上下文中的指令、演示或其他任务证据调整预测,而不更新模型参数的行为。

快速了解

创建时间在 GPT-3 论文中被发现,2020 年
规范文档官方规范

工作原理

Prompt 是推理时任务契约

有效 ICL Prompt 应区分 Instruction、Demonstration、Query 和必需输出格式。示例可以传达标签语义、边界案例、推理风格或序列化约定。目标答案不能泄漏到上下文中,评测与生产必须走相同格式化链路,并应区分用于说明任务的示例与用于支撑事实的检索证据。

选择、顺序与校准都需要实证

效果可能随示例相关性、类别覆盖、格式、顺序和标签措辞变化。有研究发现,在部分设置中,示例传达的输入分布与格式可能比标签更关键,但另一些任务仍对标签高度敏感。应按任务相关特征检索示例,定义确定性 Tie-break,测试多种顺序,并且只在留出指标证明有效时采用 Calibration。

内部机制尚无统一结论

现有解释包括 Pattern Completion、隐式贝叶斯推断、类似检索的行为,以及 Transformer Circuit 在 Activation 中模拟学习算法。在合成任务上支持某种机制的证据,不能自动推广到所有模型与 Prompt。工程上应把 ICL 视为有实测边界的条件行为,而不是权重已变化或新算法已被永久存储的证明。

生产 ICL 以灵活性换取上下文成本与风险

示例会在每次请求中消耗 Token、增加 Prefill 工作量,也可能暴露敏感案例或携带 Prompt Injection。应对 Prompt 和示例池版本化,过滤不可信内容,隔离指令与数据,并记录所选示例 ID 而不是隐含个人文本。还要在同一测试集上比较 Zero-shot、Retrieval、Rule 与 Fine-tuning,包括稀有类别和分布偏移。

主要特点

  • 通过当前输入调整预测,不执行优化器步骤或权重更新
  • 可以使用指令、示例、标签定义、约束和任务证据
  • 相关上下文被移除后即结束,除非外部系统另行存储
  • 对模型、模板、示例选择、顺序、格式与 Query 分布敏感
  • 每次请求都会占用上下文容量并增加 Prefill 计算
  • 必须用留出集评测,因为合理示例并不保证泛化

常见用途

  1. 不训练新 Checkpoint,直接为一次请求定义新的分类标签集合
  2. 示范必需 JSON、表格或领域专用输出约定
  3. 检索相似且已审核案例,辅助客服、审核或信息抽取判断
  4. 在投入 Fine-tuning 前验证任务能否通过示例有效表达
  5. 让同一基础模型在运行时切换多个边界清晰的任务

示例

loading...
Loading code...

常见问题

上下文学习与微调有什么区别?

ICL 只改变本次请求的上下文,不修改模型权重,因此通常需要重复提供示例并消耗输入 Token。Fine-tuning 通过优化器更新参数,生成新的 Checkpoint 或 Adapter。应在同一留出集上比较二者,并同时考虑运行成本、隐私、更新频率和回滚需求。

ICL Prompt 应该放多少个示例?

没有通用数量。有效示例数取决于模型、任务、类别覆盖、示例长度、上下文预算与选择方法。先用 Zero-shot 建立 Baseline,再逐步增加已审核示例,并绘制质量与 Token、延迟、成本的关系;额外示例不能带来足够收益时就应停止增加。

示例标签和排列顺序重要吗?

可能重要,但敏感程度因模型和任务而异。示例不仅传达标签,也传达格式与输入分布;顺序还会与近因效应、类别平衡或 Prompt 结构交互。应使用有效标签和确定性选择、排序策略,再实测多种顺序,而不是套用「最相似示例永远放最后」等固定规则。

ICL 是否意味着模型永久学会了新能力?

不是。上下文学习通常只在指令和示例保留于活动上下文时影响预测。持久化需要外部 Memory、Prompt Store、Retrieval System、Adapter 或权重更新。其内部机制仍在研究,Activation 层面的适配不能描述为已经证实的参数学习。

来自用户或检索系统的示例可能带来什么问题?

示例可能包含隐私数据、错误标签、过期策略、Prompt Injection、对抗格式,或与评测答案过度相似。生产链路应执行权限与血缘检查、敏感字段脱敏、指令数据隔离、标签验证、测试集去重和上下文限额,并记录示例 ID 以便审计。

相关术语

相关文章