核心问题
为什么一段长对话聊着聊着,模型会忘记前面说过的要求?为什么你明明在前十轮已经强调“不要写得太营销”,后面它又开始使用夸张表达?原因通常不是模型故意忽略你,而是它每次回答时只能看到被放进上下文窗口里的内容。
上下文窗口就是模型当前能“摊开阅读”的材料范围。窗口可以变大,但不是无限大;一旦系统指令、历史对话、外部资料、当前问题和回答空间加起来超过容量,就必须取舍。
先建立直觉
可以把上下文窗口想成一张办公桌。桌面够大时,你可以同时摊开说明书、会议纪要、草稿纸、参考资料和当前问题。资料太多时,总有一些纸会被压在下面、移到旁边,甚至被收走。你不是没有见过那些纸,而是此刻桌面上放不下。

大模型也是这样。它没有天然、永久、完整地记住你说过的一切。每次回答前,应用会把一部分材料打包交给模型:系统提示词、用户问题、历史对话、检索资料、工具返回结果等。模型只能基于这包材料继续生成。
概念拆解
上下文窗口不是长期记忆。窗口里的内容会直接影响下一次回答;窗口外的内容,模型通常看不到。很多产品看起来“记得你”,往往是因为应用层做了额外设计:把历史对话摘要后塞回窗口,或把用户偏好存进数据库,需要时再取出来。
窗口容量还要被多种内容共同占用。系统指令会占一部分,历史聊天会占一部分,上传文件或 RAG 检索片段也会占一部分,当前问题和模型回答还需要空间。如果材料塞得太满,模型可能没有足够余量生成完整答案,或者早期约束被截掉。
这也是为什么“长上下文模型”虽然有用,但不能替代上下文管理。更大的桌子能放更多纸,但如果你把所有无关资料都堆上去,找重点仍然困难。
互动理解
下面的计量器展示了窗口里不同内容如何争抢容量。拖动对话轮数时,注意历史对话增加后,回答空间和旧信息会发生什么变化。
上下文窗口计量器
拖动对话长度,看看模型当前还能看到哪些信息。
系统指令
产品预设的角色、语气、安全边界。
历史对话
轮次越多,占用越大,旧内容会被挤出。
外部资料
RAG、上传文件、网页片段也要占窗口。
当前问题
用户这一次真正要解决的问题。
回答空间
留给模型生成答案的余量。
当前 9 轮里,模型主要能看到最近 6 轮;前 3 轮需要摘要或重新提供。
常见误区
第一个误区是以为同一聊天窗口里说过的话,模型永远都能看到。事实上,产品可能会截断、摘要或选择性保留历史内容。
第二个误区是把“记忆”都归功于模型。有些记忆来自模型上下文,有些来自产品数据库,有些来自浏览器本地存储。它们的可靠性、隐私含义和可控性都不同。
第三个误区是无限堆资料。给模型更多材料并不总是更好。无关材料会稀释重点,冲突材料会增加判断难度,过长材料还会提高成本。
实用方法
长对话中可以主动管理上下文。
第一,每隔一段时间让模型总结当前结论和仍需遵守的约束。第二,在关键任务前重新贴出最重要的背景、目标、边界和输出格式。第三,把大任务拆成阶段,不要在同一轮里同时塞入所有材料。第四,对重要事实保留外部来源,不要只依赖模型“记得”。
如果你发现模型开始偏题,不要只说“我刚才说过”。更有效的做法是把关键约束重新给它,让它重新站在正确桌面上工作。
自我检查
下次长对话中,遇到模型开始忘记前文,可以做一个小实验:先让它“总结目前已经确定的目标、约束和待办”,再把总结作为新一轮任务开头。通常你会发现,模型稳定性会提升,因为它重新拿到了最关键的桌面材料。
企业应用里也常用类似方法。系统会把长历史压缩成摘要,把用户偏好存成结构化记录,把相关文档按需检索回来。所谓“记忆”,往往是这些工程设计共同作用的结果。
真实场景
假设你让模型连续帮你改一份简历。前几轮讨论了目标岗位、项目重点和语气要求,后几轮开始逐段修改。如果对话很长,模型可能忘记最初的岗位定位。这时最有效的做法不是抱怨它忘了,而是把“目标岗位、核心卖点、禁用表达、输出格式”重新贴出来。你是在重新整理桌面,而不是重新开始。
越重要的约束,越应该显式保留在当前轮。
这也是很多专业用户会维护“项目摘要”的原因。
摘要不是多余步骤,而是让模型重新抓住主线。
延伸阅读
- Token 是上下文窗口的计量单位,先理解第 5 章:Token能帮你更准确估算容量
- 上下文窗口的大小直接决定了每次调用的成本——第 7 章:Token 账本把账单拆开讲
一句话总结
模型不是永远记得一切,它只能基于当前上下文窗口里的材料继续回答;长任务需要主动管理窗口。