为什么我们需要上下文内存虚拟化
大语言模型在长时工作会话中,会逐步积累大量核心状态——代码库架构、技术选型决策、项目规范等。这些构成了 LLM 对任务的完整心智模型。然而,当会话内容触达上下文窗口上限时,平台原生压缩功能(如 Claude Code 的/compact 指令)往往会对已有内容做大幅精简,例如将 132k 令牌压缩至 2.3k,直接丢弃了 98% 的细节信息。
这意味着新会话只能从头重建上下文,造成了根本性的效率浪费。现有的 RAG、MemGPT 或记忆插件方案,要么无法保留会话状态,要么仅保存摘要丢失细节。简单来说,当前 LLM 的上下文管理就像没有保存功能的记事本,写满了只能删掉重来。
帝国理工学院 Cosmo Santoni 于 2026 年 2 月发表的研究提出了上下文内存虚拟化(CMV) 技术,旨在解决这一痛点。该方案借鉴操作系统虚拟内存理念,通过基于 DAG 的状态模型实现版本化管理与跨会话复用,搭配三阶段结构无损修剪算法,在工具层实现了上下文的有效优化。
开源参考实现:https://github.com/CosmoNaught/claude-code-cmv

CMV 的核心设计
CMV 抽象掉了 LLM 上下文窗口的物理令牌限制,支持按需加载保存的状态。其核心贡献在于三大模块:基于 DAG 的状态模型、三阶段结构无损修剪算法以及提示缓存下的实证成本分析。
1. 基于 DAG 的状态模型
将会话历史建模为有向无环图 $G=(V, E)$:
- 节点 (v):代表不可变快照,是某一时刻会话 JSONL 日志的完整副本,附带元数据;
- 有向边 ((v_i, v_j)):代表分支,从快照派生的独立工作会话,最终生成新快照。
这实现了Git 式的 LLM 上下文工作流。用户可将耗时构建的上下文(如 80k 令牌的架构理解)生成为根快照,基于此派生多个并行分支完成不同任务,无需重复构建上下文。
系统提供了四大核心原语操作:
- Snapshot:将当前会话生成为不可变快照节点;
- Branch:从快照生成新会话,默认启用修剪;
- Trim:组合快照与分支,一步完成当前会话的修剪并启动新会话;
- Tree:可视化 DAG 结构,类似
git log --graph的对话谱系展示。
2. 三阶段结构无损修剪算法
这是 CMV 的技术核心,旨在在完整保留用户消息、助手响应、工具调用元数据原文的前提下,剥离原始工具输出、Base64 图片等机械冗余内容。
处理流程分为三个顺序阶段:
- 压缩边界检测:定位最后一次原生压缩的边界,避免重复处理已精简内容;
- 预边界工具 ID 收集:收集压缩边界前的所有工具使用 ID,为处理孤儿工具结果做准备;
- 流式过滤修剪:按规则处理日志,仅将处理后的内容写入新日志。
关键修剪规则包括跳过预压缩内容、移除文件历史/队列操作元数据、删除 Base64 图片块、对超阈值的工具结果生成存根等。


