当对话历史超出上下文窗口时,有哪些上下文压缩策略?各自的优缺点是什么?
- 标签:AI、大模型、Agent
🏛 业务架构师
上下文压缩策略对比,我按"效果—成本—风险"三属性评估:
1. 截断(滑动窗口):保留最近 N 轮,旧的直接丢。效果:快、零成本;风险:早期关键信息丢失。适合:闲聊型、近因强的对话。
2. 滚动摘要:出窗历史压缩成"会话纪要"常驻注入。效果:保住长期脉络;成本:每次摘要一次 LLM 调用;风险:摘要有损,细节可能被压掉。适合:长任务对话、客服工单处理。
3. 选择性保留:按信息类型分级——用户确认的关键数据、合规承诺原样保留,过程讨论摘要,寒暄丢弃。效果最优但实现最复杂,需要信息分类器或结构化提取配合。适合:高价值长会话(咨询、医疗问诊)。
4. 外置状态 + 按需检索:关键事实抽到结构化存储,上下文只留"指针",要用时查回。成本:架构复杂度高;收益:几乎不占窗口且精确可审计。适合:超长任务(项目级 Agent)。
5. Compaction(整体压缩):逼近上限时全量重写为高密度纪要。是兜底手段,与前述策略组合使用。
我的组合配方(生产验证):滑动窗口打底 + 关键信息结构化外置 + 滚动摘要保脉络 + Compaction 兜底。压缩策略的业务准则:有损压缩必须"风险分级"——合规承诺、用户确认数据这些"错不得"的内容要外置保真,绝不能赌摘要质量。压缩省的是 token,赌的是信任,这笔账要算清楚。
🏗 系统架构师
上下文压缩策略我按有损程度递增排谱系,各自优缺点明确:
- 滑动窗口截断:只保最近 N 轮。零成本、零延迟;缺点:硬丢失早期信息,长任务丢目标。适合闲聊类短会话;
- 滚动摘要(Summarization):旧段异步摘要替换原文。信息保留较好、成本可控(一次摘要多次复用);缺点:细节有损、摘要质量依赖模型、关键事实可能被"概括掉"——需要关键词白名单保护;
- Compaction(结构化重构):把全部历史重组为结构化状态快照(任务目标/已确认事实/决策/待办/资源引用)。保密度最高、可保留任务连续性;缺点:压缩本身消耗一次大上下文调用(要留预算)、实现复杂、结构 schema 要针对任务域设计;
- 选择性外置(记忆库转移):把工具结果、中间产物移到外部存储,上下文留指针。可逆(可回查)、窗口零占用;缺点:增加检索延迟、需要"何时回取"的判断逻辑;
- 检索式记忆(RAG 化):历史全部向量化,按当前任务检索注入。窗口最省、可跨会话;缺点:上下文不连续(模型看到的是片段)、相关内容漏检时"失忆"。
我的生产组合:System Prompt 与目标不可压缩(保)+ 最近 5~10 轮原文(保)+ 更早滚动摘要 + 工具结果一律外置 + 触发 85% 水位做 Compaction。核心权衡轴:信息保真度 × token 成本 × 实现复杂度,没有免费午餐,只有按任务寿命和价值的分级策略。
💻 全栈开发专家
上下文压缩策略分四级,各有取舍:
1. 截断/滑动窗口:只保留最近 N 轮,超出直接丢。
- 优点:零成本零延迟,实现一行;缺点:硬丢信息,早期关键约束可能丢失。
- 适用:闲聊、短任务。
2. 滚动摘要(Summarization/Compaction):旧历史用 LLM 压缩成结构化摘要常驻。
- 优点:信息保留率高、token 大幅节省;缺点:压缩本身耗 token 和延迟、摘要有损、实现复杂(触发时机、增量压缩)。
- 适用:长对话 Agent,生产主力方案。
3. 检索式记忆(外置+按需召回):历史全部外置存储(向量库),每轮按当前任务检索相关片段注入——「历史当数据库用」。
- 优点:上下文永远最小、可跨会话;缺点:检索可能漏召回(相关性判断有损)、每轮多一次检索延迟。
- 适用:超长周期项目型任务。
4. Token 级压缩(LLMLingua 类):小模型逐 token 打分删除低信息量词。
- 优点:保语义连续性、压缩比高(2~20x);缺点:不可解释、极长文本处理慢。
- 适用:高 QPS 成本敏感场景、长文档塞入前的预处理。
组合实践(我的生产配置):system/安全约束/最近 2 轮永不压缩;中间层滚动摘要;工具大结果摘要+落盘;跨会话事实入长期记忆检索。共同前提:压缩策略必须配评测集——压缩省了 60% token,任务成功率掉了 10 个点就是亏的,ROI 要算总账。