用“KV 缓存编辑指令”把 agent 的消息改写变成服务端可执行的 span splice;在 MLA 下用闭式 RoPE $\delta$-rotation 让编辑后缓存仍位置正确,从而提升 replay cache hit(+11.2pp)并在部分并发下显著降延迟(峰值 -241ms)。
amortize:目标是“像 full-context 一样继续生成”,但不做全量 re-prefill;服务端 splice KV 并对下游位置做修正。forget:目标是真正语义删除;通过裁剪前缀 + re-prefill 达成(牺牲复用换语义擦除)。amortize 下与 full-context 对齐。
Paper's Figure 2, verbatim (caption: "Leyline serving-stack pipeline. A policy emits directives; the kernel matches the unchanged prefix, prefills the replacement tokens, and rotates cached $K_{\mathrm{pe}}$ for downstream slots via the $\delta$ -rotation (Section˜3.2). The radix prefix’s unchanged subtree is preserved across the edit.").
这张图把系统分成三层:policy 发指令、serving 执行 splice、内核做位置修正。关键观察点是:replacement 只需要局部 prefill,而下游缓存通过 $\delta$-rotation 继续可用,从而保留 radix 的“未变子树”。

Paper's Figure 1, verbatim (caption: "Teaser. A coding agent emits an explicit directive over its KV cache, expressed as a $(\mathrm{span},\,\mathrm{replacement})$ pair. The serving stack splices the cache in place: the old chunk is replaced by a short stub, downstream cached slots are re-anchored via a closed-form $\delta$ -rotation, and the radix prefix is preserved across the edit. The agent supplies what to evict; Leyline supplies how to splice it without re-prefill.").
Figure 1 强调“接口边界”的新意:agent 只声明 编辑意图(span+replacement),而服务端负责 正确地动 KV。读者应注意:stub/截断这类常见 agent 操作,在这里被显式提升为可组合的 cache-edit primitive。
最小信息量可以表述为(概念 schema):
{
"span": {"start": 123, "end": 456},
"replacement": "token sequence (may be a short stub)",
"mode": "amortize | forget"
}
amortize 会修改缓存并保留 radix 结构;forget 会触发裁剪 + re-prefill(可视为“明确放弃复用以换语义擦除”)。forget/re-prefill(重新计算而非继续复用错误缓存)。这里的“行动”不是外部 API,而是对 内部 memory(KV cache) 的一次可审计编辑。Leyline 把 agent 常见的“改历史”从隐式 prompt hack 变成显式状态迁移,因此能把错误恢复(fallback)纳入 serving 合约,而非留给上层策略盲猜。
| 记号 | 含义 | 备注 | ||
|---|---|---|---|---|
| $D$ | cache edit directive | $D=(s_{\mathrm{start}}, s_{\mathrm{end}}, R, m)$ | ||
| $s_{\mathrm{start}}, s_{\mathrm{end}}$ | 被替换的 span 边界 | token/slot index | ||
| $R$ | replacement token 序列 | 可为短 stub | ||
| $m$ | 模式 | amortize / forget | ||
| $\Delta$ | 长度差导致的位置偏移 | $\Delta= | R | -(s_{\mathrm{end}}-s_{\mathrm{start}})$ |
| $K_{\mathrm{pe}}$ | key 的 positional 部分 | MLA 分解下可单独旋转 | ||
| $K_{\mathrm{nope}}$ | key 的 non-positional 部分 | 复用不动 | ||
| $V$ | value | 复用不动 | ||
| $R(\cdot)$ | RoPE 旋转算子 | 依赖实现的 pairing 约定 |
$$K_{\mathrm{pe}}^{\mathrm{new}}[i]=R(\Delta)\cdot K_{\mathrm{pe}}[i],$$
该式的“物理意义”是:span splice 改变了下游 slot 的绝对位置,服务端用一次 $\Delta$ 对应的旋转把缓存 key 的位置分量重新锚定到新位置,从而让注意力的几何关系与“正确的 full-context”一致。
$$R(\Delta)\,R(p)\,k\;=\;R(p+\Delta)\,k$$
这条闭包性质解释了为什么“只补一次 $\Delta$”就足以把旧位置 $p$ 的 RoPE 映射到新位置 $p+\Delta$,从而支持对缓存中下游 token 的批量修正。
| 检查项 | 结论 | 证据位置(纸内) |
|---|---|---|
| 1) 可证伪正确性判据:full-context 与 re-prefill 诱导分歧,Leyline 应跟 full-context | 通过(在 amortize 目标下) | §4.1 构造例子与 ablation 描述 |
| 2) 多模型覆盖:不同 MLA 模型是否同样满足一阶正确性 | 部分通过(模型间差异显著) | Table 4/5/7/10 |
| 3) 随机/语义 edit-suite 压测:编辑位置与 replacement 多样性 | 部分通过(存在失败与偏向) | Table 5/7 与附录压力测试概述 |
| 4) 多次编辑组合:多 directive 串联是否仍稳定 | 部分通过(成功率随模型变化) | Table 7 |
| 5) 数值稳定性:bf16 下旋转误差是否积累 | 给出误差随编辑次数上升的曲线 | Table 6 + fp32 旋转缓解开关说明 |
| 6) 机制层收益:cache hit / latency 是否改善且与并发相关 | 通过(命中率提升稳定;延迟在某些点显著) | Table 3 |
| 7) 策略层收益:把 policy 接到接口后是否改善任务成功率 | 通过(该 leg 明确不做机制归因) | Table 2 + §5 讨论 |
| 8) 失败模式分类:主导失败是否被方法直接针对 | 针对“RoPE stale after edit”;对“架构差异/精度漂移”只能缓解 | §4 + Limitations |
| 9) 交互延迟预算:是否达到“交互式”并量化 | 只覆盖 serving 端 p50;端到端 agent turn 预算未完整拆分 | Table 3 + Limitations |
在“agent 成功率模型”的意义上,本文只给出了一个具体策略(truncation)的 before/after(Table 2),并未系统 sweep $(\text{difficulty},\text{planning depth},\text{toolset},\text{backbone})$;因此更准确的定位是:提供可组合的 cache-edit primitive,让上层策略有机会把“历史改写”变成可测量、可审计的系统操作。

Paper's Table 2, verbatim (caption: "debug-gym task solve rate: Baseline vs Treatment; Overall 31.2% → 45.5%.").
该结果证明“有了指令接口后,策略可以更激进地做 history truncation/编辑而不必总是全量重放”。同时它也刻意回避机制归因:收益可能来自策略本身,也可能来自更便宜的重放路径(论文将两者拆开验证)。

Paper's Table 3, verbatim (caption: "replay p50 e2e (ms) and replay cache hit (%), cache-off vs radix vs splice (Δ), with concurrency C.").
读这张表要抓两点:其一,splice 方案在所有并发点把 replay cache hit 从 49.6% 提升到 60.8%(稳定 +11.2pp);其二,延迟收益是 并发相关 的(例如 $C=8$ 峰值 -241ms),说明瓶颈可能在 prefix match / prefill / KV 读写的组合上而非单一内核。

Paper's Table 7, verbatim (caption: "Valid edit steps and first-token correctness under single-edit vs multi-edit, across models.").
这张表揭示了方法的“骨感现实”:即便在同一 splice/rotation 框架下,不同模型的多编辑正确率差距巨大(从接近 100% 到个位数)。因此“适用前提”不仅是是否支持 RoPE,而更细到注意力结构与数值实现细节。

Paper's Table 6, verbatim (caption: "relative L2 and max-abs distance vs fresh as number of edits N grows.").
这组数字提供了一个直观的工程结论:即使代数上闭式成立,bf16 存储与旋转会引入累积误差;当编辑次数上升时偏差单调变大,意味着生产系统需要“验证 + 回退”或更高精度的旋转路径来兜底。
| Step | 论点(要成立什么) | 关键假设 / 机制 | 证据(纸内) |
|---|---|---|---|
| 1 | agentic 推理引入“可变历史”,现有 KV 复用假设不再成立 | message edit 破坏 append-only;天真复用会 RoPE stale | §1 + Table 1 |
| 2 | 需要一个“cache-edit 通道”把策略意图显式化 | 把 edit 抽象为 span+replacement+mode 的指令合约 | §3 + Figure 1/2 |
| 3 | 在 MLA 下可以只修正 $K_{\mathrm{pe}}$ 来恢复位置正确性 | $K_{\mathrm{pe}}/K_{\mathrm{nope}}$ 分解 + RoPE 旋转闭包 | §3.2 + Eq(1)(2) |
| 4 | amortize splice 在语义上应等价于 full-context(而非 re-prefill) | 构造让 full 与 rp 分歧的可证伪 test;Leyline 需跟 full | §4.1 + Table 4/5 |
| 5 | 该 primitive 在 serving 上带来可观收益,并可被上层策略利用 | radix 保留提升 replay hit;延迟收益随并发变化;策略截断 solve rate 提升 | Table 3 + Table 2 |
[实现未公开]
难点不在“做缓存”本身,而在把 语义级编辑(span splice) 变成 张量级可组合变换:在 MLA 的结构约束下只旋转 $K_{\mathrm{pe}}$ 并保持 $K_{\mathrm{nope}},V$ 不动,从而在不破坏 radix 前缀的前提下恢复“等价于 full-context”的位置几何。这个边界一旦设计错(例如 pairing、索引重映射、组合顺序),就会出现“看似能跑但语义漂移”的隐蔽故障。
edit_kv_cache(D) 原语(指令为输入、KV splice 为副作用),而不是外部世界的读写 API。amortize 修改缓存但语义上可通过 re-prefill 回滚;forget 直接放弃复用以保证擦除语义。