上下文窗口从GPT-3的2048词跃升至Llama 4 Scout的1000万词仅用了五年时间。这是一次5000倍的飞跃。前沿模型现在宣称其窗口可以容纳整个代码库、多卷书籍或单个提示中的数小时音频和视频。
鲜为人知的秘密:**广告的上下文和实际可用的上下文并不是同一个数字。**一个1000万词的模型通常在20万到60万词之间就开始变得不可靠。了解这个差异是区分一个可工作的生产系统和一个会默默错过关键信息的系统的差距。
以下是上下文窗口的实际工作原理、使其变大的原因以及如何应对这个差距。
实际的上下文窗口是什么
它是指LLM在单次前向传递中可以处理的最大词数——输入加上输出的总和。所有内容都需要包含:系统提示、开发者指令、对话历史、检索到的文档、工具定义和输出、多模态附件、当前用户消息以及模型自身生成的响应。
它不是模型内存。它不是训练数据。它不是长期知识。它是活动的KV缓存——一个驻留在GPU上的结构,存储当前参与的每个词的关键值投影。一旦某个词落在这个窗口之外,模型在生成步骤中实际上不知道它的存在。
以下是三个值得记住的概念:
- 上下文窗口——模型可以看到多少内容。
- 注意力范围——模型实际可以利用多少看到的内容。
- 数学边界——由计算能力和VRAM施加的硬上限。
窗口表示你可以查看它。范围表示你理解了它。边界表示GPU可以负担得起它。
词,而不是字符或单词
窗口以词为单位衡量,而不是字符或单词。大致如下:
- 英文大约每个词0.75个词
- 每个词大约4个字符
- 1000个词≈750个词≈1-2页
- 500页的密集文本大约是15万到20万个词
- 战争与和平大约是75万个词
编程代码、法律文本、表格、JSON和XML都比散文产生更多的词。一小时的视频通过多模态编码后大约是50万个词。
所有内容都计入预算
大多数人认为只有用户提示会消耗上下文。实际上,完整的预算包括:
+--------------------------------------------------+
| 系统提示 |
+--------------------------------------------------+
| 开发者/系统指令 |
+--------------------------------------------------+
| 对话历史 |
+--------------------------------------------------+
| 检索到的RAG文档 |
+--------------------------------------------------+
| 工具定义 + 工具输出 |
+--------------------------------------------------+
| 多模态附件 |
+--------------------------------------------------+
| 当前用户提示 |
+--------------------------------------------------+
| 预留的输出预算 |
+--------------------------------------------------+
输出预算通常比输入预算小得多——一个具有1000万个输入的模型可能将生成限制在12.8万个。
瓶颈:O(n²)和KV缓存
现代LLM基于变压器。对于每个词,模型计算三个向量——查询(Q)、键(K)、值(V),然后运行:
$$\text{Attention}(Q, K, V) = \text{softmax}!\left(\frac{QK^\top}{\sqrt{d_k}}\right)V$$
这会产生一个n × n的注意力矩阵,将每个词与其他每个词相关联。上下文长度翻倍会使注意力计算增加四倍。
还有一个更实际的限制:KV缓存。为了避免在生成过程中重新计算先前词的表示,模型会缓存它所见过的所有内容的键和值:
$$\text{KV缓存} \approx 2 \times \text{层数} \times \text{头数} \times \text{头维度} \times \text{序列长度} \times \text{每参数字节数}$$
具体来说,一个700亿参数的模型在FP16下以12.8万个上下文长度计算,每个用户需要大约40到80GB的KV缓存。这就是为什么即使解决了训练问题,长上下文仍然昂贵。KV缓存是真正的资源限制,而不是抽象的窗口概念。
从4K到10M:工程突破
这个跳跃不仅仅是更大的GPU。它是一系列三个相互独立的创新叠加在一起的结果。
1. 能够外推的位置编码
变压器并行处理词;它们需要显式的位置信息。早期的绝对位置嵌入是硬限制的——向训练上限为0-2047的模型展示位置2048会导致模型崩溃。
**旋转位置嵌入(RoPE)**通过在复数空间中旋转词嵌入来编码位置:
$$q_m = R_m W_q x_m$$
词之间的相对距离自然地从点积 $q_m^\top k_n$ 中得出。优雅,但训练上限为4K——外推到10万时旋转速度过快,表示会崩溃。
修复方法是RoPE缩放家族:
- 位置插值(PI):将所有位置除以缩放因子。简单,模糊了分辨率。
- NTK感知缩放:对低频(长距离)进行激进缩放,对高频(局部细节)保持不变。
- YaRN:在压缩的频率带中微调注意力权重。这是如何通过微调将Llama 2 4K扩展到128K的方法。
- 长RoPE / PoSE:通过在窗口内跳转来训练模拟长位置。
2. 注意力工程(不改变数学,大幅提速)
**FlashAttention(v1 → v3)**不改变数学——它仍然计算精确的注意力。它只是重写了内存访问以使I/O感知,通过切片计算使得完整的n × n矩阵从未在HBM中出现。工作数据保留在快速的片上SRAM中。将内存读写从O(N²)减少到线性内存流量。长上下文2-4倍更快;FlashAttention-3据报道在H100上达到约1.3 PFLOPs/s。
**分组查询注意力(GQA)**在查询组之间共享KV头,将KV缓存减少4-8倍。多头潜在注意力(MLA)将KV压缩到潜在空间,以实现更激进的减少。
**分页注意力(vLLM)**将KV缓存视为虚拟内存页——非连续分配,跨请求共享,几乎零碎片。
环形注意力 / 块级并行注意力将长序列分布在多个GPU上形成环。每个GPU持有段,KV块在环中传递,注意力计算与通信重叠。序列容量线性扩展随着GPU数量增加。
滑动窗口注意力(Mistral, Mixtral)限制每个词的固定邻域——O(n)而不是O(n²)。信息仍然通过堆叠层在窗口内传播,就像CNN中的大感受野。
KV缓存量化将缓存值降低到INT8/INT4——2-4倍的内存减少。StreamingLLM在提示的开头使用“注意力下水道”吸收多余注意力,允许无限流式传输。
3. 替代架构
状态空间模型(Mamba, RWKV, RetNet)完全绕过了O(n²)注意力。它们将历史压缩为递归状态——O(n)计算,常量内存。对于超长序列非常高效。缺点:在精确上下文检索方面较弱,往往会忘记具体细节。2026年的大多数前沿模型仍然是变压器或混合Mamba + 注意力(Jamba风格)。
中间的迷失:最重要的实际问题
即使在名义窗口内,模型也不均匀地关注这些词。检索性能呈U形:开始和结束时较强(首因偏见和近因偏见),中间有显著下降。自斯坦福2023年以来一直存在,2026年仍然存在。
这种下降是真实的:中间埋藏的内容准确率下降30-40%,有时从75%下降到55-60%,即使在4K词中也是如此。
两种理论占主导地位:
- 注意力权重变得模糊;对10万词进行softmax会导致信号被稀释
- 训练数据很少需要对10万有用词进行推理——大多数是填充
这种效果扩展到多轮对话——模型可能会忽略在长聊天历史的早期或中间轮次中给出的指令。
广告 vs 实际效果:差距就是故事
标准基准是针扎干草堆(NIAH):在一个包含50万词噪声的文本中隐藏一个事实,模型能否检索到它?前沿模型在其整个窗口中得分约为95%以上。在单个事实水平上基本已经解决。
更难的测试是RULER:跨分布式事实的多跳推理。更能区分真正的长上下文能力。
2026年的实际 vs 广告差距:
| 模型 | 广告 | 实际 | 备注 |
|---|---|---|---|
| Claude Sonnet 4.x | 1000万 | 约60万-70万 | 强大的长上下文检索 |
| Gemini 3.0 Pro | 2000万 | 约120万-140万 | 最好的多模态长上下文 |
| Llama 4 Scout | 10000万 | 约600万-700万 | 行业领先窗口 |
| GPT-5.2 | 400万 | 约250万-300万 | 大的输出窗口 |
模型在声称的极限前往往在30-40%失败。失败原因包括:KV缓存碎片化、注意力不稳定性、位置编码漂移和词质量退化(噪声累积)。
超过某个点后,模型还会表现出上下文腐化——过度依赖提示而牺牲预训练知识,重复早期模式,复杂推理时失去连贯性。
词质量胜过词数量。在18个前沿模型中,清晰度、结构和语义密度对准确度的影响比窗口大小更大。即使是百万词窗口,不良结构的SOP也会降低性能。
长上下文 vs RAG:互补而非竞争
一个常见的误解:“有了1000万词窗口,RAG已经过时了。”实验证明并非如此。
| 维度 | 巨大上下文窗口 | RAG |
|---|---|---|
| 最适合 | 整体代码库推理、复杂合成、多文档分析 | 巨大的知识库、实时数据、精确检索 |
| 成本动态 | 每查询高(完整序列计算) | 每查询低(前K块) |
| 上下文细微差别 | 优秀(模型原生看到所有关系) | 分块依赖——可能丢失跨文档链接 |
| 新鲜度 | 需要重新喂入每个提示 | 立即数据库更新 |
| 确定性/可审计性 | 困难——推理跟踪与检索文档交织在一起 | 容易——声明 → 来源引用 |
2026年的共识是混合:RAG获取候选项 → 长上下文推理。RAG在精度和成本控制方面胜出。长上下文在不知道检索什么时胜出,用于合成。
对于受监管的环境(GxP、SOP、CAPA、偏差、验证文档),这非常重要,因为证据必须保持可追溯性。一个实用的流水线:
用户问题
│
▼
元数据过滤
(产品、站点、过程、版本)
│
▼
混合搜索
(BM25 + 密集检索)
│
▼
再排序
│
▼
前5-15个证据块
│
▼
上下文构建器
• SOP摘录
• CAPA参考
• 偏差细节
• 术语表
• 用户问题
• 清晰的指令
│
▼
LLM
│
▼
带有引用的答案
这通常比将整个QMS加载到模型中更准确。它还支持可审计性——每个声明都可以追溯到检索到的来源。
上下文工程:实用的实践指南
因为窗口是有限的,质量也是不均匀的,简单地填充更多文本是不理想的。上下文工程的学科要求:应该包含哪些信息?以什么顺序?以多大详细程度?应该省略、总结还是按需检索哪些信息?
位置
关键指令应放在顶部和底部。不要将一个关键指令埋在80万词中间。在代理工作流程中,将最近年的工具总结放在末尾,那里最近的偏见最强。
结构
结构胜过原始文本。使用XML或markdown标签帮助模型分段:
<documents>
<doc id="1"> ... </doc>
<doc id="2"> ... </doc>
</documents>
可以显著提高检索效果。给每个工具调用结果一个清晰的边界/标签,以便模型区分“这是来自工具调用3的结果”与“这是用户输入”。
压缩
总结旧轮次为结构化的笔记,保留决策、开放问题和约束。Claude Code等代理会自动压缩到极限。分层总结有效:大型文档 → 章节摘要 → 节摘要 → 最终摘要。仅在需要时深入原始内容。
从检索到填充
每次查询仅检索相关块——但块数很重要,而不仅仅是相关性排名。即使每个块都相关,更多块也不是免费的。在传递给LLM之前重新排序检索到的块。
提示缓存
对于跨调用稳定的内容(系统提示、工具定义、静态参考文档),缓存可以避免重新处理相同的KV缓存。据报道,重复前缀的节省高达90%。
不要浪费词
工具输出通常是冗长的JSON,如{"status": "success", "data": ...}——预处理。跨调用重复的系统提示?缓存它们。一个128万词窗口填满冗余的工具聊天是浪费。
上下文治理(生产模式)
将上下文视为受治理的资产:
- 每个工作流阶段的词预算
- 优先级规则:关键 → 高 → 低
- 自动淘汰过时的词
- 词质量评分
为什么这对多代理设计很重要
现代AI代理大部分时间都在管理上下文。中心辐射架构使上下文成为首要关注点。
作为计算策略的上下文隔离
在中心辐射多代理设置中,每个子代理都有自己的新鲜上下文窗口。每个子代理仅为其工作的一部分支付注意力成本——而不是一个上下文将所有内容累积在一起并受到二次计算惩罚和中间迷失降解。
统筹者的上下文是稀缺资源
中心的窗口填充的是子代理的摘要,而不是原始转录。这是故意的压缩,以保持中心的有效上下文小且信号高。直接子代理到子代理的通信是一个反模式——它绕过了压缩点并允许上下文膨胀传播。
窄上下文的可审计性
每个管道阶段的小而精的上下文使推理跟踪可审计。一个包含检索到的SOP、先前对话和工具结果的20万词上下文比一个窄上下文更容易重构(“为什么模型得出X的结论?”),其中你知道在决策点具体看到了什么。这在受监管的环境中至关重要。
代理决策循环
现代代理不断问自己:
- 我应该检索吗?
- 我应该总结吗?
- 我应该调用记忆吗?
- 我应该搜索吗?
- 我应该压缩吗?
- 我应该忘记吗?
- 我应该重新排序吗?
大多数统筹实际上是上下文管理。
2020年至2026年的时间线
- GPT-1 / GPT-2时代:几百到约2048词
- GPT-3(2020):2048词
- 早期ChatGPT时代:约4096词
- 2023年:迅速跃升至32000-100000词(Claude 100000词,GPT-4 32000词)
- 2023年末:GPT-4 Turbo → 128000词
- 2024年:Gemini 1.5 Pro展示了1000000词(实验性2000000+词)
- 2025年:1000000词成为前沿基准
- 2026年中:100万到1000万词范围(Llama 4 Scout 1000万词是例外)
未来走向
分层记忆
小而快的128000词窗口 + 大而慢的向量存储,模型可以显式地读写。模型成为对学习外部记忆的推理引擎。
通过递归实现无限上下文
将KV缓存卸载到CPU/磁盘并在需要时按需流回。StreamingLLM带有注意力下水道,允许连续流式传输而不发生灾难性遗忘。
原生多模态
1000万词不仅仅是文本。1小时的视频≈500000词。窗口正在成为文本、图像、音频和视频原生共存的地方。
超越粗暴的规模
行业正逐渐从粗暴的上下文扩展转向通过外部记忆架构实现无限上下文。未来在于混合系统,其中LLM作为推理引擎动态查询神经数据库、向量存储或代理记忆系统——实际上绕过了原生上下文窗口的硬限制,同时保持高准确性和完美回忆。
一些预测认为到2030年上下文窗口将达到数十亿词,理论上允许莎士比亚、哈利波特和维基百科全部内容在一个上下文中。但真正的前沿不在于大小——而在于精确度。
最后总结
上下文窗口从2048词跃升至1000万词以上,代表了从局部文本完成到上下文学习和执行环境的转变。FlashAttention、GQA、MLA、PagedAttention、RoPE缩放和环形注意力等创新使巨大的上下文窗口既实用又可扩展。
但更大并不总是更好。窗口中放置的信息质量、其结构以及系统决定哪些内容属于其中通常比单纯的词数更重要。上下文工程——放置、结构、压缩、检索、缓存和治理——将实验性LLM应用与生产级系统区分开来。
想象一下,旧的4096词模型有短期记忆丧失。当前的1000000词模型有完美的记忆,但会感到不知所措。下一代需要学会忘记什么。
前沿不是“上下文可以有多长”——而是“模型如何精确地关注、推理和综合大量输入信息?”这是一个涉及架构创新、训练方法和评估指标共同演进的更难的问题。