Leyline: KV Cache Directives for Agentic Inference

agent 2606.01065
kv-cacheagentic-servingdirective-interfaceropemla

Leyline: KV Cache Directives for Agentic Inference — L2 #

1. TL;DR #

用“KV 缓存编辑指令”把 agent 的消息改写变成服务端可执行的 span splice;在 MLA 下用闭式 RoPE $\delta$-rotation 让编辑后缓存仍位置正确,从而提升 replay cache hit(+11.2pp)并在部分并发下显著降延迟(峰值 -241ms)。

2. Q1 / Q2 / Q3(痛点 / 方法 / 结果) #

Q1 痛点:agentic 会“改历史”,而 KV 假设是“只追加” #

Q2 方法:把“改什么”与“怎么改 KV”拆开(指令接口 + $\delta$-rotation 内核) #

Q3 结果:正确性可证伪 + 机制收益 + 策略收益(分两条腿验证) #

3. 架构 / 方法图(含 agent loop) #

Figure 2: serving-stack pipeline for directives

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 的“未变子树”。

Figure 1: teaser for span+replacement KV splice

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。

3.1 指令接口(可被 agent 当作一种“工具调用”) #

最小信息量可以表述为(概念 schema):


{
  "span": {"start": 123, "end": 456},
  "replacement": "token sequence (may be a short stub)",
  "mode": "amortize | forget"
}

3.2 Agent loop(单轮状态机,含失败回退) #

stateDiagram-v2 [*] --> Observe Observe: observation (messages + KV cache state) Observe --> Plan Plan: decide edit intent\n(span, replacement, mode) Plan --> EmitDirective EmitDirective: build D=(s_start,s_end,R,m) EmitDirective --> ApplySplice ApplySplice: match prefix\nprefill replacement\nrotate downstream K_pe ApplySplice --> Verify Verify: next-token / logit check\ncache invariants Verify --> Reflect Reflect: continue agent policy\n(or adjust truncation) Reflect --> Observe ApplySplice --> Fallback: tool/kernel failure Verify --> Fallback: verification failed Fallback: re-prefill / forget-mode\n(drop reuse to restore correctness) Fallback --> Observe

这里的“行动”不是外部 API,而是对 内部 memory(KV cache) 的一次可审计编辑。Leyline 把 agent 常见的“改历史”从隐式 prompt hack 变成显式状态迁移,因此能把错误恢复(fallback)纳入 serving 合约,而非留给上层策略盲猜。

4. 作者证明(无形式化作者证明 — 仅实证) #

4.1 记号表与方程物理意义 #

记号含义备注
$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 的批量修正。

4.2 经验性检查(≥6 项) #

检查项结论证据位置(纸内)
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,让上层策略有机会把“历史改写”变成可测量、可审计的系统操作。

5. 实验与数据(机制 + 策略) #

Figure 3: Table 2 debug-gym solve rate uplift

Paper's Table 2, verbatim (caption: "debug-gym task solve rate: Baseline vs Treatment; Overall 31.2% → 45.5%.").

该结果证明“有了指令接口后,策略可以更激进地做 history truncation/编辑而不必总是全量重放”。同时它也刻意回避机制归因:收益可能来自策略本身,也可能来自更便宜的重放路径(论文将两者拆开验证)。

Figure 4: Table 3 replay cache hit and p50 latency

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 读写的组合上而非单一内核。

Figure 5: Table 7 multi-edit correctness rate across models

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,而更细到注意力结构与数值实现细节。

Figure 6: Table 6 bf16 drift as edits accumulate

Paper's Table 6, verbatim (caption: "relative L2 and max-abs distance vs fresh as number of edits N grows.").

这组数字提供了一个直观的工程结论:即使代数上闭式成立,bf16 存储与旋转会引入累积误差;当编辑次数上升时偏差单调变大,意味着生产系统需要“验证 + 回退”或更高精度的旋转路径来兜底。

6. 论证链(paper 内部,≥3 步) #

Step论点(要成立什么)关键假设 / 机制证据(纸内)
1agentic 推理引入“可变历史”,现有 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)
4amortize 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

7. 实现 cross-reference(核心壁垒 + 关键细节 + 适用前提) #

[实现未公开]

7.1 核心技术壁垒(最难复现的一点) #

难点不在“做缓存”本身,而在把 语义级编辑(span splice) 变成 张量级可组合变换:在 MLA 的结构约束下只旋转 $K_{\mathrm{pe}}$ 并保持 $K_{\mathrm{nope}},V$ 不动,从而在不破坏 radix 前缀的前提下恢复“等价于 full-context”的位置几何。这个边界一旦设计错(例如 pairing、索引重映射、组合顺序),就会出现“看似能跑但语义漂移”的隐蔽故障。

7.2 关键实现细节(容易踩坑的 1–2 个点) #

7.3 Tool / environment contract(面向 agent 的接口视角) #

7.4 LLM backbone 要求与敏感性 #