为什么有些模型能读整本书,有些只能读一页?
阅读时间约 8 分钟当你和 AI 对话时,模型并不会记住之前所有的交互。它只能"看到"当前请求中传入的所有内容——这就是上下文窗口(Context Window)。上下文窗口是模型在单次请求中能处理的最大 Token 数量,包括输入和输出。
你可以把它想象成一张书桌:桌子越大,你能同时铺开的资料就越多,翻阅起来就越方便。如果桌子太小,你就只能一次看一页纸,无法交叉参考多份文档。
上下文窗口 = 最大输入 Token 数 + 最大输出 Token 数。例如一个 128K 上下文窗口的模型,可以一次性读入约 10 万字的文本并给出回复。
拖动滑块,感受不同上下文大小能容纳的信息量:
上下文窗口就像你的书桌——桌子越大,能同时翻阅的资料越多。
短短几年间,模型的上下文窗口经历了三个数量级的增长。从 GPT-2 的 1,024 个 Token 到如今百万级的上下文,AI 能"一次看完"的内容呈指数级扩大。
关键洞察:5 年间增长了 1000 倍。从只能处理一段话,到能一次读完数十本书。
从便签纸到整面墙——AI 的"工作台"在指数级扩大。
既然更长的上下文如此有用,为什么不把它做到无限大呢?答案是:计算和内存代价。
Transformer 的注意力机制需要让每个 Token 与其他所有 Token 交互。上下文长度翻倍,计算量就变成原来的 4 倍。这就是所谓的二次方复杂度。
在推理时,模型会将每一层的 Key 和 Value 向量缓存起来(即 KV Cache)。上下文越长,缓存占用的显存就越多。1M Token 的 KV Cache 可能需要数个 GB 的显存。
输入越长,模型在预填充阶段需要处理的 Token 就越多,用户等待第一个输出字符的时间(TTFT)也就越长。
拖动滑块观察上下文长度对计算和内存的影响:
权衡之道:更长的上下文 = 更强的能力,但也意味着更慢、更贵。这就是为什么模型厂商会提供不同上下文大小的版本。
上下文越长,AI 需要"回忆"的东西越多——就像考试时参考资料越多,翻找答案也越慢。
Transformer 的注意力机制本身是无序的——它把输入看成一个集合,而不是一个序列。这意味着如果不加额外信息,"猫追狗"和"狗追猫"在模型眼里完全一样。
为了让模型理解词的顺序,我们需要位置编码(Positional Encoding)。
最初的 Transformer 使用固定的正弦/余弦函数生成位置向量,每个位置都有唯一的编码。简单直观,但难以外推到训练时未见过的长度。
Rotary Position Embedding 是当前的主流方案。它将位置信息编码为向量的"旋转角度",天然支持相对位置关系,并且可以通过技术手段(如 YaRN、NTK-aware scaling)外推到更长的上下文。
ALiBi(Attention with Linear Biases)直接在注意力分数上加一个与距离成正比的偏置,无需额外的位置向量。不同方案各有优劣,但目标一致:让模型知道谁在前、谁在后。
切换"有/无位置编码",观察注意力模式的变化:
每个词都有明确的位置标记,模型能区分语序。
位置编码就像书的页码——没有页码,再好的内容也是散页。
上下文窗口是模型在一次对话中能"看到"的所有内容,决定了它能处理多少信息。
从 GPT-2 的 1K 到如今的 1M+,上下文窗口的增长速度堪称惊人。
注意力的 O(N²) 复杂度和 KV Cache 的线性增长,让超长上下文的代价不容忽视。
没有位置编码,Transformer 就无法区分词序,RoPE 是当前最流行的方案。
上下文窗口决定了 AI 一次能"看"多少——从一段话到一整本书,能力的边界在不断扩展。