Context Window上下文窗口

模型一次能看到的 Token 上限;超出的部分它是真的看不见,不是记性差

上下文窗口(Context Window)是模型单次推理能处理的 Token 总量上限,输入和输出共用这个额度。可以把它理解成模型的工作台面:能摊在台面上的东西它都能看见、能引用;摊不下的,对它来说就不存在。

这是个硬性的架构限制,不是"记性不好"。窗口外的内容不是被遗忘了,是从来没有进入过这次计算。

每次对话到底发生了什么

一个反直觉但关键的事实:模型在两次请求之间没有任何状态。你看到的连续对话,实现方式是每次请求都把完整的历史重新拼好、整个塞进去算一遍。

所以:

  • 对话越长,每次请求的输入越大,成本和延迟随之线性上涨
  • 一旦历史超出窗口,产品层必须做取舍——截断最早的、做摘要压缩、或者转存到外部再按需检索。
  • 所谓"AI 记住了我的偏好",几乎都是应用层把内容存下来、每次重新拼进 Prompt,不是模型自己记住了。

窗口大不等于用得好

近年窗口从几千涨到百万级,但把东西塞满和让模型用好是两码事:

  • 中间容易被忽略。放在开头和结尾的信息被利用得最充分,埋在长上下文正中间的内容更容易被漏掉。重要信息要往两端放。
  • 噪音会稀释注意力。塞进去十份文档只有一份相关,效果往往不如只塞那一份。精准的检索优于粗暴的全塞
  • 成本是实打实的。百万 Token 的窗口意味着单次请求可以很贵,而且首 Token 延迟明显变长。
  • 注意力质量在长距离上会下降,即使名义上没超限。

结论:长窗口是兜底能力,不是默认用法。有能力检索出真正相关的那 5%,就不要把 100% 都塞进去。

省窗口的实用手段

  • 前缀缓存。把固定不变的部分(系统提示、长文档)放在最前面,多数厂商对重复前缀有缓存折扣,能显著降本降延迟。
  • 滚动摘要。对话变长后,把早期轮次压成摘要,保留结论丢掉过程。
  • 按需检索。不要每轮都带上全部资料,用检索按当轮问题取。
  • 控制输出长度。输出也占窗口,而且输出 Token 通常比输入贵好几倍。

常见误解

"上下文窗口 = 模型的记忆"——不是。它是单次计算的容量,不是跨会话的存储。要跨会话记住,得由产品自己实现。

"窗口够大就不用 RAG 了"——不成立。成本、延迟和长上下文的注意力衰减三个问题一个都没消失,RAG 解决的是"只带相关的进来"。

英文原文解释(Dictionary of AI Coding)

Everything the model sees on each model provider request. Finite, model-specific, and the _only_ surface through which the model perceives anything.

It's a single sequence of tokens: the system prompt, the conversation so far, every tool result the harness has fed back in. If something is in that sequence, the model can use it; if it isn't, the model doesn't know it exists — not your codebase, not the file you edited yesterday, not the instruction you gave three sessions ago. Anything outside the window has to be brought in, usually via a tool call, before it can affect anything.

Finite means it fills up. Every turn appends more — your messages, the model's responses, tool results — and a long session will eventually hit the limit, forcing compaction or clearing. It also means everything in the window competes: each token you load is one less available for the rest, and content you didn't need still occupies the model's attention. The practical stance is to treat the window as a budget — load what the task needs, leave the rest out.

什么时候会用到

设计对话产品、估算成本、排查「它怎么忘了前面说的」时的核心概念。

例句

  • 它不是忘了,是那段已经被截出窗口了,压根没进这次计算。
  • 重要的约束往 Prompt 最后放一遍,中间的内容它容易漏。
  • 固定的系统提示放最前面走前缀缓存,长对话能省不少钱。

别混淆

别把上下文窗口当「记忆」。它是单次请求的容量上限;跨会话的记忆必须由应用层自己存和拼。

相关词