上下文压缩:摘要、滚动与层级
一句话定义
上下文压缩是在预算逼近上限时,用摘要、滚动淘汰和层级化存储把上下文的"信息密度"提上来——丢长度不丢决策所需的信息。
为什么重要
长对话、长会话 Agent、持续运行的服务都会撞上 上下文窗口与注意力预算 的预算墙。不压缩的后果是截断(早期关键约定丢失)或成本失控;乱压缩的后果是"压缩性失忆"(关键细节被摘要抹掉后反复犯错)。压缩是把会话从"能聊"变成"能长期运行"的必需工程,也是 记忆与状态:会话内记忆、外部记忆与状态注入 记忆系统的执行层。
前置知识
- 上下文窗口与注意力预算:预算模型——压缩的触发条件与目标来自预算;
- 结构化上下文:分段、标签与命名:分区结构——压缩以分区为单位执行。
直观类比
像会议纪要的三级归档:最近一次会议有完整录音(原文),上季度只有纪要(摘要),更早的只剩决议台账(状态区)。需要时按层取用——公司不会因为归档了录音就"忘记"决议。
图示
时间 →
原文轮次: [1][2][3][4][5][6][7][8]...
层级视图:
远期(极简状态):用户目标=退款;单号A10293;已承诺补偿券
中期(摘要): 第3~6轮:确认签收时间,争议运费,达成部分退款共识
近期(原文): 第7~8轮原文
← 水位超 70% 触发:最旧原文 → 摘要上移核心概念
- 滚动窗口(Sliding Window):只保留最近 N 轮,更早的直接丢弃。最简单,但会失忆。
- 摘要压缩(Summarization):用模型把旧轮次压缩成结构化摘要替换原文。
- 分层压缩(Hierarchical):保留"近期原文 + 中期摘要 + 远期极简状态"三层,随时间推移内容逐层上移压缩。
- 压缩判据:决定"什么必须保留"的显式清单——用户目标、关键决定、未完成任务、重要实体(人名/单号/承诺)、约束规则。
- 失忆检测:压缩后用探针问题验证关键信息是否仍可召回。
原理与机制
压缩的信息论视角:原文 token 里混合了"决策相关"与"可再生成/可丢弃"内容,压缩 = 提高单位 token 的决策相关信息占比。工程机制:
- 压缩提示必须带保留判据:让模型"按以下清单保留……"而不是"总结一下"——后者必然丢失结构化细节(数字、单号);
- 关键实体外置:单号、金额、日期这类不可损耗信息不要依赖摘要,直接以结构化字段存在"状态区",摘要只负责叙事(与 记忆与状态:会话内记忆、外部记忆与状态注入 的状态注入同构);
- 压缩本身要被测试:用评估集测"压缩后关键事实保留率",摘要模型也会出错(用 自动评估与 LLM-as-Judge 的思路抽验);
- 触发与节流:按预算水位(如 >70%)触发,避免每轮都压缩造成延迟与成本波动。
公式或模型
压缩预算模型:设当前占用 C,上限 W,触发水位 α(如 0.7)。当 C > αW 时,把最旧的 k 轮原文(合计 t<sub>old</sub> token)替换为摘要(目标 ≈ t<sub>old</sub> × r,压缩比 r 常取 0.1~0.3),使压缩后 C′ ≤ βW(β 如 0.5),留出增长空间。核心约束:保留判据清单的命中项目不计入可压缩范围。
实例或案例
案例:客服长会话的滚动压缩。 症状:30 轮后成本翻倍且模型忘记第 3 轮承诺的补偿。操作步骤:① 状态区固定保留:{用户目标, 订单号, 已承诺事项, 待办}(程序维护,不进摘要);② 第 2~24 轮压缩为一段摘要,提示明确列出保留判据;③ 最近 5 轮保留原文;④ 压缩后跑 3 个探针问题("用户订单号?""答应过什么?")验证保留率。压缩提示模板:
将以下对话压缩为一段摘要(≤300 字),必须保留:
① 用户的核心目标与最终诉求;② 出现的所有单号/金额/日期;
③ 已做出的承诺与决定;④ 未解决的问题。
不要保留:寒暄、重复表述、与目标无关的闲聊。
对话:{旧轮次}排错清单:
- 症状:压缩后反复询问用户已给过的信息 → 关键实体没进状态区,被摘要抹掉;把实体抽取外置;
- 症状:摘要越压越长 → 压缩在摘要之上再压,改为"摘要重建"(用状态区+最近轮重建摘要)而不是链式压缩;
- 症状:压缩时机太晚已截断 → 降低触发水位,压缩成本远低于失忆代价。
常见误区
- 摘要 = 万能压缩:默认摘要会丢失数字与专有名词,凡不可丢的信息必须结构化外置;
- 链式摘要(摘要的摘要的摘要):误差逐层放大;正确做法是保留状态区 + 用原文重建摘要;
- 压缩后不验证:失忆是静默故障,必须用探针问题定期体检。
自测题
- 为什么单号、金额不能依赖摘要保留?
答:摘要是叙事性重写,数字与专名最易失真;不可丢信息应结构化存状态区,摘要只管叙事。
- 链式摘要的风险与替代方案?
答:逐层误差放大、内容漂移;替代是保留状态区 + 必要时用近原文重建摘要。
- 如何验证一次压缩没有造成失忆?
答:压缩前预设探针问题(关键事实清单),压缩后逐项提问验证保留率。
与其他知识点的关系
记忆与状态:会话内记忆、外部记忆与状态注入 的记忆系统以压缩为执行层;任务分解与规划提示 的 Map-Reduce 是一次性任务的"离线压缩"变体;压缩质量评估可复用 自动评估与 LLM-as-Judge 的 LLM-as-Judge。
延伸阅读
- 综述:The Prompt Report(Schulhoff et al., 2024)——长上下文管理技法的归类。
来源
- The Prompt Report: A Systematic Survey of Prompting Techniques (Schulhoff et al.
- 2024)