它不是记忆,是一次能处理的长度

很多人把上下文窗口理解成模型的记忆容量,于是认为对话越长它记得越牢。实际相反:窗口指的是一次请求里能处理的长度上限,包含你输入的内容和它输出的内容。超出之后,早先的部分会被压缩或丢弃,而不是被记住。理解这个区别,才能解释一个常见现象——聊到后面,它开始忘记你最初定的规则。

窗口里装的是什么

一次对话里,窗口要同时装下:系统预设、你之前说过的每句话、它之前给出的每个回答、你贴进来的文档、以及本次要生成的内容。这些都在争同一块空间。长文档一贴,前面的对话就会被挤掉;对话轮次一多,最早那几条约束最先消失。所以窗口的消耗不看时间,看字符与轮次。

信号一:早先的规则开始失效

第一个信号最好识别:你在开头说过「不要用列表」「每段不超过三句」,前面几轮它还遵守,到后面又开始分点、又开始写长段。这不是它故意违背,而是那条规则已经被挤出窗口。判断方法很简单:把最初的要求再发一次,如果它立刻改回来,说明规则还在,只是没被带上;如果照旧,才是理解问题。

信号二:同一个细节反复出错

第二个信号是重复犯错:同一个名字、同一个数字、同一个格式要求,你纠正过两次,第三次还是错。这类情况的成因通常是纠正发生在很早的轮次,后面又被新的长内容冲掉。有效的做法不是再纠正一遍,而是把关键要求集中在当前这一条消息里重述,让它落在窗口的尾部。

信号三:摘要式失真

第三个信号最隐蔽:内容没有明显出错,但细节变模糊了。你给过一段具体描述,它复述时变成了概括;你列过五个条件,它只记得三个。这是压缩的典型表现——被压缩的部分不会报错,只会丢掉颗粒度。判断方法是抽一个早期细节问它,答得笼统或答错,说明窗口已经吃紧。

为什么长对话更容易出问题

长对话的问题不在于长度本身,而在于结构:越早的内容越容易被挤掉,而最早的内容往往正是你定的规则与背景。于是出现一种错觉——前面聊得很好,后面突然变笨。实际是约束先丢、素材后丢,模型在缺少约束的情况下继续生成,表现自然下滑。

四个应对做法

  1. 把关键约束放在当前消息里,而不是指望它记住开头。宁可重复,不要假设。
  2. 长文档先摘要再喂:让它先输出结构化摘要,你确认后,再用摘要继续。原始全文留给检索,不占对话。
  3. 按任务分段开新会话:一个任务一个会话,把背景写成一段固定开头,比在长对话里续命更稳。
  4. 需要精确引用的内容,让它回读原文片段再回答,而不是凭印象复述。

一个案例

某人让模型按固定格式整理二十份访谈记录。前十份正常,第十一份开始格式散掉,还开始自己补充没出现过的观点。他以为是模型能力波动,换了模型仍然如此。后来改成每五份开一个新会话,开头固定贴上格式要求与两条示例,问题消失。真正的原因不是模型不行,而是一份份记录把最早的格式说明挤出了窗口。

容易走偏的地方

一是把窗口当成记忆,认为聊得越久它越懂你;二是用「再仔细一点」代替重述约束;三是把整本书、整份合同直接贴进去,指望它全盘掌握;四是忽略输出也占空间,让它长篇输出之后继续追问细节;五是换模型解决窗口问题,实际上换的只是上限,用法没变问题照旧。

局限声明

各产品的窗口上限、截断策略与压缩方式不同,且会随版本变化。本文讲的是通用机制与应对思路,具体上限请以你所使用产品的现行说明为准,涉及精确引用的内容仍需回读原文核对。