聊了一下午,窗口满了,模型却不能失忆——上下文压缩就是这时候接管的:把旧对话浓缩成摘要,腾出地方继续聊。海螺AI、豆包的长对话体验都靠这类机制撑着,本文拆解摘要接力的流程与代价。
摘要接力:压缩的流程
窗口将满时,服务把最早的一批对话交给模型总结成一段短摘要,这段摘要顶替原文占据窗口头部,最近几轮原样保留,中间留出生成空间。对话继续,再次满员时二次触发,摘要本身也被再摘要,像接力棒一样逐段往下传。前缀缓存是怎么命中的那篇讲的复用逻辑在这里会失效——历史被改写,缓存要重建,这是压缩的隐性成本之一,服务端在速度与容量之间反复权衡。
丢什么留什么:取舍规则
摘要重在保留任务目标、已达成的约定、关键数字与偏好设定,舍去客套与过程性闲聊。指令放长文前后为什么效果不同那篇讲的位置效应提醒我们:摘要顶在头部,权重高,所以摘要里漏掉的细节几乎等于遗忘。约束解码是怎么保证 JSON 格式的那篇的格式要求,压缩后也要在摘要或新消息里重新声明,否则格式容易跑偏。把关键信息主动请进摘要,是用户能帮上的忙。
| 内容类型 | 压缩时怎么处理 | 理由 |
|---|---|---|
| 任务目标 | 保留 | 摘要要交代当前在做什么 |
| 已达成的约定 | 保留 | 后续回答要照着办 |
| 关键数字与偏好 | 保留 | 属于最容易被摘要漏掉的细节 |
| 客套与过程性闲聊 | 舍去 | 不占信息量,白占窗口 |
长对话保鲜自查清单三件事
- 关键约束在开聊时说、隔段重申,别只说一次
- 重要数字与决定,让模型当场复述确认
- 觉得答非所问时,先怀疑历史被压缩,主动补关键信息
- 长会话里用户的责任更重:你不说,摘要就可能不记
接力处断片:压缩的代价
摘要是无损的替代吗?从来都不是。细节丢失、因果链条简化、时间顺序模糊,都发生在接力处。重复循环是怎么自我强化的那篇的复读,有时正是模型在信息不足时原地兜圈的表现;随机种子是怎么影响输出的那篇讲的复现条件,在压缩介入后更难对齐——历史变了,同样的种子也回不到原来的轨迹。把压缩当损耗管理,而不是透明功能,用起来才不踩坑。
关于上下文压缩的三个常问问题
- 压缩后模型还记得开头聊了什么吗?:只记得摘要里写下的内容,未进摘要的细节基本丢失;重要信息应在聊后当场让它确认或复述。
- 为什么压缩后回答突然变保守了?:摘要丢失了此前的语境细节,模型缺依据就往稳里答;补一段关键背景往往立刻恢复。
- 能关掉压缩吗?:受窗口硬限制,不能无限关闭,可控的是触发时机与保留策略,部分服务允许手动置顶关键内容。
把上下文压缩当接力赛:棒传下去就行,别指望沿途每朵花都记得。再把代价说透:压缩是有损的,丢掉的细节不一定重要,但判断哪句重要的规则本身不可能完美,于是断片几乎必然发生,只是概率高低。缓解办法有几个:压缩时把关键实体、数字、约定专门提取成结构化笔记单独保留;重要决策当场复述确认,别只存在于被压缩掉的历史里;真要精确追溯,就用检索把原文捞回来,别全靠摘要。还有一个常识:压缩触发得太早,模型还没建立完整脉络,摘要质量也会打折。该不该压缩,看的不是窗口快满了没有,而是任务是否强依赖早期细节——依赖度低就放心压,依赖度高就换检索兜底。工具选型时重点问一句:压缩规则是否可配置、原始记录是否可查,这两项决定了断片后的补救空间。判断压缩质量有个土办法:拿压缩后的上下文重问几个只跟早期细节有关的问题,答得上说明接力没掉棒,答不上就该调规则。


