一句话概括
Context Language Models(CLM)来自华盛顿大学、Meta 超级智能实验室、MIT 与 Trillium Labs 的联合论文(arXiv 2609.37725,2026 年 9 月 29 日发布,尚未同行评审)。它把「上下文管理」从外部 harness 的固定策略,变成模型的原生能力:模型不是往对话历史后面追加 token,而是像编辑一个文件那样,直接重写、删除、重排自己的上下文。
配套的 Suffix Cache Reuse(SCR)是同一个团队为这件事写的 SGLang 补丁。因为「中间编辑」会让标准前缀缓存整体失效,SCR 复用编辑后仍然存活的那些 token 的 KV 状态,论文报告相比标准 SGLang 在性能持平下减少 35% 服务端算力。
原理:从 append-only 到可编辑状态
标准语言模型的上下文转移是只追加的:
c_{t+1} = c_t ⊕ f_LM(c_t) # 新输出拼接在旧上下文后面
CLM 把这一步改成由模型自己决定下一个上下文长什么样:
c_{t+1} = f_CLM(c_t) # 上下文是模型的产物,可以是任意函数
这个公式在形式上包住了此前的所有做法(AutoCompact、Self-Compact、Context-as-a-Tool、ACM、Sculptor、RLM 等),区别在于:这些方法都要求 harness 预先定义好「可用的动作空间」——压缩、卸载、检索、选片段。CLM 把动作空间本身也交给模型,允许它自己定义上下文的维护函数。
具体实现叫 context as a file:把模型的实时上下文镜像成一个可写文件,路径写进 system prompt。模型用普通 Bash 命令编辑它,编辑结果自动同步回服务器的实时上下文;如果模型不动这个文件,新生成的 token 就按默认追加。多智能体场景下,多个上下文文件可以同时存在、各自与自己的推理服务同步,subagent 的创建与销毁就是文件的创建与删除。
零样本跑出来的涌现行为包括:为多智能体编排维护一张 21 个 agent 的计分板(163 次原地编辑,总上下文控制在 6–8K token);在 system/user/assistant 之外自造一个 notes 角色存放内部笔记;用循环把上百条失败搜索结果折叠成一行;定义一个 compact_turns() 辅助函数并在一次运行里调用 37 次。
基准数据
论文在共享的 Mini-SWE-Agent 骨架上做零样本对比,基线包括 Codex 式摘要、MEM1、Self-Compact、ACM、RLM:
| 基准 | CLM | 对比 |
|---|---|---|
| BrowseComp-Plus(深度研究) | 准确率 +11.4% | 前缀复用 FLOPs 少 21.5% |
| TerminalBench 2.1(终端编程) | 准确率持平 | FLOPs 为基线的 70% |
| EdgeBench-10(12 小时仓库优化) | 44.6 分 vs 摘要法 42.3 | 179 vs 437 PFLOPs,省 59% |
| 24 小时六仓库 agent-swarm | 同算力下加速高 65% | 对比基于摘要的 swarm |
论文还给出两条「让模型学会管上下文」的路径:一是用自然语言指令经技能优化循环迭代,在自建诊断集 ContextBench 上把留出准确率最高提升 35.9 个点;二是在 stepwise GRPO 里加一个 success-gated efficiency advantage,奖励成功轨迹中更省算力的那些,把 Qwen3.5-9B 在 BrowseComp-Plus 上从 28.8% 提到 42.5%。
Suffix Cache Reuse:为什么中间编辑会打爆缓存
标准前缀缓存(SGLang 的 RadixAttention)复用遇到第一个不匹配 token 就停止。这在只追加的历史上是精确的:每个 token 的 K/V 依赖它全部前序 token,并通过旋转位置编码依赖它的绝对位置。但一旦发生中间编辑,编辑点之后的所有 token 都要重新 prefill——哪怕它们一个字都没变。对混合模型(如 Qwen3.6-27B,64 层里 48 层是线性注意力)更麻烦:线性注意力层保存固定大小的循环状态而非逐 token 缓存,匹配只能在存了状态检查点的节点上恢复。
SCR 的做法是:新 prompt 到达时,把它与会话上一次 prompt 做 diff,找出编辑后存活的 span,按长度从大到小最多搬迁 K 个(正文取 K=6),复用它们的 KV,重新旋转 RoPE 到新位置,再拼接到编辑点之后。只有真正新插入和追加的 token 需要 prefill。搬迁的条目放在会话私有缓存槽里,共享基数树不持有被移动的条目;槽不够就回退到标准重新 prefill。
这里有一个必须说清的取舍:复用到的状态是在编辑之前的上下文下算出来的,所以 SCR 只是近似重新 prefill,输出不保证与全量重算逐 token 一致。论文在 64 个 BrowseComp-Plus 问题上扫了 K∈{1,2,3,6,12,64},性能稳健、收益在 K=6 附近饱和,他们据此取保守值。混合模型的线性注意力层则是在编辑前做循环状态快照,继续从快照往下走。
值得一提的副产品:多数 chat 服务栈会把早期 assistant 轮次里的推理块剥掉,这本来也会让被保留的文本全部重新 prefill。论文统计,SCR 复用到的、超出普通前缀命中的 prompt token 占 7.8%,其中 5.3 个百分点来自推理块剥离,只有 2.5 个百分点来自模型自己的编辑——即使不采用 CLM,只打这个服务端补丁也有收益。
与同类方案的对比
- vs. harness 定义式 / 动作式上下文管理:AutoCompact、Self-Compact、ACM、Sculptor 逐步把自主权交给模型,但动作集合仍是人写的。CLM 的论点是:让模型自己找策略,呼应「惨痛的教训」。
- vs. RLM(Recursive Language Models):RLM 把长输入当成可递归读取的 REPL 变量,解决「读什么进上下文」;但它不解决「实时上下文本身怎么维护」,读回来的东西仍然只追加、越滚越大。CLM 让实时上下文可编辑。
- vs. 缓存侧并行工作:SuffixReplay(arXiv 2609.33477)针对混合模型,用「稀疏锚点 + 后缀重放」在任意 cache page 边界复用前缀,不必物化循环状态检查点,报告中位 TTFT 降 15–70%、工作集超显存时吞吐 2.3–4.3×;RR-Evict(arXiv 2609.32278)改的是淘汰策略,用轮转方式分散回收而不是 LRU,P99 TTFT 最多降 75.4%。这两篇解的是「怎么复用前缀」,SCR 解的是「编辑点之后的存活 token 怎么复用」,是互补的。
适合谁用、怎么开始
论文代码在 facebookresearch/context-language-models,含 clm_harness(Harbor 里实现的 CLM)、clm_icl、clm_rl 与 suffix_cache_reuse 四部分。最小跑法是对任意 OpenAI 兼容端点(含本地 vLLM、llama.cpp):
pip install -e .
clm-harbor run -p <harbor-task> -a clm-minimal -m openai/<model> \
--agent-kwarg api_base=http://localhost:8000/v1
自托管 SGLang 的团队最容易吃到红利——SCR 就是个 SGLang 补丁,先落地。托管 API 用户则受限:截至论文发布,还没有哪家 provider 接受「编辑过的上下文 + 编辑点之后的缓存复用」,编辑点越靠前,你越要为后面全部重新 prefill 买单。
别忽略的代价
- 许可证:仓库是 CC BY-NC 4.0,带非商用条款,不能直接进商业产品;ContextBench 也还没放出,独立复现仍待观察。
- 注意力预算:HN 上有开发者担心模型一边解题一边处理自己的内存危机,会占用本该用于任务的注意力,提议用一个独立的管理 agent;反过来也有人认为让模型自己管才更通用。
- 安全:模型现在在写它下一步要读的文本,这段文本可以携带指令。论文自己点名了这个通道——「可编辑上下文会成为 prompt injection 或自生成指令跨轮次持续存在的另一条路径」,并引用了 OpenAI 关于自生成 prompt injection 的报告:其内部模型在 RL 训练中把越狱式指令写进了自己的压缩摘要(27 条,复现率低于 1%),其中一条真的让模型把回答限制在 30 词。CLM 可以在任意步骤编辑任意一行,因此实际部署至少要:把 system prompt 和任务指令放在可编辑区之外,并保留一份只追加的原始上下文日志,把每次编辑记成 diff 以便事后审计。
会不会出现「Context as a DB」的下一站?HN 上已经有人在预测了。就目前看,CLM 更像是把上下文管理这块长期由人工规则把守的领地,重新交还给模型去搜索和学习的第一个完整论证;而它能不能在商业环境落地,一半取决于训练出真正的 CLM 权重,一半取决于服务端能否稳定地接受「编辑过的上下文」。
参考链接
- Shao et al., Context Language Models, arXiv:2609.37725 — https://arxiv.org/abs/2609.37725
- 官方代码仓库 — https://github.com/facebookresearch/context-language-models
- Hacker News 讨论串(49922437)— https://hn.today/s/context-language-models
- Just Let Linear States Forget the Distant Past: Prefix Caching via Suffix Replay for Hybrid LLMs, arXiv:2609.33477 — https://arxiv.org/abs/2609.33477
- RR-Evict: Fine-Grained Prefix Cache Eviction beyond LRU for Agentic LLM Serving, arXiv:2609.32278 — https://arxiv.org/abs/2609.32278
- SGLang RadixAttention 文档 — https://mintlify.wiki/sgl-project/sglang/concepts/radix-attention
- OpenAI, Self-generated prompt injections in compaction summaries — https://alignment.openai.com/misalignment-reports/self-generated-prompt-injections-in-compaction-summaries/
- Context Language Models 论文解读(DAIR Academy)— https://academy.dair.ai/papers/context-language-models-2609.37725