定义

上下文窗口(Context Window),也常被称为上下文长度,是指大语言模型在一次处理中能够接收和参考的最大 Token 数量。可以把它理解为模型的“工作记忆”:窗口内的内容,模型都能看到并加以利用;窗口之外的内容,对模型来说就不存在。

需要注意的是,上下文窗口的容量通常由输入和输出共同占用。系统提示词、历史对话、上传的文档、工具调用返回的结果,以及模型正在生成的回答,都要算在里面。很多服务还会单独规定一次回答的最大输出长度。

工作原理

为什么会有上限。 大语言模型基于 Transformer 架构,其中的注意力机制需要计算序列中各个位置之间的关系。在标准实现下,计算量和显存占用随序列长度近似按平方增长;同时,推理时需要缓存已处理内容的中间结果(KV Cache),这部分内存也随长度线性增加。长度越长,成本越高、速度越慢。

位置信息的限制。 模型需要通过位置编码知道每个 Token 的位置。如果训练时只见过一定长度的序列,直接处理更长的输入时效果往往会变差。研究者为此提出了多种位置编码的外推和插值方法,并在训练后期加入长文本数据,以扩展模型能有效使用的长度。

工程优化。 更省显存的注意力实现、对 KV Cache 的压缩和复用等技术,让更长的上下文窗口在实践中变得可行。

窗口大不等于用得好。 研究和实践都发现,模型在超长输入中定位和利用信息的能力并不均匀,有时对开头和结尾的内容把握较好,对中间部分的信息利用较差。因此,“能放进去”和“能用好”是两回事。

超出窗口会怎样。 不同应用处理方式不同:有的直接报错,有的自动截断最早的对话,有的把早期内容压缩成摘要。这也是长对话中模型似乎“忘记”前面内容的常见原因。

典型应用

较大的上下文窗口适合以下场景:

  • 长文档处理:一次性阅读合同、报告、论文并进行总结或问答。
  • 代码理解:同时参考多个源文件,理解项目结构后修改代码。
  • 多轮长对话:保持较长的对话历史,减少重复说明。
  • Agent 任务:容纳多步执行过程中的工具调用记录和中间结果。

使用建议:

  • 把最关键的指令放在清晰的位置,必要时在材料末尾重申。
  • 与问题无关的内容尽量不放,既省费用也能提高准确度。
  • 资料量很大时,优先考虑检索增强生成(RAG),只把相关片段放进窗口。
  • 长对话可以定期总结,用摘要替代完整历史。

相关概念

  • Token:上下文窗口的计量单位。
  • 注意力机制:其计算成本是限制窗口长度的重要原因。
  • RAG:在窗口有限时按需提供相关资料的方法。
  • 幻觉:输入过长时,模型可能遗漏或混淆信息。
  • AI Agent:需要合理管理上下文,避免窗口被执行记录占满。

参考论文:Lost in the Middle: How Language Models Use Long Contexts