大模型根本不是“学会了”,它只是会“看例子”:一文讲透 In-context Learning(ICL)

大家好,我是舒一笑不秃头,喜欢分享和写作,更多精彩内容

大家第一次接触大模型时,往往会有一种错觉:

"这模型怎么这么聪明?我给它举两个例子,它居然就会做了。"

比如你对模型说:

  • 北京 -> China
  • 东京 -> Japan
  • 巴黎 -> ?

它立刻回答:

  • France

很多人会觉得:
哇,它是不是刚刚被我'训练'了?

其实不是。

这背后对应的是大模型里一个非常重要的能力:In-context Learning,简称 ICL

翻译成中文,就是:上下文学习

今天这篇文章,我尽量不用论文腔,带你真正搞懂:

  1. ICL 到底是什么
  2. 它和传统训练有什么区别
  3. 为什么 few-shot prompt 这么有效
  4. 为什么说它是大模型时代最重要的能力之一

一、什么是 ICL?一句话先讲明白

ICL 的核心思想非常简单:

不给模型重新训练,只在输入里放几个示例,模型就能"照着例子"完成新任务。

注意这句话里最关键的两个点:

  • 不重新训练
  • 只靠上下文中的示例

也就是说,模型不是通过梯度下降学会任务的,

而是通过你给它的例子,临时理解当前任务该怎么做

你可以把它理解成一种:

"现场看题、现场悟规则"的能力。


二、很多人真正没懂的点:ICL 不是训练

这是初学者最容易混淆的地方。

我们平时说"机器学习",默认是这种流程:

  1. 准备大量数据
  2. 标注数据
  3. 训练模型
  4. 更新参数
  5. 模型学会任务

比如你想让模型做"情感分类",传统做法就是喂给它几万条:

  • "这个产品太好用了" -> 正面
  • "物流慢得离谱" -> 负面

训练很多轮以后,它参数变了,能力也变了。

这叫监督学习/微调

但 ICL 完全不是这样。

在 ICL 里,你只是把示例写进 prompt:

复制代码
句子:这个电影太无聊了
情感:负面

句子:这家餐厅真的很不错
情感:正面

句子:这个手机续航一般
情感:

模型接着输出:

复制代码
中性

这个过程中,模型没有被重新训练 ,参数一动没动。

它只是根据你前面给的格式和规律,推断你想让它做"情感分类"这件事。

所以 ICL 的"学习",更准确地说,不是参数层面的学习 ,而是上下文中的模式识别与任务推断

这点非常重要。


三、一个特别好懂的类比:它不是"上课",而是"看例题"

怎么理解 ICL?

你把大模型想象成一个做题能力很强的学生。

传统训练

像是把学生送去上一个月补习班:

  • 系统讲知识点
  • 大量练习
  • 考试
  • 最后学会

ICL

像是考试前你只给他看 3 道例题:

  • 2 + 3 = 5
  • 4 + 1 = 5
  • 6 + 2 = ?

他马上知道你在考加法,然后答 8。

这不是"重新培养了他的数学能力",

而是他从上下文里识别了规则

所以 ICL 的本质可以理解为:

模型利用 prompt 中的例子,识别任务模式,并将该模式迁移到当前输入上。


四、为什么大模型能做到 ICL?

这件事放在传统小模型时代,其实很难想象。

因为以前的模型通常是:

  • 专门做一个任务
  • 必须训练后才能用
  • 泛化性比较弱

而大模型不一样。

它在海量语料上做了预训练之后,内部已经形成了非常强的:

  • 模式识别能力
  • 语言归纳能力
  • 任务抽象能力
  • 格式模仿能力

这就导致它在面对 prompt 时,不只是"读文字",

而是在做一件更高级的事:

判断你现在到底想让它扮演什么任务。

你给它几个翻译样例,它会推断是翻译。

你给它几个问答样例,它会推断是问答。

你给它几个标签样例,它会推断是分类。

你给它几个 JSON 输出样例,它会推断你要结构化输出。

所以很多时候,prompt 不是"命令",而像是"示范"。

而 ICL,就是模型对这种示范的理解能力。


五、Zero-shot、One-shot、Few-shot,到底啥区别?

ICL 经常和这几个词一起出现,很多人一开始看得头大。其实特别简单。

1. Zero-shot

不给示例,只直接说要求。

比如:

复制代码
请判断下面句子的情感倾向:
"这个耳机音质不错,但有点贵。"

模型直接做。

这叫 zero-shot


2. One-shot

给 1 个例子,再让模型做。

复制代码
句子:这个电影很精彩
情感:正面

句子:这个耳机音质不错,但有点贵
情感:

这叫 one-shot


3. Few-shot

给少量几个例子,通常是 2~10 个,再让模型完成。

复制代码
句子:这个电影很精彩
情感:正面

句子:快递太慢了
情感:负面

句子:外观还行,性能一般
情感:中性

句子:这个耳机音质不错,但有点贵
情感:

这就是 few-shot learning,也是 ICL 最经典的使用方式。

所以你可以这么记:

  • zero-shot:不给样例
  • one-shot:给 1 个样例
  • few-shot:给几个样例
  • 它们本质上都属于:通过上下文引导模型完成任务

六、ICL 为什么这么重要?

因为它几乎改变了我们使用模型的方式。

在传统 NLP 时代,一个任务对应一个模型:

  • 情感分析一个模型
  • 命名实体识别一个模型
  • 机器翻译一个模型
  • 摘要一个模型

想做新任务?

重新收集数据、重新训练。

成本非常高。

但 ICL 让事情变了。

1. 极大降低使用门槛

你不一定非要训练。

很多任务只要写好 prompt、给好例子,直接就能跑。

2. 非常适合数据少的场景

现实里很多任务拿不到大规模标注数据。

但你通常可以手写 3~5 个高质量示例。

这时候 ICL 就特别有用。

3. 任务切换非常灵活

同一个模型,上一秒做翻译,下一秒做抽取,再下一秒做分类。

你只要换一下上下文示例就行。

4. 更符合"自然语言编程"

以前我们是"训练模型";

现在越来越像是"通过提示词和示例编排模型行为"。

这也是为什么很多人说:

Prompt engineering 本质上就是在利用模型的 ICL 能力。


七、一个经典误区:模型真的"理解规则"了吗?

这里要泼一盆冷水。

虽然 ICL 看起来很像"学会了",

但很多时候,它并不是像人类一样真正理解抽象规则。

它更像是在做:

  • 模式匹配
  • 概率推断
  • 格式续写
  • 基于上下文的类比生成

这意味着什么?

意味着 ICL 很强,但也有局限。

它可能会:

  • 被坏例子带偏
  • 对示例顺序敏感
  • 对格式非常敏感
  • 看起来懂了,其实只是模仿得像
  • 示例一换,效果就波动

这也是为什么在实际开发中,例子的质量经常决定效果上限。

很多时候,不是模型不行,

而是你给它的 demonstration 不行。


八、怎么写出有效的 ICL 示例?

这一段很实战。

如果你在业务里想用好 ICL,少走弯路,记住下面几个原则。

1. 示例要有代表性

别随手举两个最简单的例子。

你给的例子,最好覆盖真实任务中的典型情况。

比如做情感分类,不能全给"特别明显"的正负面,

最好也包含模糊、混合、中性表达。


2. 输入输出格式要统一

模型非常吃格式。

比如你前面都写的是:

复制代码
问题:
答案:

后面就别突然改成:

makefile 复制代码
Q:
A:

统一格式,模型更容易稳定识别模式。


3. 示例越清晰越好

不要让示例本身含糊不清。

如果标签都容易引起争议,模型自然也学不明白。


4. 尽量贴近真实数据分布

你线上遇到的输入长什么样,示例就尽量长什么样。

不要拿特别规整的 toy example 去教模型做复杂真实任务。


5. 重要任务要测试示例顺序

有些模型对 example order 很敏感。

同样 4 个例子,顺序一换,结果可能就变了。

这是很多人没注意到的细节。


九、为什么"提示词工程"其实离不开 ICL?

很多人把 prompt engineering 理解成:

  • 会写"你是一个专业助手"
  • 会加"请一步一步思考"
  • 会让模型输出 Markdown

但真正决定任务效果的,很多时候不是这些花活,

而是你有没有用好 ICL 示例

因为对于大模型来说:

最强的约束之一,不是你怎么命令它,而是你怎么示范它。

命令告诉它"做什么",

示例告诉它"怎么做"。

这就是为什么在很多复杂任务中:

  • 一句模糊要求,效果一般
  • 加 3 个高质量示例,效果立刻提升

很多工程优化,本质上不是改模型,而是在改上下文。


十、ICL 最神奇的地方:它让"推理时学习"成为可能

ICL 最有意思的一点在于:

学习和使用发生在同一个时刻。

传统机器学习里:

  • 训练是训练
  • 推理是推理

两件事分得很开。

但 ICL 有点像:

  • 你在推理时给它示例
  • 它在推理时"临时适应"任务
  • 然后马上输出结果

这让大模型展现出一种很新的范式:

不是先学再用,而是在用的时候边看边学。

当然,这种"学"不是参数更新意义上的学,

但从使用体验上,它已经非常接近"教一下就会"。

这也是 ICL 为什么会被认为是大模型时代一个标志性能力。


十一、用一句最通俗的话总结 ICL

如果让我用一句最接地气的话解释 ICL,我会这么说:

ICL 就是:你不用重新训练模型,只要先给它看几个例子,它就能猜到你要它干什么,并照着做。

再简单一点:

不是把模型教会,而是让模型看懂。


十二、最后聊聊:为什么你一开始会觉得"没懂"?

因为很多资料写 ICL,都喜欢一上来就说:

  • 范式
  • 涌现能力
  • 条件概率建模
  • 少样本泛化
  • 上下文归纳

这些词没错,但对初学者特别不友好。

其实 ICL 的直觉理解一点都不复杂:

你只需要抓住三件事:

  1. 给例子
  2. 不训练
  3. 模型根据例子临时完成任务

抓住这三点,你就已经理解 80% 了。

剩下的 20%,才是更深入的研究问题,比如:

  • ICL 为什么会在大模型中涌现?
  • 它到底是模式匹配还是隐式贝叶斯推断?
  • 示例数量、顺序、标签空间为什么会影响表现?
  • ICL 和 fine-tuning 的能力边界在哪里?

但那已经是进阶层面的事了。

对大多数工程实践来说,先把这个本质吃透就够了。


结尾

大模型时代,一个特别大的变化是:

我们不再总是通过"训练"来让模型变强,而是越来越多地通过"上下文"来让模型进入状态。

而 ICL,正是这件事最核心的能力之一。

它让模型看起来像是"被当场教会了",

也让人机交互第一次真正接近:

"你给我举个例子,我就知道你想要什么。"

这可能才是大模型最迷人的地方。

相关推荐
冬奇Lab2 小时前
你的 Skill 真的好用吗?来自OpenAI的 Eval 系统化验证 Agent 技能方法论
人工智能·openai
Karl_wei3 小时前
企业级 Vibe Coding 实操
openai·ai编程·cursor
swipe4 小时前
用 Nest + LangChain 打造 OpenClaw 式 Agent 定时任务系统
人工智能·llm·agent
Java后端的Ai之路4 小时前
LangChain ReAct Agent 核心技术问答
前端·react.js·langchain
量子位8 小时前
20亿美金苏度科技具身首秀即大招!0真机数据,zero-shot,跑出98%首次抓取成功率
llm·aigc
Java后端的Ai之路9 小时前
LangChain 面试问答指南2
面试·职场和发展·langchain
飞翔的SA11 小时前
从6.75%到100%!大模型Function Calling终极方案:Harness工程如何驯服
开发语言·ai·llm·harness
Java后端的Ai之路11 小时前
当大模型开始“水土不服“:从通才到专才的进化论——Fine-tuning 企业级实战全攻略
人工智能·python·langchain·rag·lcel
Trouvaille ~11 小时前
零基础入门 LangChain 与 LangGraph(五):核心组件上篇——消息、提示词模板、少样本与输出解析
人工智能·算法·langchain·prompt·输入输出·ai应用·langgraph