Skip to content

一、上下文压缩是什么 ​

大模型(LLM)每次回答问题,都要依赖你发给它的上下文(Context)——比如历史聊天记录、参考文档、系统提示词等。

随着对话轮数变多、或者从知识库检索出的背景资料变长,直接把所有原始内容一股脑塞给大模型,不仅很贵、很慢,而且大模型容易“看花眼”。

上下文压缩,就是在尽量不丢失关键信息的前提下,把冗长复杂的上下文“挤出水分”,用更少的字数/Token 把核心意思表达清楚,然后再喂给大模型。

一句话理解

就像老板让你汇报 50 页的项目进展,你不会把 50 页逐字念给老板,而是先提炼出一份 2 页的“核心要点小抄” 给老板看。


二、为什么需要上下文压缩? ​

很多新手会问:“现在大模型的上下文窗口不是动辄 128K 甚至 100 万 Token 了吗,为什么还要费劲压缩?”

主要解决 4 大痛点:

痛点不压缩的问题压缩后的效果
1. 太烧钱(成本高)每次发 10 万 Token 输入,按量计费钱包扛不住压缩到 2 万 Token,API 成本直接下降 70%~80%
2. 太慢(响应延迟高)首字响应时间(TTFT)随输入长度增加而明显变慢输入变短,模型首字吐出速度大幅提升
3. 容易“中间迷失”(Lost in the Middle)输入太长时,大模型容易忽略夹在中间的关键细节去除无关噪音后,模型注意力更集中,回答更精准
4. 历史记录无限膨胀多轮 Agent 交互或超长对话总会超出窗口上限滚动压缩历史,实现长久连续的记忆与对话

三、上下文压缩是怎么做的?(常见 4 种手段) ​

从最简单的“拿剪刀裁”到高阶的“小模型精炼”,常见有以下几种做法:

1. 规则裁剪与滑动窗口(最省事、硬切) ​

  • 做法:只保留最近的 N 轮对话,或者用正则去除网页中的 HTML 标签、广告文本、重复空格与无用标点。
  • 比喻:手机相册容量不够了,直接删掉 3 个月前的照片,或者把图片批量转成低画质格式。
  • 优缺点:零计算成本、速度极快,但容易“一刀切”丢掉早期发生的关键信息。

2. 小模型摘要(Summary / 滚动总结) ​

  • 做法:当对话过长时,后台派一个便宜快速的“小模型”(如轻量级开源模型或 Flash 档 API),把前 20 轮对话浓缩总结成一段《背景纪要》,替换掉原本臃肿的对话流水账。
  • 比喻:请一个速记员,把 3 小时的会议录音整理成 200 字的会议纪要。
  • 应用场景:AI 伴侣、客服长对话、多步骤 Agent 的任务记忆维护。

3. 信息抽取与相关性过滤(RAG 场景最常用) ​

  • 做法:在知识库检索(RAG)召回了 10 篇相关文档后,压缩器根据用户的具体问题,只把文档中真正能回答问题的句子提取出来,把无关的上下文直接剔除。
  • 代表工具:
    • LangChain 的 ContextualCompressionRetriever(基于小模型或重排序模型过滤文档);
    • 微软开源的 LLMLingua(通过轻量模型计算每个词的信息熵,把冗余词、低信息量词剔除,实现 Prompt 级高保真压缩)。
  • 比喻:从厚厚的《民法典》里,只把与“租房违约”相关的两条法条圈出来,而不是整本书递给法官。

4. 向量 / 软 Token 压缩(模型底层学术方案) ​

  • 做法:在模型张量和 Embedding 层面,将几百个 Token 映射压缩为极少数包含高密度语义的 Soft Token / 向量(如 AutoCompressor、ICA 等研究)。
  • 比喻:类似 zip 压缩包,直接在二进制层面压缩数据,主要用于模型内部推理加速与定制架构。

四、上下文压缩 vs 前缀缓存 vs RAG ​

这三个概念在 AI 系统架构中经常一起出现,它们的分工如下:

技术它在干什么?文本变少了吗?核心目的
RAG (检索增强)从海量知识库中大海捞针否(把相关资料找出来)解决模型知识过时、缺少私有专业知识的问题
上下文压缩对找出的资料或长对话挤水榨汁是(输入变精炼了)降低 Token 成本、提速、降噪、防止模型迷失
前缀缓存 (Prefix Caching)对固定不变的前缀存下草稿纸否(原文原封不动)避免 GPU 重复计算相同的输入,省钱提速

经典黄金组合

在实际的高性能 RAG / Agent 系统中,三者通常配合使用:

  1. RAG 先从知识库召回 15 篇相关文档片段;
  2. 上下文压缩 将这 15 篇文档过滤精炼成 2 篇核心干货;
  3. 前缀缓存 将固定不变的 System Prompt 与高频规则缓存起来,加速每次调用。

五、上下文压缩有什么代价?(避坑指南) ​

上下文压缩虽然好处多,但也有实际工程权衡:

  1. 关键信息丢失风险(最致命)
    • 比如用户的要求包含细微约束条件(“预算不超过 500 元”、“不使用某个特定库”),如果压缩器误把这些细节当成修饰词剪掉了,大模型就会给出错误答案。
  2. 压缩自身的时间与算力开销
    • 运行小模型摘要或计算 Token 熵需要消耗额外的算力和毫秒级时间。如果原本 Prompt 就只有几百字,再跑一次压缩反而是“杀鸡用牛刀”。
  3. 压缩比例不是越高越好
    • 实践经验中,压缩率在 30%~60% 时性价比和效果最好;如果强行压缩到 80%~90% 以上,模型的推理质量通常会断崖式下降。

六、极简总结 ​

  • 一句话定义:给发给大模型的长篇大论“去粗取精、挤出水分”。
  • 核心价值:更省钱(少付 Token 费)、更快(首字吐得快)、更聪明(少受无关噪声干扰)。
  • 常见招式:
    • 聊天记录太长 → 滚动小模型摘要 / 滑动窗口
    • RAG 检索废话太多 → 句子级相关性过滤 / LLMLingua 剪枝
    • 关键重要指令 → 保留原文,避免误删

Released under the MIT License.