上下文窗口

一句话定义:上下文窗口是 LLM 单次能处理的最大 token 数,决定能"看"多长输入。

1. 定义

Context Window(上下文窗口)指模型一次前向能接收的最大 token 数。包括输入 + 输出。例:128k token 窗口。

2. 为什么有限

  • 自注意力 $O(n^2)$:序列翻倍,计算量四倍。
  • KV Cache 显存随序列线性增长。
  • 长序列训练数据稀缺。

3. 长上下文的挑战

  • Lost in the Middle:中间位置信息易被忽略,模型对开头结尾更敏感。
  • 成本:token 越多费用与延迟越高。
  • 有效利用:窗口大不等于用得好,需上下文工程。

4. 扩展上下文的技术

  • 位置编码外推:RoPE 的 NTK-aware、YaRN 等扩展。
  • 稀疏/线性注意力:降低 $O(n^2)$,如 Longformer、Linear Attention。
  • 滑动窗口 + 全局 token:Mistral 等用 SWA。
  • 分块处理:超长文档分块检索(RAG)。

5. 实践建议

  • 不是越长越好:长输入成本高且中间易丢信息。
  • 关键信息放开头或结尾。
  • 超长文档用 RAG 分块检索,而非全塞上下文。
  • 用上下文工程裁剪噪声。

6. 学习要点

  • 上下文窗口是硬约束,决定单次能处理多长。
  • $O(n^2)$ 是根本瓶颈,催生各种高效注意力。
  • 大窗口 ≠ 好利用,需配合上下文工程。

7. 参考资料

  • "Lost in the Middle: How Language Models Use Long Contexts"
  • "YaRN: Efficient Context Window Extension of LLMs"