Context Window · 交互图解

窗口是工作台,
不是硬盘

每次调用,模型只能「看见」塞进上下文的那点文本。 超了要截断;就算没超,太长也容易前面说了、后面忘。 这一页把「塞什么、丢什么、怎么不丢」拆开玩一遍。

4K → 128K+
常见窗口跨度
按 token 计
系统 + 历史 + 检索 + 输出
会「失焦」
中间内容更易被忽略

一次请求 = 摆在桌上的一叠纸

模型没有跨会话记忆(除非你另外存)。每次对话,你实际发过去的是一叠「桌上材料」:

桌子就那么大。放不下的,要么被扔掉,要么你主动收走。 模型不会自动「去硬盘上找你上周说的话」。

程序员类比: 像一个只能读、不能写的缓冲区。每次 API 调用都是整段 memcpy 进去, 你决定缓冲区里有什么——服务端不会帮你记住「上次会话状态」(除非产品层做了)。

把 8K 窗口塞满,看谁先被挤走

点开关加入不同材料,观察占用。超限后默认策略是从最旧历史开始截断(示意)。

窗口填充模拟器
勾选材料 · 看截断
占用
0
窗口
8,192 tokens
先勾几项材料。

没超限,也可能「中间失焦」

业界常说的 lost in the middle:关键信息若埋在很长上下文的中间, 被正确用到的概率往往低于放在开头或结尾。

开头强

系统提示、任务目标放前面,模型更稳。

结尾强

刚说的话、最近检索片段,通常更「新鲜」。

中间弱

一大坨历史聊天塞中间,容易被当成背景噪音。

工程含义: 不是「窗口越大越好」就完事。 重要约束和结论,要有意识地放到首尾;中间放可省略的铺垫。

超了怎么办:四种腾地方

点一种策略,看同一段长对话被压成什么样。

压缩策略对比
切换策略 · 看保留了什么
怎么选: 短会话随便丢旧消息 often 够用; 长任务要「关键约束置顶 + 摘要中段 + 原文可检索」。 和写缓存策略很像:知道什么能丢,比盲目加大 buffer 更重要。

四句话带走

  1. 上下文是每次请求的输入缓冲,不是模型的长期记忆。
  2. 占用 = 系统 + 历史 + 检索 + 输出,要给回答留位置。
  3. 长上下文会失焦:重要信息放首尾,别埋中间。
  4. 超限要策略:截断、只留关键、摘要、或外置到检索。