上下文窗口

别名:Context Window / 上下文长度

模型一次能读入并利用的 token 数量上限,受注意力复杂度和显存限制。

更新于 2026/11/08
长上下文显存推理

一句话定义

上下文窗口是模型单次前向能接收的最大 token 数,包括系统提示、对话历史、检索内容和待生成的输出。

为什么有上限

  • 标准注意力的计算量随序列长度呈平方增长,长度翻倍,注意力开销约变成四倍。
  • 解码时要保存历史 token 的 KV Cache,显存占用随长度线性增长。
  • 训练时的位置分布有限,模型没见过更长距离的位置组合,直接外推效果会下降。

因此上下文长度既是模型能力,也是工程成本。

窗口里装了什么

系统提示、对话历史、检索片段、当前问题和输出预留共享同一个 token 预算。多塞历史或检索,就会挤掉输出空间;超出窗口的内容不会进入注意力。

上下文窗口:各类内容共享同一份 token 预算

扩展手段

  • 位置编码外推:通过 RoPE 插值、调整频率底数等方式,让模型适应更长位置。
  • 高效注意力:稀疏、分块、线性注意力等降低长序列计算成本。
  • 缓存管理:分页、压缩、丢弃低价值历史,控制 KV Cache 增长。
  • 训练阶段加长:在更长序列上继续训练,让模型真正学会利用远距离信息。

标称长度 ≠ 有效长度

模型能接收 128K token,不代表它能把 128K 里的每个细节都用好。常见现象是中间位置的信息容易被忽略(所谓「迷失在中间」),关键内容放在开头或结尾通常更可靠。

与 RAG 的关系

RAG 把外部知识检索后放进上下文,适合知识更新频繁或私域数据场景;扩大上下文窗口则适合一次性读入长文档。两者不是替代关系,实际系统经常同时使用。

用在哪里

  • 长文档问答、代码库理解、多轮客服:先判断该扩窗口、做 RAG,还是截断历史。
  • 一次性读完整材料、需要跨段推理时用长窗口;知识频繁更新、需要引用时优先 RAG。
  • 成本敏感时不要盲目开满窗口,注意标称长度和实际有效利用的差距。

常见误区

  • 窗口越大越好:更长上下文意味着更贵、更慢,也更难稳定利用。
  • 把资料全部塞进去就等于模型都记住了。
  • 上下文长度和模型参数量是两件独立的事。

相关概念

  • KV Cache:长上下文推理的主要显存开销。
  • RAG:用检索控制送入上下文的内容量。
  • RoPE:长度扩展常改动的位置编码。