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


