突破 LLM 上下文瓶颈:上下文内存虚拟化 CMV 的设计与实践
研究背景
大语言模型(LLM)在代码编写、复杂推理等长时工作会话中,会逐步积累大量核心状态——比如代码库的架构映射、技术选型的权衡决策、项目的编码规范等。这些内容构成了 LLM 对任务的完整心智模型,但构建这一模型需要消耗大量的时间和令牌成本。
当会话积累的内容触达 LLM 的上下文窗口上限时,平台的原生压缩功能会对已有内容做大幅精简。例如 Claude Code 的 /compact 指令曾将 132k 令牌的会话内容压缩至 2.3k 令牌,直接丢弃了 98% 的细节信息,让 LLM 失去了耗时构建的精细理解。而新的会话只能从头重建上下文,这造成了根本性的效率浪费。
现有解决方案均存在明显短板:检索增强生成(RAG)仅能补充文档,无法保留会话状态;MemGPT 仅支持单会话的内存分页,不能跨会话复用;记忆插件只保存摘要,丢失对话细节;而 LongLLMLingua 等提示压缩技术,仅在模型/嵌入层修改上下文表示,未处理原始对话日志的结构冗余。
简单来说,当前 LLM 的上下文管理就像没有保存功能的记事本,写满了只能删掉重来,而开发者亟需一种能'保存进度、复用内容、精简冗余'的上下文管理方案。
核心方案:上下文内存虚拟化 (CMV)
本研究提出了上下文内存虚拟化(CMV) 技术,借鉴操作系统虚拟内存技术,抽象掉 LLM 上下文窗口的物理令牌限制,支持按需加载保存的状态。核心包含两大模块:基于 DAG 的状态模型和三阶段结构无损修剪算法。
DAG 状态模型
将会话历史建模为有向无环图 (G=(V, E)):
- 节点 (v):代表不可变快照,是某一时刻会话 JSONL 日志的完整副本,附带名称、时间戳、令牌数等元数据。
- 有向边 ((v_i, v_j)):代表分支,从快照 (v_i) 派生的独立工作会话,最终生成新快照 (v_j),分支会继承原快照的所有上下文理解。
设计了四大核心原语操作:
- Snapshot:将当前会话生成不可变快照,原会话不做任何修改。
- Branch:从指定快照创建新会话,默认启用修剪,可添加定向任务消息。
- Trim:一键完成'快照 + 分支 + 修剪',直接生成精简后的新会话。
- Tree:可视化 DAG 结构,实现类似
git log --graph的上下文谱系展示。
三阶段结构无损修剪算法
这是 CMV 的核心技术,在完整保留用户消息、助手响应、工具调用元数据原文的前提下,剥离原始工具输出、Base64 图片等机械冗余内容,解决令牌冗余问题,同时保证 API 调用正确性。
- 阶段 1:压缩边界检测 扫描日志,定位最后一次原生压缩的边界,避免重复处理已精简的内容。
- 阶段 2:预边界工具 ID 收集 收集压缩边界前的所有工具使用 ID,为识别'孤儿工具结果'做准备。
- 阶段 3:流式过滤与修剪 按规则处理日志,仅将有效内容写入输出。核心规则包括:跳过预压缩内容、移除元数据/Base64 图片、对超阈值工具结果生成存根、剥离孤儿工具结果等。
关键难点解决:孤儿工具结果处理 LLM 工具调用 API 有严格的 schema 要求,工具结果必须关联前置的工具调用。原生压缩可能导致'调用在边界前、结果在边界后',直接使用会触发 API 错误。算法通过第二阶段收集前置工具 ID,第三阶段剥离对应的孤儿结果,无需用户干预即可保证 API 正确性。
经济评估
以 Claude Opus 4.6 为基准,对 76 个真实编码会话开展单用户案例研究,评估修剪在提示缓存机制下的经济可行性。
| 会话类型 |
|---|


