上下文学习原理详解:无需微调,用少量示例引导大模型完成任务

上下文学习是在提示中加入示例,让大语言模型按上下文完成新任务的方法。它利用输入输出对或情境示例设定任务,适合少样本任务和提示工程入门。

上下文学习原理详解:无需微调,用少量示例引导大模型完成任务

什么是上下文学习?

上下文学习,也称 In-Context Learning(ICL),是指在提示中加入示例,让大语言模型根据这些上下文示例完成新任务的方法。示例通常作为输入序列的一部分提供,模型不需要为这个任务改变自身参数,而是依据提示里的模式生成回答。

更直观地说,它像是让模型“先看样例,再照着处理新的输入”。例如,先给模型几组输入和对应输出,模型会尝试从中识别任务类型、输出格式和回答规律,再把类似规律应用到新的输入上。

要点: 上下文学习的核心不是现场训练一个新模型,而是在一次提示中提供足够清楚的任务上下文,让模型按上下文完成推理或生成。

上下文学习如何通过示例设定任务

在 ICL 中,提示不仅包含用户当前要处理的问题,还会包含若干示例。示例可以是输入输出对,也可以是更宽泛的情境示例,例如任务说明、格式要求、回答风格或已完成样例。

模型处理提示时,会先观察这些示例,再对新的输入给出预测或生成结果。对使用者来说,关键是把任务规则尽量体现在示例里,而不是只依赖抽象说明。

一个基础 ICL 提示通常包含哪些部分

组成部分作用示例写法
任务说明告诉模型要完成什么任务请判断用户反馈的情绪倾向
示例输入展示待处理文本的形式输入:物流很快,包装也完整
示例输出展示期望答案输出:正向
待处理输入提供新的任务对象输入:等了三天还没有发货
输出要求约束返回格式只输出情绪类别

这种结构的价值在于,模型可以从上下文中看到任务是如何被完成的,而不只是看到一句泛泛的指令。

上下文学习的核心原理可以怎样理解

面向使用者理解 ICL 时,可以抓住一句话:它是在上下文中从类比中学习。模型并不是因为提示里的几个样例就更新了参数,而是借助输入上下文中的模式,对当前任务做临时性的条件设定。

少量示例通常可以帮助模型识别三类关键信息:

示例传递的信息对模型输出的影响
任务类型判断当前是在分类、抽取、改写、问答还是生成
输出格式决定返回标签、字段、短句还是结构化内容
回答风格影响语气、详略程度和表达方式

因此,ICL 的效果很大程度上取决于示例是否能代表真实任务。示例越清楚地体现输入形式和期望输出,模型越容易在新输入上复用同样的上下文模式。

需要注意的是,关于 ICL 的底层机制,学术和工程领域仍有更复杂的讨论。对于日常使用和提示设计,更实用的理解是:把示例放进同一个提示,让模型基于这些示例完成新输入。

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

上下文学习和微调都可以让大模型更适配某类任务,但二者的工作方式不同。ICL 依赖提示中的示例,不需要为每个任务微调并保存新参数;微调则通常意味着围绕特定任务对模型进行训练和参数更新。

对比维度上下文学习(ICL)微调
是否修改模型参数通常不修改通常会修改模型参数
任务信息放在哪里放在提示上下文中通过训练过程写入模型参数
是否需要为每个任务保存新参数通常不需要可能需要保存任务相关参数
启动成本适合快速尝试新用例通常需要准备训练流程和数据
适合场景少量示例即可表达规则的任务需要长期、稳定适配的任务

这并不意味着 ICL 一定可以替代微调。更稳妥的判断方式是:如果任务可以用少量示例清楚表达,可以先用 ICL 快速验证;如果需要更系统的长期适配,再考虑其他训练或优化方式。

上下文学习适合哪些应用场景

当任务规则能够通过少量样例表达时,ICL 往往适合作为快速验证方案。它适合探索新用例、测试提示格式,以及在不改变模型参数的情况下约束输出。

用户需求解决方式可能带来的效果
快速试验一个新任务在提示中加入几组代表性示例较快观察模型是否能理解任务模式
少样本分类提供输入文本和类别标签的输入输出对帮助模型按样例判断新输入类别
格式化信息抽取展示原文和期望字段输出引导模型按相同结构返回结果
问答风格约束给出若干问题和理想回答样例让回答更接近期望的详略和语气
输出格式统一在示例中保持固定字段和顺序帮助模型更稳定地遵循格式

使用 ICL 时,示例应尽量贴近真实输入和期望输出。如果示例与实际任务差异过大,模型可能难以准确识别应当迁移的模式。

设计上下文学习提示的基本步骤

明确任务目标和期望输出格式

先说明模型要完成什么任务,以及输出应该是什么形式。对于分类任务,可以明确只输出类别;对于抽取任务,可以明确字段名称;对于问答任务,可以说明回答长度和语气。

准备少量代表性示例

选择能覆盖常见输入形式的输入输出对,或能说明任务要求的情境示例。示例不一定很多,但应当清楚、稳定,并尽量减少歧义。

把示例和新输入放入同一个提示

ICL 的关键是让模型在同一段输入序列中看到示例和待处理输入。常见顺序是:任务说明、若干示例、待处理输入、输出要求。

根据输出结果调整示例

如果模型输出偏离预期,可以回到示例本身检查:输入是否贴近真实任务,输出格式是否一致,示例是否足以表达任务规则。必要时,可以调整示例表达、顺序或格式一致性。

一个简单检查清单

  • 示例是否展示了真实输入的典型形式?
  • 示例输出是否与最终希望得到的格式一致?
  • 任务说明和示例之间是否存在冲突?
  • 新输入是否与示例放在同一个上下文中?
  • 输出要求是否足够明确,避免模型过度自由发挥?

使用上下文学习时容易忽略的问题

ICL 的门槛较低,但并不等于随意放几个例子就能稳定得到理想结果。示例质量、格式一致性和任务清晰度,都会影响模型是否能正确把握上下文模式。

常见需要注意的问题包括:

  • 示例过少或代表性不足。 如果示例无法覆盖主要输入形式,模型可能难以推断任务规则。
  • 示例格式不一致。 输入输出格式前后变化,会增加模型理解任务的难度。
  • 示例与新输入差异过大。 当新输入明显超出样例范围时,模型可能无法准确类比。
  • 误以为已经训练出专用模型。 ICL 不修改模型参数,因此不应把一次提示中的表现理解为模型已经被永久训练。
  • 缺少结果复查。 对重要任务,更稳妥的做法是结合人工检查或评估流程验证输出,而不是只依赖单次生成结果。

总体来看,上下文学习是一种把任务示例放入提示中的方法,适合快速引导大模型完成少样本任务。它的优势在于无需为每个任务微调和保存新参数,但效果仍依赖示例是否清楚、相关且格式一致。