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

什么是上下文学习?
上下文学习,也称 In-Context Learning(ICL),是指在提示中加入示例,让大语言模型根据这些上下文示例完成新任务的方法。示例通常作为输入序列的一部分提供,模型不需要为这个任务改变自身参数,而是依据提示里的模式生成回答。
更直观地说,它像是让模型“先看样例,再照着处理新的输入”。例如,先给模型几组输入和对应输出,模型会尝试从中识别任务类型、输出格式和回答规律,再把类似规律应用到新的输入上。
要点: 上下文学习的核心不是现场训练一个新模型,而是在一次提示中提供足够清楚的任务上下文,让模型按上下文完成推理或生成。
上下文学习如何通过示例设定任务
在 ICL 中,提示不仅包含用户当前要处理的问题,还会包含若干示例。示例可以是输入输出对,也可以是更宽泛的情境示例,例如任务说明、格式要求、回答风格或已完成样例。
模型处理提示时,会先观察这些示例,再对新的输入给出预测或生成结果。对使用者来说,关键是把任务规则尽量体现在示例里,而不是只依赖抽象说明。
一个基础 ICL 提示通常包含哪些部分
| 组成部分 | 作用 | 示例写法 |
|---|---|---|
| 任务说明 | 告诉模型要完成什么任务 | 请判断用户反馈的情绪倾向 |
| 示例输入 | 展示待处理文本的形式 | 输入:物流很快,包装也完整 |
| 示例输出 | 展示期望答案 | 输出:正向 |
| 待处理输入 | 提供新的任务对象 | 输入:等了三天还没有发货 |
| 输出要求 | 约束返回格式 | 只输出情绪类别 |
这种结构的价值在于,模型可以从上下文中看到任务是如何被完成的,而不只是看到一句泛泛的指令。
上下文学习的核心原理可以怎样理解
面向使用者理解 ICL 时,可以抓住一句话:它是在上下文中从类比中学习。模型并不是因为提示里的几个样例就更新了参数,而是借助输入上下文中的模式,对当前任务做临时性的条件设定。
少量示例通常可以帮助模型识别三类关键信息:
| 示例传递的信息 | 对模型输出的影响 |
|---|---|
| 任务类型 | 判断当前是在分类、抽取、改写、问答还是生成 |
| 输出格式 | 决定返回标签、字段、短句还是结构化内容 |
| 回答风格 | 影响语气、详略程度和表达方式 |
因此,ICL 的效果很大程度上取决于示例是否能代表真实任务。示例越清楚地体现输入形式和期望输出,模型越容易在新输入上复用同样的上下文模式。
需要注意的是,关于 ICL 的底层机制,学术和工程领域仍有更复杂的讨论。对于日常使用和提示设计,更实用的理解是:把示例放进同一个提示,让模型基于这些示例完成新输入。
上下文学习与微调有什么区别
上下文学习和微调都可以让大模型更适配某类任务,但二者的工作方式不同。ICL 依赖提示中的示例,不需要为每个任务微调并保存新参数;微调则通常意味着围绕特定任务对模型进行训练和参数更新。
| 对比维度 | 上下文学习(ICL) | 微调 |
|---|---|---|
| 是否修改模型参数 | 通常不修改 | 通常会修改模型参数 |
| 任务信息放在哪里 | 放在提示上下文中 | 通过训练过程写入模型参数 |
| 是否需要为每个任务保存新参数 | 通常不需要 | 可能需要保存任务相关参数 |
| 启动成本 | 适合快速尝试新用例 | 通常需要准备训练流程和数据 |
| 适合场景 | 少量示例即可表达规则的任务 | 需要长期、稳定适配的任务 |
这并不意味着 ICL 一定可以替代微调。更稳妥的判断方式是:如果任务可以用少量示例清楚表达,可以先用 ICL 快速验证;如果需要更系统的长期适配,再考虑其他训练或优化方式。
上下文学习适合哪些应用场景
当任务规则能够通过少量样例表达时,ICL 往往适合作为快速验证方案。它适合探索新用例、测试提示格式,以及在不改变模型参数的情况下约束输出。
| 用户需求 | 解决方式 | 可能带来的效果 |
|---|---|---|
| 快速试验一个新任务 | 在提示中加入几组代表性示例 | 较快观察模型是否能理解任务模式 |
| 少样本分类 | 提供输入文本和类别标签的输入输出对 | 帮助模型按样例判断新输入类别 |
| 格式化信息抽取 | 展示原文和期望字段输出 | 引导模型按相同结构返回结果 |
| 问答风格约束 | 给出若干问题和理想回答样例 | 让回答更接近期望的详略和语气 |
| 输出格式统一 | 在示例中保持固定字段和顺序 | 帮助模型更稳定地遵循格式 |
使用 ICL 时,示例应尽量贴近真实输入和期望输出。如果示例与实际任务差异过大,模型可能难以准确识别应当迁移的模式。
设计上下文学习提示的基本步骤
明确任务目标和期望输出格式
先说明模型要完成什么任务,以及输出应该是什么形式。对于分类任务,可以明确只输出类别;对于抽取任务,可以明确字段名称;对于问答任务,可以说明回答长度和语气。
准备少量代表性示例
选择能覆盖常见输入形式的输入输出对,或能说明任务要求的情境示例。示例不一定很多,但应当清楚、稳定,并尽量减少歧义。
把示例和新输入放入同一个提示
ICL 的关键是让模型在同一段输入序列中看到示例和待处理输入。常见顺序是:任务说明、若干示例、待处理输入、输出要求。
根据输出结果调整示例
如果模型输出偏离预期,可以回到示例本身检查:输入是否贴近真实任务,输出格式是否一致,示例是否足以表达任务规则。必要时,可以调整示例表达、顺序或格式一致性。
一个简单检查清单
- 示例是否展示了真实输入的典型形式?
- 示例输出是否与最终希望得到的格式一致?
- 任务说明和示例之间是否存在冲突?
- 新输入是否与示例放在同一个上下文中?
- 输出要求是否足够明确,避免模型过度自由发挥?
使用上下文学习时容易忽略的问题
ICL 的门槛较低,但并不等于随意放几个例子就能稳定得到理想结果。示例质量、格式一致性和任务清晰度,都会影响模型是否能正确把握上下文模式。
常见需要注意的问题包括:
- 示例过少或代表性不足。 如果示例无法覆盖主要输入形式,模型可能难以推断任务规则。
- 示例格式不一致。 输入输出格式前后变化,会增加模型理解任务的难度。
- 示例与新输入差异过大。 当新输入明显超出样例范围时,模型可能无法准确类比。
- 误以为已经训练出专用模型。 ICL 不修改模型参数,因此不应把一次提示中的表现理解为模型已经被永久训练。
- 缺少结果复查。 对重要任务,更稳妥的做法是结合人工检查或评估流程验证输出,而不是只依赖单次生成结果。
总体来看,上下文学习是一种把任务示例放入提示中的方法,适合快速引导大模型完成少样本任务。它的优势在于无需为每个任务微调和保存新参数,但效果仍依赖示例是否清楚、相关且格式一致。