一句话定义
上下文窗口是模型单次推理能处理的词元上限,它相当于「工作记忆」而非「长期记忆」:窗口内信息还有位置偏差(开头结尾强、中间弱),窗口外信息则完全不可见。
为什么重要
窗口长度数字(128K、1M)常被当作能力宣传,但「能装下」不等于「用得好」。应用设计(RAG 分块、多轮对话摘要、长文档问答)的成败都取决于对窗口机制的准确理解;误解它会导致「塞得越满越好」的反模式。
前置知识
核心概念
- 窗口上限:训练设定的最大词元数,超出即截断或报错(各模型不同且快速演进,以官方文档为准)。
- 有效使用长度:模型真正能高质量利用的长度,常显著小于标称上限。
- 迷失中间(Lost in the Middle):相关信息位于上下文中部时检索/利用性能下降的 U 型现象。
- 上下文 vs 参数记忆:窗口内信息是「即用即弃」的临时记忆;参数记忆才是持久的(但不精确)。
- 截断与压缩策略:滑动窗口、摘要压缩、外部存储 + 检索(RAG)等窗口外信息的引入方式。
原理与机制
机制上,窗口内每个词元通过注意力相互访问(复杂度 O(T²),工程见 kp-014);「迷失中间」的成因假说包括:训练数据中相关内容多位于开头结尾的分布偏置、因果注意力对早先词元的天然可达性、以及长序列上注意力稀释。窗口外的信息对模型完全不存在——它不会「想起来」,只能靠外部系统把相关信息重新注入窗口。多轮对话超窗后,早期轮次被丢弃或摘要压缩,产生「健忘」。
公式或模型
窗口约束的形式化:设窗口大小 W,可被注意力访问的位置集合为:
Visible(t) = { j : t − W < j ≤ t }
窗口外 j ∉ Visible(t) 的信息对输出无任何影响
窗口外 j ∉ Visible(t) 的信息对输出无任何影响
图示
性能
│▇▇▇ ▇▇▇ ← 开头/结尾表现好
│ ▇▇ ▇▇
│ ▇▇▇▇▇▇▇▇▇▇▇▇ ← 中间"塌陷"(U 型)
└─────────────────────────────▶ 相关信息在窗口中的位置
直观类比
窗口像「一张只能摊开一页的桌子」:一页内的文件都能看,但视线对页首页尾最好、页面中间容易跳读(迷失中间);上一页的内容若没誊到这一页(RAG 注入),就等于从没存在过。
实例或案例
Liu 等(2023)的对照实验:把关键事实分别放在 20 段长文的开头/中间/结尾,中间放置时多模型性能显著下降,且「更多上下文」反而可能因噪声拖累表现——直接挑战「窗口越大越好」的直觉。工程对策:RAG 只注入最相关片段、把关键指令放在开头或结尾、长对话用摘要滚动压缩。
常见误区
- 「窗口越长能力越强」:长窗口带来成本上升与利用效率问题;有效长度与任务类型才是关键。
- 「塞满上下文=模型都读了」:注意力利用有偏,堆料可能稀释关键信息。
- 「模型记得之前的会话」:跨会话记忆不存在,除非系统层显式存储并回注窗口。
与其他知识点的关系
自测题
- 「迷失中间」描述什么现象?答案要点:关键信息位于窗口中部时模型利用效率下降,性能呈首尾高、中间低的 U 型。
- 上下文记忆与参数记忆的差异?答案要点:窗口内是即用即弃的精确临时记忆;参数记忆持久但模糊、有知识截止。
- 对话超出窗口后系统层的常见处理?答案要点:滑动截断、滚动摘要、外部存储 + 检索回注。
延伸阅读
- Lost in the Middle(Liu 等,2023)