返回课程目录
第二单元:大模型到底是怎么生成文字的
第 06 章

上下文窗口:为什么长对话会忘记前面?

理解模型一次只能看到有限内容,长对话需要管理上下文。

本地学习进度

已完成 0 / 32

核心问题

为什么一段长对话聊着聊着,模型会忘记前面说过的要求?为什么你明明在前十轮已经强调“不要写得太营销”,后面它又开始使用夸张表达?原因通常不是模型故意忽略你,而是它每次回答时只能看到被放进上下文窗口里的内容。

上下文窗口就是模型当前能“摊开阅读”的材料范围。窗口可以变大,但不是无限大;一旦系统指令、历史对话、外部资料、当前问题和回答空间加起来超过容量,就必须取舍。

先建立直觉

可以把上下文窗口想成一张办公桌。桌面够大时,你可以同时摊开说明书、会议纪要、草稿纸、参考资料和当前问题。资料太多时,总有一些纸会被压在下面、移到旁边,甚至被收走。你不是没有见过那些纸,而是此刻桌面上放不下。

办公桌上摊开的指令、问题、历史和资料说明上下文窗口有限
上下文窗口像办公桌:能同时处理很多材料,但空间有限,长对话需要取舍。

大模型也是这样。它没有天然、永久、完整地记住你说过的一切。每次回答前,应用会把一部分材料打包交给模型:系统提示词、用户问题、历史对话、检索资料、工具返回结果等。模型只能基于这包材料继续生成。

概念拆解

上下文窗口不是长期记忆。窗口里的内容会直接影响下一次回答;窗口外的内容,模型通常看不到。很多产品看起来“记得你”,往往是因为应用层做了额外设计:把历史对话摘要后塞回窗口,或把用户偏好存进数据库,需要时再取出来。

窗口容量还要被多种内容共同占用。系统指令会占一部分,历史聊天会占一部分,上传文件或 RAG 检索片段也会占一部分,当前问题和模型回答还需要空间。如果材料塞得太满,模型可能没有足够余量生成完整答案,或者早期约束被截掉。

这也是为什么“长上下文模型”虽然有用,但不能替代上下文管理。更大的桌子能放更多纸,但如果你把所有无关资料都堆上去,找重点仍然困难。

互动理解

下面的计量器展示了窗口里不同内容如何争抢容量。拖动对话轮数时,注意历史对话增加后,回答空间和旧信息会发生什么变化。

上下文窗口计量器

拖动对话长度,看看模型当前还能看到哪些信息。

系统指令

产品预设的角色、语气、安全边界。

历史对话

轮次越多,占用越大,旧内容会被挤出。

外部资料

RAG、上传文件、网页片段也要占窗口。

当前问题

用户这一次真正要解决的问题。

回答空间

留给模型生成答案的余量。

1 轮对话:已经被挤出窗口
2 轮对话:已经被挤出窗口
3 轮对话:已经被挤出窗口
4 轮对话:仍在窗口内
5 轮对话:仍在窗口内
6 轮对话:仍在窗口内
7 轮对话:仍在窗口内
8 轮对话:仍在窗口内
9 轮对话:仍在窗口内

当前 9 轮里,模型主要能看到最近 6 轮;前 3 轮需要摘要或重新提供。

常见误区

第一个误区是以为同一聊天窗口里说过的话,模型永远都能看到。事实上,产品可能会截断、摘要或选择性保留历史内容。

第二个误区是把“记忆”都归功于模型。有些记忆来自模型上下文,有些来自产品数据库,有些来自浏览器本地存储。它们的可靠性、隐私含义和可控性都不同。

第三个误区是无限堆资料。给模型更多材料并不总是更好。无关材料会稀释重点,冲突材料会增加判断难度,过长材料还会提高成本。

实用方法

长对话中可以主动管理上下文。

第一,每隔一段时间让模型总结当前结论和仍需遵守的约束。第二,在关键任务前重新贴出最重要的背景、目标、边界和输出格式。第三,把大任务拆成阶段,不要在同一轮里同时塞入所有材料。第四,对重要事实保留外部来源,不要只依赖模型“记得”。

如果你发现模型开始偏题,不要只说“我刚才说过”。更有效的做法是把关键约束重新给它,让它重新站在正确桌面上工作。

自我检查

下次长对话中,遇到模型开始忘记前文,可以做一个小实验:先让它“总结目前已经确定的目标、约束和待办”,再把总结作为新一轮任务开头。通常你会发现,模型稳定性会提升,因为它重新拿到了最关键的桌面材料。

企业应用里也常用类似方法。系统会把长历史压缩成摘要,把用户偏好存成结构化记录,把相关文档按需检索回来。所谓“记忆”,往往是这些工程设计共同作用的结果。

真实场景

假设你让模型连续帮你改一份简历。前几轮讨论了目标岗位、项目重点和语气要求,后几轮开始逐段修改。如果对话很长,模型可能忘记最初的岗位定位。这时最有效的做法不是抱怨它忘了,而是把“目标岗位、核心卖点、禁用表达、输出格式”重新贴出来。你是在重新整理桌面,而不是重新开始。

越重要的约束,越应该显式保留在当前轮。

这也是很多专业用户会维护“项目摘要”的原因。

摘要不是多余步骤,而是让模型重新抓住主线。

延伸阅读

  • Token 是上下文窗口的计量单位,先理解第 5 章:Token能帮你更准确估算容量
  • 上下文窗口的大小直接决定了每次调用的成本——第 7 章:Token 账本把账单拆开讲

一句话总结

模型不是永远记得一切,它只能基于当前上下文窗口里的材料继续回答;长任务需要主动管理窗口。