从"装多少"到"装什么":LLM 上下文压缩
绪论:发展过程
一、为什么要"压"?——从 Transformer 的物理极限说起
1.1 O(n²) 的代价
理解压缩的必要性,必须先搞清楚推理时模型在干什么。
每个 token 生成时,模型需要对所有历史 token 执行 Attention 计算:
这里的问题在复杂度:序列长度翻倍,计算量翻四倍,Attention 矩阵从 N x N 变成了4N x 4N。
为了避免每步都重新计算历史 token 的 Key/Value,工程上引入了 KV Cache:把每层每个 attention head 的 K/V 张量缓存下来,下一步推理直接读取。代价是显存随 context 长度线性增长:
LLaMA-2 13B @ 1k tokens ≈ 1 GB
LLaMA-2 13B @ 4k tokens ≈ 4 GB(和模型本身一样重)
100B 模型 @ 1M tokens ≈ 320 GB(远超单卡容量)
1.2 显存不是唯一的问题——"Lost in the Middle"
更深的问题是:context 窗口大,不代表模型用得好。
斯坦福和华盛顿大学的研究发现,LLM 处理长 context 时呈现明显的 U 形性能曲线——关键信息在开头或结尾时准确率最高,放在中间时准确率大幅下降,哪怕是专门为长 context 设计的模型也不例外。(Lost in the Middle, arxiv.org/abs/2307.03172)
根本原因是 RoPE(旋转位置编码)的衰减特性:RoPE 通过旋转 Q/K 向量编码位置,query 和 key 的点积对远端 token 自然衰减。序列中间的 token 离两端都远,自然落入"低注意力死区"。
还有一个更诡异的现象叫 Attention Sink:第一个 token 会吸附异常大量的注意力分数,哪怕它本身毫无信息量(比如 BOS token)。模型像是把它当成"垃圾桶",把不需要分配给任何具体 token 的注意力都倾倒过去。
关键结论:100万 token 的窗口里,中间 60% 是实际利用率最低的区域。 扩大 context 是必要条件,不是充分条件。
1.3 推理成本的非线性爆炸
当 Agentic 应用把 context 变成持续积累的资源时,成本问题就从理论变成了业务威胁: Context 长度每增加 50%,推理成本直接涨 50% Reasoning 模型(o1、DeepSeek-R1 等)使用的计算量比标准模型高出 10 倍以上 有测试显示对 OpenAI o1 跑完一次测试花费 2767 美元,因为它生成了 4400 万个 token
二、技术栈:四个层次的压缩方案
2.1 架构层:训练时就解决(最彻底)
GQA(Grouped Query Attention) 传统 Multi-Head Attention 每个 head 有独立的 K/V;GQA 让多个 query head 共享同一组 K/V head,直接缩小 KV Cache 体积,精度损失极小。现在几乎所有主流模型(LLaMA 3、Qwen、Gemma)默认采用。(arxiv.org/abs/2305.13…) MLA(Multi-Head Latent Attention) DeepSeek 提出的方案。核心思路是把 K/V 压缩进一个共享的低维隐空间,推理时只缓存这个压缩表示,需要时再重建:(arxiv.org/abs/2405.04…)
标准 KV Cache(4096 维,32 head):每 token ≈ 4096 个值
MLA 压缩后:每 token ≈ 512 个值(8 倍压缩)
稀疏 Attention 改变计算方式,每个 token 不再 attend 所有历史,而是选择性 attend 部分。DeepSeek-V3.2 引入的 DSA(DeepSeek Sparse Attention)在 128K context 下将推理成本降低约 70%。(arxiv.org/abs/2412.19…)
2.2 KV 淘汰:运行时动态决策(最灵活)
核心洞察:不是所有 token 的 KV 都同等重要。 研究一致发现,少数"重型 token"承担了绝大多数注意力权重。
H2O(Heavy-Hitter Oracle):追踪注意力分数累积最高的 token(heavy hitters),保留它们的 KV 加上最近若干 token,其余淘汰。(arxiv.org/abs/2306.14…)
PyramidKV / AdaKV:发现 LLM 注意力具有金字塔式信息漏斗结构——浅层 attention 分布广,深层高度集中。据此对不同层分配不同 KV 预算:浅层多保留,深层少保留。(arxiv.org/abs/2406.02…)
R-KV(针对 Reasoning 模型):同时计算重要性分数(注意力权重)和冗余分数(key 向量余弦相似度),只保留 10~34% 的 KV Cache 就能维持甚至超过原始精度。(arxiv.org/abs/2505.13…)
熵引导缓存:用 attention 分布的熵来衡量每个 head 对上下文的需求——熵低的 head 高度集中(如 attention sink),熵高的 head 广泛分散。熵高的 layer 分配更大的 KV 预算。
2.3 量化与跨层共享
KV 量化:将 float16 的 K/V 向量量化为 int4,显存直接砍 75%,精度损失可接受 CLLA(Cross-Layer Latent Attention):把 KV Cache 下采样到低维隐表示并跨层共享,某些情况下将缓存内存压缩至原来的 2%,且无精度损失。(arxiv.org/abs/2405.12…) ⚠️ 2025 年的重要警示: The Pitfalls of KV Cache Compression 发现,KV 淘汰策略不区分"内容 token"和"指令/系统 prompt token",在多指令 Agent 场景下会导致某些指令被完全忽略,甚至引发系统 prompt 泄露。这是压缩研究从"激进优化"转向"安全部署"的转折点——压缩率不是越高越好,安全边界必须显式保护。
2.4 Prompt / Token 压缩(输入侧)
剑走偏锋,在 token 进模型之前就删掉冗余:
| 方法 | 策略 | 适用场景 |
| 硬压缩 | 用 perplexity 或注意力权重打分,直接删低分 token | RAG 文档、长系统 prompt |
| 软压缩 | 训练一个小模型把多个 token 编码为单个紧凑 embedding | 固定的 few-shot 示例、重复指令 |
| 选择性传递 | 只保留 Action + Reasoning,屏蔽冗长的工具返回原文 | Agent 工具调用轨迹 |
三、Memory 体系:Agent 的认知架构
Context 窗口只是记忆系统的一层。一个完整的 Agent 记忆体系,对应人类认知的四个层次:
3.1 四层对比
| 记忆类型 | 存储位置 | 容量 | 访问延迟 | 成本 | 持久性 |
| 参数记忆 | 模型权重 | 万亿参数 | 零(前向传播) | 训练一次 | 永久 |
| 工作记忆 | Context Window | 受限 | 极低 | O(n²) 高 | 会话级 |
| 情节记忆 | 向量数据库 | 无限 | 毫秒级检索 | 低 | 跨会话 |
| 语义记忆 | 知识库 / RAG | 无限 | 毫秒级检索 | 低 | 持久 |
四、应用层:工程实践
4.1 分级 context 策略
核心原则:频繁访问、高关联的放 context;低频但高价值的放外部存储按需检索;过期或冗余的主动丢弃。
4.2 Agent 工程中的具体手段
滚动摘要(Rolling Summary) 不保留完整对话历史。维护一个压缩摘要,新内容进来时只对要丢弃的部分做增量摘要,合并进去——而不是每次全量重新摘要(代价太高)。 Observation Masking Agent 执行工具调用时,工具返回的原始输出往往冗长(比如一段 HTML 或完整 API 响应)。策略:只保留 Action、Reasoning 和关键结论,屏蔀掉原文。 主动 Checkpoint 在任务的自然断点(完成某个子目标后)主动压缩,不等到 context 快满了才被动截断。区别类似"定期备份"和"硬盘满了才清理"。
4.3 对抗 Lost in the Middle
知道这个规律就能主动利用: 信息分级放置:最重要的内容放 prompt 开头,次要内容放结尾,最不重要的放中间 明确标注优先级:在 prompt 里显式告诉模型哪些是 primary context,哪些是 secondary RAG 严格控量:注入 context 之前先做 reranking + reduction,只保留前 3~5 个最相关文档,而不是把所有召回结果都塞进去 结构化 context:用 XML 标签或 Markdown 头部把不同类型的 context 区分开,减少模型的定位成本
4.4 技术选型参考
| 场景 | 推荐策略 | 备注 |
| 单轮长文档分析 | Prompt 压缩 + 关键信息优先放置 | 无需持久化 |
| 多轮对话助手 | 滚动摘要 + 情节记忆外存 | 注意 consolidation 时机 |
| 长期运行 Agent | 四层记忆体系 + 主动 checkpoint | 写入策略要设计好 |
| 代码 / RAG Agent | Observation masking + top-k reranking | 工具输出最易膨胀 |
| 推理型任务(Reasoning) | R-KV 或 KV 量化 | Reasoning token 冗余极高 |
五、落地现状:主流产品用了哪些,还缺什么
5.1 主流产品实现对比
下表从五个维度评估各产品的 context 与 memory 能力:KV/架构级压缩、工作记忆管理、情节记忆(跨会话)、语义记忆外化、自动 consolidation。 表格示意: ✅ 已实现且完善 🟡 部分实现或依赖用户配置 ❌ 基本缺失
| 维度/应用 | Claude Code | Cursor | OpenAI Codex | MiniMax | 开源 Agent 框架 |
| KV / 架构级压缩 | ✅ 服务端 compaction | ❌ 依赖底层模型 | ❌ 依赖底层模型 | ✅ Lightning Attention | ❌ |
| 工作记忆管理 | ✅ Tool result clearing + 滚动摘要 | 🟡 按 token 上限截断 | 🟡 按 token 上限截断 | 🟡 规则式保留(首条+近5条) | 🟡 手动配置 |
| 情节记忆(跨会话) | ✅ Session Memory 预写摘要 | 🟡 .cursor/rules 手动维护 | 🟡 Desktop 版有限支持 | 🟡 雏形阶段 | ✅ MCP memory server |
| 语义记忆外化 | ✅ CLAUDE.md 自动生成 | 🟡 .cursor/rules 人工写 | 🟡 AGENTS.md 人工写 | ❌ | 🟡 依赖插件 |
| 自动 consolidation | ✅ Auto Memory 自动提炼写入 | ❌ | ❌ | ❌ | ❌ |
| RAG / 语义检索 | 🟡 文件读取为主 | ✅ AST + embedding 索引 | 🟡 仓库结构注入 | 🟡 初步 | ✅ 向量数据库 |
| 跨平台记忆共享 | 🟡 仅 Claude 生态 | ❌ | ❌ | ❌ | ✅ MCP 跨工具 |
| 产品 | 核心策略 | 最大亮点 | 明显短板 |
| Claude Code | 双轨 Memory(CLAUDE.md 语义 + Session Memory 情节)+ 服务端 compaction | Auto Memory 自动 consolidation,覆盖最完整 | 跨平台记忆孤岛,只在 Claude 生态内 |
| Cursor | AST 语义索引 + embedding 向量检索,Merkle Tree 增量更新 | 代码库理解最深,隐私设计好(原始代码不出境) | 跨会话 memory 弱,本质上是 RAG 不是真正的记忆 |
| OpenAI Codex | 每 task 独立沙箱 + AGENTS.md 项目级语义记忆 | 沙箱隔离干净,192k 窗口充裕 | 缺自动 consolidation,用户反馈每次都要重新解释 |
| MiniMax | Lightning Attention 架构级线性注意力 + 规则式 context 截断 | 4M token 推理成本仅同级 30%,架构最激进 | 应用层 memory 体系薄,Agent 能力早期 |
| 开源框架 | MCP memory server 打通多平台 + 社区插件 | 跨工具记忆共享唯一可行路径,灵活度高 | 质量参差,无平台级保障,重度依赖用户配置 |
| 方向 | 当前状态 | 为什么重要 | 谁最可能先做到 |
| 跨会话自动 consolidation 普及 | 仅 Claude Code 实现,其他产品缺失 | 用户最痛点:每次重新解释背景 | Cursor(用户量大,需求明确) |
| Memory 质量评估 + 去重 | 几乎空白,记忆库会随时间膨胀污染 | 防止"context poisoning",影响长期任务准确性 | 需要模型层支持,Anthropic / OpenAI 都有动力 |
| Observation masking 标准化 | 各平台策略不一,普遍依赖人工配置 | 工具调用输出占 context 大头,标准化能大幅降本 | 模型厂商(直接在 API 层实现) |
| 多 Agent 记忆共享协议 | MCP 是雏形,但无统一检索/同步规范 | 多 Agent 协作时记忆孤岛是效率瓶颈 | MCP 生态 + Anthropic 推动标准 |
| 模型主动感知 context 预算 | Claude 3.7/Haiku 已支持 context awareness | Agent 可据此主动调整行为,不再被动截断 | Claude Code 下一步自然演进 |
| KV 淘汰 × 任务语义感知结合 | 当前淘汰只看注意力权重,不理解任务目标 | 语义感知淘汰能更精准保留与当前子任务相关的 KV | 学术界 → 推理框架(vLLM 等)落地 |
| 记忆内化(情节记忆 → 参数记忆) | 仅学术探索阶段,无产品级实现 | 把用户积累的经验真正"学进去",无需每次注入 | 长期方向,需要持续微调基础设施 |
六、本质:从基础设施竞争到认知架构竞争
24 年做的是"能装多少":context 窗口就是竞争壁垒,100 万 token 是里程碑。 25 年做的是"装什么、怎么装、装进去后怎么用":context 窗口从"扩容瓶颈"变成了需要主动管理的稀缺资源。 这个转变背后是 Agentic 时代的到来。当 AI 不再是一次性的请求-响应,而是持续运行、多工具调用、跨会话积累的长期任务执行者,context 就不再是一个"能塞多少就塞多少"的被动容器,而是一个需要主动决策的认知工作空间。 谁能更好地管理这个空间——决定保留什么、检索什么、压缩什么、丢弃什么——谁就能在同等算力下做更多、更复杂的事。 这也是为什么现在最有意思的研究,不是又一个更大的模型,而是更聪明的 Memory 系统。
七、26年会发生什么——从演化逻辑推导
7.1 三年演化的底层逻辑
表面上是"context 从 4k 扩到 1M,再开始压缩",底层发生的其实是三次认知升级:
| 时间 | 认知升级 | 代表发现 |
| 2023 | 大不等于用得好 | [Lost in the Middle](https://arxiv.org/abs/2307.03172):中间 60% 利用率最低 |
| 2025 上 | 压缩不是越激进越好 | [KV Pitfalls](https://arxiv.org/abs/2510.00231):压缩有副作用,Agent 场景尤甚 |
| 2025 下 | Reasoning token 存在"最优长度" | [DMS](https://arxiv.org/abs/2506.05345):压缩反而提升精度;[Stop Overthinking](https://arxiv.org/abs/2503.16419):大量冗余 |
| 方向 | 25年状态 | 26年预测 | 落地形态 |
| 压缩从"统计感知"→"语义感知" | 淘汰策略只看注意力分数,不理解任务语义 | 推理框架嵌入轻量级重要性分类器,实时感知任务阶段动态分配 KV 预算 | vLLM / SGLang 新策略选项,而非独立系统 |
| Thinking token 预算控制内化进模型 | 外部规则强制截断(粗粒度),模型感知自己预算的能力刚起步 | 模型推理时实时感知剩余预算,对简单子问题快速略过,对关键节点深入展开——"元认知"能力被训练进模型 | 训练数据和 RLHF 目标的变化,不会是一篇论文 |
| 记忆从"单 Agent 存储"→"多 Agent 共享基础设施" | MCP 打通了工具层,记忆仍是孤岛 | 某个框架定义多 Agent 记忆通信协议:什么信息广播,什么点对点,什么异步 consolidate | 类分布式系统 CRDT 的协议,LangGraph / AutoGen / Anthropic 生态率先落地 |
| 论文 | 作者 / 机构 | 时间 | 链接 |
| Flash Attention 2 | Tri Dao, Stanford | 2022 | [arxiv.org/abs/2307.08691](https://arxiv.org/abs/2307.08691) |
| GQA: Training Generalized Multi-Query Transformer Models | Ainslie et al., Google | 2023.05 | [arxiv.org/abs/2305.13245](https://arxiv.org/abs/2305.13245) |
| H₂O: Heavy-Hitter Oracle for Efficient Generative Inference | Zhang et al., UT Austin / Stanford | 2023.06 | [arxiv.org/abs/2306.14048](https://arxiv.org/abs/2306.14048) |
| Lost in the Middle: How Language Models Use Long Contexts | Liu et al., Stanford / UW | 2023.07 | [arxiv.org/abs/2307.03172](https://arxiv.org/abs/2307.03172) |
| Efficient Streaming Language Models with Attention Sinks | Xiao et al., MIT | 2023.09 | [arxiv.org/abs/2309.17453](https://arxiv.org/abs/2309.17453) |
| DeepSeek-V2: Multi-head Latent Attention | DeepSeek-AI | 2024.05 | [arxiv.org/abs/2405.04434](https://arxiv.org/abs/2405.04434) |
| PyramidKV: Dynamic KV Cache Compression | Cai et al. | 2024.06 | [arxiv.org/abs/2406.02069](https://arxiv.org/abs/2406.02069) |
| DeepSeek-V3 Technical Report | DeepSeek-AI | 2024.12 | [arxiv.org/abs/2412.19437](https://arxiv.org/abs/2412.19437) |
| 论文 | 核心贡献 | 时间 | 链接 |
| ChunkKV: Semantic-Preserving KV Cache Compression | 以语义 chunk 而非单独 token 为压缩单位,保留语言结构完整性;层间索引复用提升吞吐 26.5% | 2025.02 | [arxiv.org/abs/2502.00299](https://arxiv.org/abs/2502.00299) |
| Key, Value, Compress: A Systematic Exploration | 系统性分类和评估现有 KV 压缩方法,填补基准对比空白 | 2025.03 | [arxiv.org/abs/2503.11816](https://arxiv.org/abs/2503.11816) |
| The Pitfalls of KV Cache Compression | 重要反思:KV 压缩在多指令场景下会导致某些指令被完全忽略,甚至引发系统 prompt 泄露;揭示了当前方法在实际部署中被严重低估的风险 | 2025.10 | [arxiv.org/abs/2510.00231](https://arxiv.org/abs/2510.00231) |
| Expected Attention: KV Cache Compression via Future Query Distribution | 用 LLM 激活的分布特性预估未来 query 的注意力,在 prefilling 和 decoding 两阶段均有效;附带 KVPress 开源库(含 20+ 方法) | 2025.10 | [arxiv.org/abs/2510.00636](https://arxiv.org/abs/2510.00636) |
| EVICPRESS: Joint KV-Cache Compression and Eviction | 首次将 KV 淘汰与压缩联合优化,跨多存储层调度;TTFT 提速最高 2.19× | 2025.12 | [arxiv.org/abs/2512.14946](https://arxiv.org/abs/2512.14946) |
| 论文 | 核心贡献 | 时间 | 链接 |
| RPC: Reasoning-aware KV Cache Compression for QwQ-32B | 针对 reasoning token 的 KV 淘汰,压缩 75% 缓存,吞吐提升 1.60×,AIME 精度仅降 1.2% | 2025.05 | [arxiv.org/abs/2505.13866](https://arxiv.org/abs/2505.13866) |
| DMS: Inference-Time Hyper-Scaling with KV Cache Compression | 8× KV 压缩,Qwen-R1 32B 在 AIME 24 上提升 12 分——压缩反而因预算释放带来精度提升 | 2025.06 | [arxiv.org/abs/2506.05345](https://arxiv.org/abs/2506.05345) |
| ENGRAM-R: Memory Orchestration for Reasoning Models | 推理时记忆层:结构化记忆复用代替重新推导,输入 token 减少 85%,reasoning token 减少 75%,精度持平 | 2025.11 | [arxiv.org/abs/2511.12987](https://arxiv.org/abs/2511.12987) |
| Stop Overthinking: Survey on Efficient Reasoning | 系统梳理 reasoning 模型"过度思考"问题及压缩方向,包括 CoT 压缩、latent reasoning、token budget 控制 | 2025.03 | [arxiv.org/abs/2503.16419](https://arxiv.org/abs/2503.16419) |
| Reasoning-Aware Compression (RAC) | 发现标准剪枝会让 reasoning 模型生成更多无效 thinking token 反而变慢;提出在剪枝时联合重建 CoT 激活 | 2025.09 | [arxiv.org/abs/2509.12464](https://arxiv.org/abs/2509.12464) |
| 论文 | 核心贡献 | 时间 | 链接 |
| When Tokens Talk Too Much: Multimodal Long-Context Token Compression Survey | 系统综述图像/视频/音频 token 压缩;90分钟视频 = 5400万 token,多模态让 context 问题量级再升一个数量级 | 2025.07 | [arxiv.org/abs/2507.20198](https://arxiv.org/abs/2507.20198) |