和 AI 聊得越久,它越记不住开头聊过什么,这不是模型突然变笨,是对话截断策略在工作:上下文窗口容量有限,历史消息太长时,系统要按既定规则裁剪,给新内容腾地方。裁什么、留什么,直接影响长对话的连贯性。
历史为什么装不下
模型的上下文窗口是固定的,能同时看到的文字总量有上限。对话每进行一轮,历史就厚一截,贴着上限时,要么拒绝新内容,要么裁剪旧内容。显然后者更合理——用户不会因为聊了太久就被迫开新会话。于是就有了截断策略这个角色。
裁剪的常见做法有几种。最早的消息优先淘汰,因为离当前话题最远;或者按重要性保留,比如系统指令和关键设定不裁,只裁闲聊;还有的按轮次滑动,只保留最近若干轮。不同产品策略不同,体感就是“有的 AI 长对话更记事儿”。
| 裁剪做法 | 先淘汰谁 | 留住谁 | 体感差异 |
|---|---|---|---|
| 最早消息优先 | 离当前话题最远的旧消息 | 较新的对话内容 | 长对话开头容易丢 |
| 按重要性保留 | 闲聊内容 | 系统指令与关键设定 | 反复强调的规则更稳 |
| 按轮次滑动 | 超出最近若干轮的旧内容 | 最近若干轮对话 | 有的产品更记事儿 |
像整理背包减重
理解对话截断,可以类比出行前整理背包。包就那么大,想带的新东西太多,就得把旧物件一样样拿出来:这件很久没用了,扔;那件占地方但偶尔要穿,留;地图和证件必不可少,贴身收。模型的截断策略做的就是这道取舍题:装不下的历史,哪些扔、哪些留、哪些贴身带。
背包类比还解释了为什么“重要的反而被记住”。你会把证件贴身放,模型也会把系统指令、用户明确设定的偏好放在裁剪范围之外。那些反复强调的规则不容易被忘,不是因为 AI 更重视,是策略根本没把它们放进待裁区。
背包类比的两处裂缝
这个类比有两处对不上。其一,背包整理是出发前一次性的,对话截断却可能在一轮对话里连续发生,每加新消息就重新裁一刀,用户往往察觉不到。其二,扔出去的物件真没了,被裁掉的历史对模型来说也不复存在,但它可能留下“痕迹”——早期信息会影响已经生成的回答,形成一种模糊的印象。
还有一处要提醒:裁剪可能造成自相矛盾。前文说过某个设定,被裁掉后用户换种问法再提,AI 的回答可能和之前冲突,用户却毫无知觉。长对话里遇到这种矛盾,先想想是不是历史被裁了,而不是急着怀疑 AI 前后不一。应对办法之一是把关键内容存进外部记忆,不靠窗口那点地方硬扛。
裁剪偏了会怎样
裁剪太狠,长对话变成金鱼记忆,用户觉得产品难用;裁剪太保守,窗口被历史占满,新内容进不来,响应变慢甚至报错,输出侧还会出现流式输出的断续。产品通常取中间路线,再配合摘要压缩,把长历史浓缩成短版本保留。
另一种思路是把长历史挪出窗口、用时再取,这正是检索窗口的思路。腾讯元宝和即梦AI在长文档、长会话场景都有针对性设计,摘要式压缩是常见招。摘要压缩做得好不好,有个简单的判断法:压缩后再问它“我们刚才约定了什么”,答得上来,说明关键约定还在。带走一个判断:长对话记不住事,多半不是模型退化,是窗口就那么大;关键信息在对话中途主动复述一遍,比指望它一直记着靠谱。
速查表:截断=历史超窗时按规则裁剪;常见规则有按轮次、按重要性;类比整理背包;裂缝在连续发生且裁剪留痕迹;关键信息要复述。
关于对话截断再多问三句
- 换个会话重开就解决记忆问题了吗?重开是清空重来,老问题没了,但之前设定的上下文也没了。
- 为什么重要设定还是被忘了?有些策略只保系统指令,用户中途说的偏好可能照样进待裁区。
- 摘要压缩会改变原意吗?压缩必然损失细节,核心约定通常保留,细节表述可能走样。


