kv-cache-reuse

Cross-category topic | 25 sources

KV Cache 复用 — 跨类别主题 #

范围:复用已经算过的 KV / 状态——前缀缓存与 radix/trie 索引、准入与淘汰策略、 跨轮次 / 跨请求 / 跨模型 / 跨上下文复用、以最大化命中率为目标的路由与调度、 不可回滚状态下的复用、复用状态的出处与保真度语义、以及真实负载的复用画像。 存储层级本身(CPU/SSD 带宽与介质)只在它改变复用经济性时出现。

1. 主题缘起 #

这个方向不是被一篇论文催生的,而是被四条陆续到期的债务逼出来的,而且它们分别落在

不同的 category 上。

第一条是 framework 侧的机制债。 前缀复用在 2023 年就已经被做成了默认能力:把已完成请求的

KV 留在一棵 radix 树里、按最长共享前缀排序调度,并且能证明这个贪心顺序等价于离线最优的 DFS

遍历 [2312.07104]。该机制被上游吸收后成了事实标准

[2312.07104],可它留下的是"机制"

而不是"策略":淘汰谁、准入谁、以什么效用函数排序,全部退化成 LRU

[sgl-project-sglang]

第二条是 agent 侧的负载债,而它把 LRU 从"次优"变成了"反向"。 当请求从"一次问答"变成

"一条几十次调用的工作流",重复前缀的比例从边际优化变成主导项——同模板批量工作流里重复

prompt、重叠上下文、并发重复工作同时存在 [2509.02121]

多智能体通信让每次转发都要把整段上下文重新 prefill,开销从单 agent 的线性上升到近似二次

[2510.12872]。更关键的是符号问题:在循环型工作流里"刚执行完"

强相关于"马上要再执行",于是 LRU 会系统性地驱逐下一步立刻要用的那份 KV

[2507.07400];在图上逐步推理的

多 agent 负载里同样如此——最新生成的一次性代码片段最不值得留,而 LRU 恰好优先保留它

[2511.01633]。这不是"策略不够好",是时间信号与语义信号方向相反

[2511.01633]

第三条是数据债,而且它推翻了前两条隐含的乐观。 来自生产集群一周真实 trace 的画像显示:

无限容量下的理想命中率只有 62% / 54%,远低于合成负载常报的 80% 以上;10% 的块贡献 77% 的

复用;KV 块寿命极短,to-B 负载 90% 的块 0.3 秒内不再被复用

[2506.02634]。同一份数据还给出一个反直觉结论:在纯

API 负载里贡献 97% 命中的是单轮请求(客户端把相同 system prompt 硬编码进去 + 高 QPS),

而不是多轮会话 [2506.02634]

在结构化 agent 负载上这条债的形态又不同:默认前缀缓存的命中率只有 61%,原因不是策略差,而是

复用单元选错了——每步 prompt 的稳定前缀段太短、碎片事实的排序还不稳定

[2511.01633]

第四条是出处债,而它是被最新条目逼出来的,且此前整个主题都没有对应字段。 在 2026 年之前,

本主题每一个成员的隐含公理都是"产生 KV 的参数集与消费 KV 的参数集是同一个"。两篇训练时保证

路线先撬动了这条公理,但保留了精确性:冻结产 KV 的那一半参数,使不同模型产出同一份 KV

[2602.12029][2603.13281]。而闭式跨模型映射同时放弃了两者——

参数集不同、且复用是近似的、还不需要任何训练:对 target 每个 (layer, head) 做一次 ridge,

接收方直接从发送方的 KV 解码 [2608.03893]。它落地时要写进的那棵树,键是

token id 序列 [sgl-project-sglang],节点上只有

管驱逐安全的引用计数、没有任何"这份 KV 由谁产生、保真度如何"的字段

[2608.03893]

因此这个主题的真正内容不是"怎么做前缀缓存",而是四个问题的叠加:**在复用变成主导项、真实命中率

又低于预期、状态代数本身可能不允许切片、而且一份缓存的出处与保真度不再唯一的情况下,谁来决定

复用什么、以什么效用排序、在哪一层决定、以及凭什么相信命中的那份 KV 是可以被命中的。**

在第三条之上还叠了一个模型架构层面的意外,它是第一次真正的公理作废:Attention+SSM 混合模型的

SSM 状态是原地更新的,不能回滚成自己的任意前缀,于是"命中"要求整段前缀精确匹配,块级

25.0% 的 KV 复用率对应的 SSM 状态复用率只有 0.4%,相差 65.3 倍

[2411.19379]。这条把"KV 沿序列维可切片"这个 2023–2024 年所有

缓存系统的公理直接作废 [2411.19379]


2. 覆盖的 category 分布 #

category数量代表
framework16RadixAttention 的 radix 树 + 最优性证明 [2312.07104];混合模型下的准入/淘汰重设计 [2411.19379];引擎无关的外置缓存层 [2510.09665];生产 trace 画像与 workload-aware 淘汰 [2506.02634];工作流拓扑驱动的淘汰与预取 [2507.07400];agent 边界即缓存优先级边界 [2511.01633];前缀路由与 true-FLOPs 计价 [2605.02960];单树同管 KV 页与 SSM 状态的引擎 [tokenspeed]
agent4批量工作流的合并查询计划 + 复用折扣代价模型 [2509.02121];跨上下文 KV 偏移近似 [2510.12872];模板化 radix 树的编译期缓存调度 [2603.16104];与前缀复用兼容的跨轮剪枝 [2606.09916]
code3RadixAttention 与分层缓存的生产实现 [sgl-project-sglang];前缀缓存感知的调度/路由器 [ZhaiFeiyue-mori-scheduler];Rust 并发 radix 树 cache-affinity 路由 [vllm-project-router]
algorithm2把 prefix overlap 折算成毫秒、与网络 RTT 同量纲相加的跨区路由代价模型 [2602.11688];跨参数集的闭式 per-head 线性映射 [2608.03893]

四个 category 的分工不是偶然的:framework 提供机制与策略,agent 提供"未来会复用什么"的结构

信号,code 把这些决策外移到路由层,algorithm 负责把互不同量纲的信号折算成同一个目标函数、

并且现在还负责把不同参数集之间的表示差异也折算掉。这条分工线本身就是下面 §5 的主线。

值得单独记一句的是 algorithm 这一格的性质变化。它原先只有一个成员,做的是计价(把 overlap

换成毫秒)[2602.11688];新成员做的是换算(把一组参数下的 KV 换成另一组参数

下的 KV)[2608.03893]。计价改变的是"该不该

复用",换算改变的是"什么算同一份缓存"——后者动的是本主题的对象定义,不是它的目标函数。


3. 时间线 #


4. Evolution timeline (技术谱系) #

flowchart TB subgraph MECH["机制层 · framework"] PAGE["分页 KV / block table
(复用的物理前提)"] RADIX["radix 树 + LRU
最长共享前缀优先
2312.07104"] TIER["分层存储 + 调度器预言机
2403.19708"] WIRE["传输时压缩 + 自适应流式
2310.07240"] LAYER["引擎无关外置缓存层
2510.09665"] SSD["GPU 直驱 SSD 缓存
2605.03375"] UNITREE["单树同管 KV 页 + SSM 状态
13 态 FSM 编译期安全
tokenspeed"] end subgraph POLICY["策略层 · framework"] ADMIT["准入 ≥ 淘汰
FLOP-per-byte 效用
2411.19379"] PROB["按类别复用概率
删 Frequency + 寿命正则
2506.02634"] STE["工作流拓扑 → STE 优先级
主动预取 + 状态感知调度
2507.07400"] CONTRACT["resident/active 合约
可行性边界 + 可观测 harm
2605.24259"] end subgraph APP["结构信号层 · agent"] SEMVAR["Semantic Variable
请求 DAG + PrefixHash
2405.19888"] BATCHDAG["合并批量 DAG
复用折扣代价模型
2509.02121"] TRT["模板化 radix 树
前缀层级 ⊕ 依赖 DAG
2603.16104"] INTENT["跨轮意图 + 死槽位重定向
剪枝 ⊕ 前缀复用
2606.09916"] CHUNK["复用单元上抬为 vertex chunk
agent 边界 = 优先级边界
2511.01633"] APPROX["RoPE 对齐 + anchor 偏移近似
2510.12872"] end subgraph MODEL["参数层 · framework×algorithm"] ENC["冻结逻辑编码器
KV 跨模型恒等
2603.13281"] PSHARE["共享 prefill 模块
cache-conditioned 微调
2602.12029"] XMAP["闭式 per-head 线性映射
跨参数集且近似、免训练
2608.03893"] end subgraph ROUTE["路由层 · code×algorithm"] SGLR["RadixAttention 生产实现
+ HiCache 分层
sgl-project-sglang"] CHARTREE["字符级并发 radix 树
两段式亲和/负载切换
vllm-project-router"] HASHR["引擎精确 hash 链复制
+ 跨节点 KV 索引
ZhaiFeiyue-mori-scheduler"] GEO["overlap→毫秒折算
与 RTT 同量纲相加
2602.11688"] FLOPS["true-FLOPs 计价的前缀路由
均衡作为饱和副产品
2605.02960"] ELDR["专家局部性 ≠ 前缀局部性
2607.00466"] end PAGE --> RADIX RADIX --> TIER RADIX --> ADMIT RADIX --> SGLR RADIX --> CHARTREE RADIX --> TRT RADIX --> INTENT TIER --> LAYER TIER --> PROB TIER --> STE WIRE --> LAYER LAYER --> SSD ADMIT --> UNITREE RADIX --> UNITREE ADMIT --> CONTRACT PROB --> CONTRACT STE --> CONTRACT SEMVAR --> BATCHDAG BATCHDAG --> TRT SEMVAR --> TRT SEMVAR --> STE STE --> CHUNK TRT --> CHUNK APPROX -.->|"放弃精确性的分叉"| TRT ENC --> PSHARE RADIX -.->|"KV-参数耦合被训练打破"| ENC PSHARE -.->|"连恒等也一起放弃"| XMAP APPROX -.->|"位置性近似 → 参数性近似"| XMAP XMAP -.->|"出处/保真度字段缺失"| SGLR SGLR --> HASHR CHARTREE --> HASHR HASHR --> GEO CHARTREE --> GEO GEO --> FLOPS GEO -.->|"命中率不再是目标"| ELDR SGLR -.->|"引擎内 vs 引擎外之争"| LAYER

谱系里有五个真正的分叉点和三个汇合点


5. 技术线交错 #

模型架构改变,framework 的策略层必须重写,而机制层可以被工程收敛。 混合 SSM 的三条性质

(定长、原地更新、比单 token KV 大 10–100 倍)联合导致"全有或全无"的复用语义,任何一层复用

不足都会成为瓶颈 [2411.19379]。这不是调参问题:定长状态使

"大小 ∝ 省下的算力"这条所有 size-aware 缓存共享的代理关系失效,必须换成 FLOP-per-byte 这类

显式解耦的效用 [2411.19379]。反过来说,Transformer 时代之所以可以忽略这件事,

正是因为 attention 项的 FLOP-per-byte 近似常数 [2411.19379]。策略必须改,但

机制可以统一:把 KV 页与 Mamba 状态放进同一棵树、按 cache group 分别管理页生命周期,就不必维护

两套缓存实现 [tokenspeed],代价是这条路径目前只在一个

preview 阶段的引擎里存在、且相关 PR 尚未合入 [tokenspeed]

agent 的工作流结构给了 framework 一个它自己拿不到的预言机,而这个预言机有三种精度。 最粗的

一种是把整批同模板工作流合并成一个计划,此时 KV 复用不再是运行时的偶然命中,而是代价模型里可以

被优化器主动制造的折扣项 [2509.02121];更细的一种是把前缀层级和算子依赖编码进

同一棵树,在编译期排出一个让复用最大化的顺序,实测命中率比在线最长前缀匹配高出 32.9 个百分点

[2603.16104];居中的一种不要求整批已知,只要求当前时刻的拓扑可见,于是可以

在线运行:按 steps-to-execution 给每个 radix 节点排优先级、共享节点取最小值,再据此主动预取

[2507.07400]。三者共享同一个失效条件——运行时动态生成分支:编译期方案

的静态剪枝直接失效 [2603.16104],在线方案的 STE 退化成启发式且论文未做该场景

实验 [2507.07400]

"复用单元"是 agent 侧独立发现的第三个杠杆,它与前缀匹配正交。 在图上逐步推理的负载里,默认

前缀缓存只有 61% 命中,原因是碎片事实太小、排序不稳,两个内容相近的查询也难以命中同一前缀

[2511.01633]。把复用单元抬成"节点 + top-k 邻居"的 chunk 之后,命中率 +17.7%、

吞吐 +41.6%,而这不需要改任何前缀匹配算法 [2511.01633]

代价是收益变成内容相关的:它假设图访问有幂律性,在长尾图上 chunk 复用率会显著下降

[2511.01633],而 top-k 邻居裁剪本身就有信息

损失风险 [2511.01633]

算法层的约束反过来解开了系统层的死结,然后又把这个死结换成了一个新的。 "KV 与参数强耦合"

长期被当成物理事实,跨模型复用因此不可能。冻结产 KV 的那一半参数、只用 cache-conditioned 目标

训练消费 KV 的那一半,把这条事实变成了一个训练时可选的约束:内存主导项从

$N(L_{shared}+L_{unique})$ 降到 $L_{shared}+N L_{unique}$,当共享上下文远长于专属段时对模型数

近似不敏感 [2602.12029]。同一想法的另一种实现直接消除了逐层敏感性选择,把

复杂度从 $O(L\times N)$ 降到 $O(1)$ [2603.13281]。但这条线把

serving 优化变成了训练依赖:每换一个专用模型都要重训一次,纯系统方案不需要付这笔钱

[2602.12029]。免训练的闭式换算试图绕开这笔钱,代价是把成本科目从"训练一次"

换成"每个有序模型对一份 1.01–3.36 B 参数、落盘 4–12 GB 的资产"

[2608.03893]——五模型车队约 131 GB,且冷启动换页 80–480 ms 的量级横跨一个生产

路由器实测的整个中位 TTFT

[2608.03893]

两条路线的规模律因此相反:消费者侧适配按 $O(P)$ 增长,翻译器侧资产按 $O(P^2)$ 增长

[2608.03893]

路由层是复用与其他局部性目标唯一的公共竞技场,而这些目标互相冲突,且现在有四种计价单位。

前缀亲和路由的经典失效模式是热点:只按亲和路由会把负载堆到少数 worker 上,所以生产路由器都做

两段式——负载差超阈值就退回最短队列,否则才走亲和

[vllm-project-router]

跨区域时冲突更硬:单 token prefill 时间实测 0.0938 ms,意味着 1000 token 的命中只值 94 ms,

常常抵不过一次跨区 RTT,纯 cache-overlap 路由反而恶化 TTFT [2602.11688]

第三种计价把命中直接记成算力:N 个同前缀请求的真实成本是 1 次前缀 + N 次后缀,据此更新负载后,

均衡不再是显式优化目标而是饱和的副产品

[2605.02960];而且这种计价的

边际价值随并行度上升(2 卡约 8%,8 卡 +16–18%),因为卡越多随机派发把前缀打散得越厉害

[2605.02960]。而在 MoE 上还多出第四个局部性维度:decode 延迟由一个 batch

激活的不同专家的并集决定,而不是请求数——16→128 个活跃专家带来 4.7 倍的 MoE 层延迟摆动

[2607.00466]。此时前缀亲和与专家亲和是两个需要同时满足的约束,其中一个的

签名还必须做成与 KV block 同索引才能在前缀命中时保持精确

[2607.00466]

存储层级改变的是复用的经济性,而不是复用的语义——但它也能把经济性改成负的。 传输时体积

可以用类视频编码压 3.5–4.3 倍

[2310.07240];块级搬运替代页级搬运

可以把 CPU 侧加载带宽从 88 Gbps 提到 400 Gbps [2510.09665];把 CPU 完全

移出 GPU↔SSD 的数据与控制路径,可以把"I/O 气泡超过计算"的交叉点推到 98.3% 命中率

[2605.03375]。这些都不改变"复用什么",但它们一起把"该不该复用"的

损益点移动了一到两个数量级——同一个复用决策在 32 Gbps 链路上是亏的(低于 256K token 时

直接输给重算 [2510.09665]),在 GPU 直驱 SSD 上是赚的。**反向的证据同样

存在且更尖锐**:在 1024 固定前缀 × 64 并发下,反应式回载的分层缓存把系统压到纯 GPU 基线的

0.57 倍,因为频繁 miss 触发的回载与引擎原有的逐层流水互相打架

[2507.07400]

而这条链路的带宽上界又被引擎里 KV 的碎片化布局压住,主动预取只是更好地重叠了那段"打不满的

带宽",没有解决根因 [2507.07400]。极端的另一头是把复用整个关掉:对前缀稀疏

负载直接停用 KV 存储、把 HBM 全部让给更大 batch

[2605.02960]——这是本主题里

唯一把"复用量"这个旋钮显式拧到零的设计,也说明复用在某些 regime 下是净负债。


6. 共识与分歧 #

共识 #

  1. recency 是错误信号,且在 agent 负载里是反向信号,但没人能只靠 recency 之外的单一信号活下去。
  2. 五条独立证据线指向同一结论:调度器队列驱动的淘汰把命中率从 LRU 的 58% 提到 86%,并把命中从

    慢层挪到 DRAM [2403.19708]

    定长 SSM 状态下 LRU 会系统性错排条目 [2411.19379];生产数据显示高频块可能

    早已死亡,Frequency 项必须删掉 [2506.02634];循环工作流里"最久未用"恰好

    等于"下一步要用"[2507.07400]

    而按任务语义分级比单队列 LRU 吞吐高 14.3%、miss 低 15.1%

    [2511.01633]。同时它们都保留了 recency 作为兜底分量或级内排序

    [2511.01633]

  3. 准入与淘汰是两个独立的策略决策,且准入常常更值钱。 在同样使用 LRU 淘汰的对照下,仅
  4. 靠准入策略就带来 4.5×/7.3×/34.4× 的命中率提升,淘汰策略再叠加 45.6%/19.0%/219.7%

    [2411.19379]。这条与"复用不能只看写入侧"在合约工作里被独立

    重述:写入不准入(write no-admit)成功阻止了体量型复用,但常驻条目照样被在飞请求挤死,

    因为二者是两个独立的资源操作 [2605.24259]

  5. 复用决策正在离开引擎。 外置缓存层把 KV 变成引擎无关的可搬运数据结构并给出管理面 API
  6. [2510.09665];路由器把前缀索引复制到引擎之外

    [ZhaiFeiyue-mori-scheduler];应用层把 DAG 结构交给服务端

    [2405.19888],也可以把工作流元数据直接注入 HTTP 请求

    [2507.07400];调度前端甚至可以按 true-FLOPs 主动制造前缀聚集而不是等它

    发生 [2605.02960]。四条路线都承认单个引擎看不全复用机会。

  7. 精确复用永远优先,近似只在精确不可得时启用。 编译期缓存只对确定性算子生效以保证
  8. bit-exact 输出 [2603.16104];跨模型恒等由冻结参数保证而不是

    近似 [2603.13281];近似方案自己也内置了失败即回退稠密 prefill 的路径

    [2510.12872]。最新的跨参数集近似是这条共识的唯一例外,而且是缺口

    而非反例:它既是近似的、又没有任何请求级门控,是本簇里唯一的这种组合

    [2608.03893]

    分歧 #

    分歧 1 — 未来复用应该从统计里猜还是从结构里读。 生产画像证明按"类型×轮数"拟合的复用时间

    分布跨相似时段、跨天稳定,可离线预测 [2506.02634]

    工作流侧的路线则明确拒绝一切基于历史的信号,理由是在 agent 负载里过去访问是随机的、未来顺序

    由 DAG 给出 [2507.07400],而这条判断被独立复述为

    [2506.02634]

    矛盾根源不是谁对谁错,而是负载可观测性不同:应用把 DAG 暴露给后端时未来是"已知的",

    云 API/chatbot 场景后端看不到应用逻辑只能从统计规律里猜。两者在各自负载下都自洽,且失效

    模式互补——统计路线在类别信息稀薄时退化回 LRU,结构路线在运行时动态生成分支时退化为启发式

    [2507.07400]

    分歧 2 — 到底需要多大缓存容量,以及加一层 CPU 缓存是否总是有益。 分层存储路线的立论是容量

    是硬约束:仅 HBM 命中率约 0%,加 DRAM 也只有 1.7–19.1%,加 SSD 才跳到 71–90%

    [2403.19708];SSD 直驱路线更进一步把 100 TB 级容量当作前提

    [2605.03375]。生产画像给出部分反例:GQA 模型在纯 API 负载下所需缓存甚至

    小于预留 HBM,纯 GPU 缓存即够,可以省掉 CPU-RDMA-SSD 层级 [2506.02634]

    根源是模型架构 × 负载 × 卡型三重差异:反例被严格限定在 GQA + to-B + 大显存实例,画像作者

    自己承认 MHA 模型仍需巨量缓存

    [2506.02634]。新增的第三个立场把这条分歧

    推得更远:CPU 二级缓存不只是"可能不需要",在特定 regime 下它是负收益的——反应式回载在高

    并发下把吞吐压到无 CPU 层基线的 0.57 倍

    [2507.07400]

    而且这套方案自己假设 CPU 侧永远装得下所有被驱逐的 KV、没有给 CPU 层的淘汰策略

    [2507.07400]。实际后果是:"要不要建分层缓存"在 2026 年仍然是

    一个必须按负载单独回答的问题,而且答错的方向可能是倒退而不只是浪费。

    分歧 3 — 命中率是不是目标函数。 把命中率当目标是本主题的默认假设,radix 调度的最优性

    定理直接以命中率为目标 [2312.07104]。跨区路由给出了直接反例:某区有 15%

    命中但 TTFT 378 ms,另一区 0% 命中但 281 ms——追逐 overlap 反而更慢

    [2602.11688]。合约工作从另一侧给出反例:只报命中率会掩盖形状问题,某策略

    保留了最多的 raw token(1104 个)但阈值化后的可用价值为 0,因为碎片没有构成前导连续前缀

    [2605.24259]。第三个反例来自跨参数集复用:

    它的复用率不低(困惑度证明信息确实转移了),但差值换算到正确基线后收益为负

    [2608.03893]。三条合起来说明命中率是一个

    代理指标,且在跨区、高压、跨参数集三种情形下都会与真实目标脱钩。

    分歧 4 — 复用与压缩/剪枝是叠加还是互斥。 传输压缩明确声称与 token 丢弃类方法正交可叠加,

    并实测在其之上再降 3.3–4.2 倍 [2310.07240];跨轮剪枝则揭示这条叠加性

    布局层是不成立的:标准压实会搬移存活的 KV 行,破坏 radix 缓存赖以匹配的前缀身份,

    所以此前的剪枝方案不得不关掉前缀缓存,命中率塌到 0–3%

    [2606.09916]。解法是把"保留什么"和"怎么摆放"分开,用槽位重定向到死槽位

    代替压实,从而把前缀命中率恢复到 20.7% [2606.09916]。结论是:叠加性成立,

    但只在有人显式设计了别名安全的释放条件之后才成立

    [2606.09916]

    分歧 5 — 前缀索引应该用什么键,索引该有多精确,以及键里要不要编码出处。 引擎内用 token id

    序列做 radix 键 [sgl-project-sglang];一个生产

    路由器刻意用原始字符而不是 token id,为的是把分词延迟移出路由热路径,代价是近似

    [vllm-project-router]

    另一个路由器走相反方向,为 4 种引擎复制 5 种 block hash 算法以做到逐位精确匹配,并明确指出

    跨引擎的 hash 命名空间必须隔离以避免静默的错误命中

    [ZhaiFeiyue-mori-scheduler]。跨区路由则第三次给出不同答案:

    它的前缀 trie 是刻意的轻量近似,只用于快速路由决策而不是精确命中计算

    [2602.11688]跨参数集复用把这条分歧升级成了正确性问题

    映射得到的缓存与 target 自己算出的缓存 token 相同、数值不同,一旦写入 token 键索引,后续本来

    享有精确复用的同前缀请求会静默命中一份近似缓存,而三方(引擎、路由器、映射方法)都没有

    "这份 KV 由谁产生、保真度如何"的字段

    [2608.03893]

    现有语料里最接近的机制是按引擎隔离 hash 命名空间

    [ZhaiFeiyue-mori-scheduler] 与解码后验证再提交

    [2510.12872],前者按引擎而非按产出模型或保真度隔离,后者只

    守自己的 anchor 池、不守别人的前缀树。

    分歧 6 — 跨模型复用的正确抽象层。 两篇训练时保证路线的工作在推理路径上直接对立:一篇让

    冻结编码器与解码器在 decode 阶段并行运行、通过 query 拼接共享一次 GQA 读取,付出 2× decode

    算力换取"ground-truth KV" [2603.13281];另一篇声称 decode

    阶段无需编码器并行 [2602.12029]。两者报告的精度相当,这**暗示编码器并行

    可能是过度设计** [2603.13281]。这条分歧至今没有 head-to-head

    实验裁决,而且前者的 2× decode 开销从未被单独量化

    [2603.13281]。第三个立场现在出现了,

    它连"要不要动模型"都否定:只要能对两侧做只读白盒访问,闭式换算就不改任何权重

    [2608.03893]。三者的可行域由访问权限而不是精度划分:能改 decode 模块时选训练

    路线,只能读时选换算路线。

    分歧 7 — 跨模型复用该拿谁做分母。这是最新出现、也是后果最严重的一条。 恒等路线的分母是

    "如果你拒绝共享,你会部署的那个东西"(全量微调)[2602.12029];换算路线的分母

    是 target 自己独立运行的成绩 [2608.03893]

    问题在于 cascading / routing 场景下真实的对照是"不切换,继续用手上的小模型",而按这个分母算,

    四对最好的组合五项均值全部为负($-0.43$ 到 $-11.92$ pp),退化集中在 5-shot MMLU 与 8-shot CoT

    GSM8K,且随对子变远而放大 [2608.03893]

    换成路由文献的度量,收益落在"本来不该升级"的子群上,而在"必须升级"的子群上是负的

    [2608.03893]

    矛盾根源是"为什么切换"没有被区分:如果切换由质量驱动(cascading),双端点分母是唯一正确的;

    如果切换是被迫的(容量故障转移、配额、模型下线、灰度),"继续用小模型"不是选项,target

    standalone 就是正确分母,而这个场景没有任何一篇路由工作覆盖

    [2608.03893]。这条分歧可以廉价地关闭:原始数据已经在附录里,只差一次相减

    [2608.03893]

    分歧 8 — 复用单元应该多粗,以及优先级应该离散还是连续。 机制原点及其全部路由派生都把

    token 级最长共享前缀当作复用单元 [2312.07104];图推理负载上的结论相反——

    前缀匹配本身是错的抽象,把单元抬到检索单元(节点 + top-k 邻居)才是解法

    [2511.01633]。同一工作把优先级做成四个离散级 + 级内 LRU,而批评意见指出

    "重要性"实际是连续谱,两个不同查询的中间结果复用概率不同却被归到同一级,高并发下误驱逐仍会

    发生 [2511.01633]。这条与分歧 1 交叉:结构信号

    给出的是(下一步距离),统计信号给出的是概率,语义分级给出的是类别,三者都在

    逼近同一个连续效用,但没有一个把它写出来——见 §7 挑战 3。


    7. Open challenges (根本性困难) #

    挑战 1 — 不可回滚状态下的部分复用,可能根本不存在;工程债已部分偿付,代数限制没有。 这不是

    "没人做",而是状态代数本身的限制:原地更新的定长状态无法表示自己的任意前缀,只能在精确匹配点上

    命中 [2411.19379]。当前唯一的应对是选点检查——只在分支点和最后

    解码 token 处物化状态 [2411.19379]——本质是用"猜哪些前缀将来会被用"

    换取"任意前缀都能用"。过去一年发生的变化只在机制侧:已经有引擎用一棵树同时管 KV 页与 Mamba

    状态、用多个 cache group 分别管理页生命周期 [tokenspeed]

    所以"要不要两套缓存实现"这个工程问题不再是障碍。但"定长状态能否被切成自己的前缀"没有任何进展。

    要真正解决需要模型侧提供可回滚或可组合的状态表示,即 model 与 framework 的联合改动。难度视野:

    与混合架构是否成为长上下文默认选择绑定,2–5 年内不会有纯系统侧解法。

    挑战 2 — 复用状态没有"出处"与"保真度"这两个字段,而现在已经存在会污染它们的写入方。 本主题

    每一个索引都只按内容寻址:token id 序列

    [sgl-project-sglang]、原始字符

    [vllm-project-router]、引擎

    专属 block hash [ZhaiFeiyue-mori-scheduler]、轻量 hash

    trie [2602.11688]。这在"生产者 = 消费者且复用精确"的年代是完备的,

    现在不是了:跨参数集映射产出的缓存与真值 token 相同、数值不同,写进树里之后无法与精确条目区分

    [2608.03893]

    为什么这难而不只是"没人做":三个必要条件分别落在三方且互不知情——引擎需要在节点 schema 上加

    产出方与保真度、并让淘汰优先丢近似块(现有节点上只有管驱逐安全的引用计数

    [2312.07104]);近似方法需要提供一个能在请求级判定的门控,而

    它唯一的筛选标量要求 target 的真值 attention 权重,也就是转移本来要省掉的那次前向,原理上做不到

    [2608.03893]

    路由器需要在只读、轻量的路由平面上多知道一个维度,而整条文献都在刻意让路由状态保持便宜

    [2602.11688]。现有部分尝试都不够:按引擎隔离命名空间只防跨引擎

    错撞、不防跨模型 [ZhaiFeiyue-mori-scheduler];解码后验证再提交只

    保护近似方法自己的 anchor 池 [2510.12872];把缓存资源安全提到编译期

    的 13 态 FSM 证明了"正确性可以做成类型问题",但它守的是别名与重复释放,不是数值保真度

    [tokenspeed][tokenspeed];合约层

    定义了常驻块丢失的语义,但没有定义"命中了一份不该命中的块"这种结果

    [2605.24259]。难度视野:schema 与淘汰侧的改动 6–12 个月可做(已有把节点

    schema 扩成"状态 + KV"并换掉打分函数的先例 [2411.19379]),请求级保真度门控

    没有已知路线。

    挑战 3 — 缓存条目的价值没有公共货币,而候选货币数量还在增加。 现有六种效用度量互不可换算:

    FLOP-per-byte [2411.19379]、按类别拟合的复用概率 [2506.02634]

    折算成毫秒的 overlap [2602.11688]、阈值化后的可物化价值

    [2605.24259]、工作流拓扑给出的

    steps-to-execution [2507.07400]、以及扣掉前缀共享折扣的 true-FLOPs

    [2605.02960]。它们各自在自己的

    瓶颈假设下正确,但没有一个能同时表达"省下多少算力""省下多少毫秒""占了多少稀缺容量""在这个拓扑里

    搬过来要多久""命中它会不会降质量"。缺乏公共货币的直接后果是:跨层的联合决策(该压缩、该下沉、

    该淘汰、该路由到别处、还是该重算)现在只能靠人工调权重,甚至只能靠离散分级

    [2511.01633]。难度视野:需要一个把计算、带宽、容量、

    拓扑、质量统一到同一目标的性能模型,这类模型在本主题里全部缺席——外置缓存层的三个关键

    trade-off 都是实证断言而无闭式解

    [2510.09665],混合模型的效用权重靠网格搜索

    [2411.19379],而闭式换算方法自己

    承认最缺的正是"给定重构侧标量,下游指标最多退化多少"这个界 [2608.03893]

    质量项的缺席是新的:到目前为止每一个路由代价模型都隐含假设复用是质量中性的,这在精确时代为真、

    在近似时代为假 [2608.03893]

    挑战 4 — 常驻复用状态与在飞状态的冲突是物理不可行性,不是可优化项。 当被保护的常驻 KV

    加上在飞 KV 超过物理池容量时,系统在物理上无法同时满足二者,只能做显式取舍

    [2605.24259]。现有运行时暴露的都是保留策略(优先级、TTL、卸载、

    radix 缓存),没有一个定义了"被接受的常驻声明被破坏时必须做什么"的合约,于是常驻前缀被

    当成普通缓存受害者静默驱逐,外部观察者无法区分正常淘汰与违约

    [2605.24259]。硬保护只是把失败模式从静默的常驻损失换成显式的在飞拒绝,

    并不能让 130 个块装进 80 块的池子 [2605.24259]。语义分级

    路线证明了"用级别代替单队列"确实能把最该留的那类留住

    [2511.01633],但级别是分类不是合约,级内

    仍会误驱逐 [2511.01633]。需要 framework 定义合约、

    agent 侧声明真实的复用意图、部署侧监控违约三方协同。

    挑战 5 — 跨模型复用把 serving 优化变成了训练承诺或按有序对增长的资产,两条都不便宜。 让不同

    模型产出同一份 KV 的两条路线都要求所有任务模型从同一个冻结底座开始训练,无法复用已有的全量微调

    模型,也无法混合不同底座 [2603.13281]。这在快速迭代的 agent 流水线里是

    真实的总拥有成本问题:每次换解码器都要重训,而底座更新时是否要全量重训至今没有工作讨论

    [2602.12029]。免训练路线换掉了这笔钱,但换成了 $P(P-1)$ 个有序对资产,每个

    1.01–3.36 B 参数、4–12 GB [2608.03893],且真正的隐藏变量是驻留概率——它随车队

    规模单调恶化,没有任何工作测过

    [2608.03893]

    一旦承认梯度反正要付,规模律就给出了答案而不是精度:消费者侧适配 $O(P)$ 支配翻译器侧资产

    $O(P^2)$ [2608.03893]。这不是工程债,而是"跨参数集复用的成本必须记在某个不随

    前缀长度缩放的科目上"这一结构事实;除非有人找到既免训练又不按对索引的对齐方式,这条线的适用面

    就被锁死在模型阵容稳定或切换非质量驱动的部署里 [2608.03893]

    挑战 6 — 真实复用规律的可观测性掌握在极少数人手里。 唯一同时具备时间戳、请求类型、用户

    ID、多轮父链的生产 trace 只有大云厂商拥有,缺了它策略里的复用概率无从标定,公式退化回 LRU

    [2506.02634]。更麻烦的是这份数据本身的外部效度有限:单厂商

    一周快照,reasoning 类新负载未覆盖,而 agent 负载的复用结构与之完全不同

    [2506.02634]。工作流侧的替代方案也没有解决这件事,它用的是合成负载,headline

    数字出现在 8192 固定前缀这种极端配置上,未用真实 agent trace 验证

    [2507.07400]。于是整个主题的

    "真实命中率是多少"这个最基础的问题,答案既不可复现也可能已经过期。难度视野:这是社区治理问题

    而非技术问题,短期内无解。

    挑战 7 — 共享前缀缓存的公平性与隔离尚无设计。 画像工作自己指出恶意客户端可以用长相同

    前缀垄断前缀缓存,并把公平性划为正交问题 [2506.02634];跨轮剪枝方案不得不

    专门设计会话键的解析优先级来避免多租户之间的意图互相污染

    [2606.09916];生产路由器的令牌桶是每路由器而非每用户的,多租户

    公平必须靠外部网关 [vllm-project-router];而工作流感知的淘汰只用 client_id

    避免 agent 名字冲突、跨工作流共享节点一律取最保守的优先级,这保证了不误删但也意味着一个租户可以

    用高优先级声明拖住共享节点 [2507.07400]。四处独立证据

    说明"共享"这件事的安全与公平后果被系统性地推给了别人。


    8. 成熟度判断 #

    核心机制:生产就绪。 radix 前缀缓存已在 40 万块以上 GPU 的生产环境部署,且是若干强化学习

    后训练栈的默认推理后端 [sgl-project-sglang]。引擎无关的外置缓存层在连接器

    API 上游化后约半年内被嵌入五套主流部署栈,支持 8 种以上存储后端与 4 类处理器

    [2510.09665]。缓存亲和路由也已

    产品化:一个生产路由器提供 6 种策略并以 radix 树亲和为头牌

    [vllm-project-router],另一个在 2P+2D 实测把吞吐从

    23.7 req/s 提到 91.6 req/s [ZhaiFeiyue-mori-scheduler]

    混合架构的机制侧也已经有引擎实现把 KV 页与 SSM 状态收进同一棵树

    [tokenspeed],但那个引擎自身是 preview 状态、多个核心 PR

    未合并 [tokenspeed]

    策略层:迁移中,而且迁移速度取决于负载类型而非技术成熟度。 从 LRU 到 workload-aware 的迁移

    已有明确证据链,且落地成本极低——单实例替换淘汰函数、每次 79 微秒、占调度开销 1.2%

    [2506.02634]。但在云 API 负载上净收益很薄:相对最优基线仅 +1.5–3.9% 命中,

    真正有效的区间只有"多类型 + 容量受限" [2506.02634]。在 agent 负载上同一迁移的

    收益完全不同量级:工作流感知的淘汰 + 预取相对分层缓存基线 1.83–2.19 倍

    [2507.07400]

    语义分级 + 单元上抬把吞吐从 0.6–2.2 QPS 抬到 6.8–9.1 QPS [2511.01633]

    但这两条 agent 侧证据的采纳成熟度都远低于其数字:一个未合入上游主线也未公开代码

    [2507.07400],另一个是未开源的 vLLM 分支、核心 patch 未公开

    [2511.01633]。所以策略层的正确读法是:**技术上已被证明、在 agent 负载上

    收益很大、但可复现的落地物几乎不存在**。

    路由层:从"命中率优先"迁向"多目标",且已有上游实现。 把前缀命中折成 true-FLOPs 记账、让

    负载均衡成为饱和副产品的方案已经落在一个主流引擎版本上、声称单 flag 启用

    [2605.02960],这是本主题里少见的"策略层直接进上游"的例子;

    它的可移植性仍未验证 [2605.02960]。与此同时路由层开始承认前缀亲和不是

    唯一目标,需要与专家局部性、负载、网络延迟共同求解 [2607.00466]

    跨模型与跨上下文复用:研究前沿,采用证据薄弱,且新成员把这一支的验收标准问题暴露得更清楚。

    训练时保证范式的两篇代表都未公开代码,其中一篇是零外部引用的预印本

    [2602.12029],另一篇缺少与其宣称的直接前驱的正面对比

    [2603.13281]。近似跨上下文复用同样未公开实现

    [2510.12872]。编译期工作流优化的源码只有 demo 级,且配套版本号

    与现实不符,可复现性存疑 [2603.16104]。跨参数集换算也未公开实现

    [2608.03893],而它最站得住的贡献不是方法而是量具——一套子空间

    感知的诊断,以及"重构指标不预测可转移性"这条负面结论;后者在邻居那里被独立撞见过一次,因此

    可信度高于单篇 [2608.03893]。整支闭源这件事本身是一条结论:一个每篇结论都依赖

    "近似到什么程度还能用"的子领域,恰好整体不可复现 [2608.03893]

    混合模型前缀缓存:押注型前沿,但工程侧已被抢先落地。 策略侧的开源实现带完整制品附录,

    可复现性强于同簇多数工作 [2411.19379]

    而它的价值与混合架构是否成为长上下文默认选择绑定——收益随 SSM 层比例和状态维度单调增长

    [2411.19379]。这条押注在 2026 年得到了一个间接确认:已经有引擎为

    attention+Mamba 混合模型内建了统一的前缀缓存与多 cache group

    [tokenspeed],也就是说架构趋势正在把机制侧的投入变成必需品,即使策略

    侧的最优解还没定。

    趋势方向:加速,重心继续上移,并且开始长出"正确性"这一维。 四个信号指向同一判断。第一,

    引擎内的低垂果实已被采摘完,新工作全部在引擎之上(路由、工作流、合约)或之下(存储路径)

    [2603.16104]。第二,出现了"元层"工作——为复用定义合约与一致性测试而不是

    再提一个策略 [2605.24259],这通常是一个方向开始收敛的标志。

    第三,路由层开始承认前缀亲和不是唯一目标 [2607.00466],甚至开始出现把

    复用量显式设为零的配置 [2605.02960]。第四,也是新出现的:缓存的正确性

    第一次成为独立议题——一侧是把资源安全提到编译期的类型系统尝试

    [tokenspeed],另一侧是近似写入方带来的、尚无任何机制

    应对的保真度污染

    [2608.03893]

    一个方向开始讨论"命中的东西对不对"而不只是"命中率多高",通常意味着它已经度过了性能红利期。


    9. 邻接 topic #

    • KV-cache-offloading — 边界最模糊的一个。分层存储、块级搬运、GPU 直驱 SSD 属于那边,
    • 但它们改变的是本主题的损益点:加载与重算的交叉点在 32 Gbps 下要 256K token 才翻转

      [2510.09665],而 GPU 直驱路径把交叉点推到 98.3% 命中率

      [2605.03375]建议的划界:介质与带宽机制归那边,"要不要为了复用

      而下沉、下沉哪一块"归这边。CacheGen 与 Tutti 两篇天然骑墙——前者的传输压缩服务于复用

      [2310.07240],后者的淘汰/复用策略直接沿用引擎的前缀缓存

      [2605.03375]。新增的骑墙案例把这条界线画得更清楚:主动预取本身是搬运

      优化,但它的触发信号来自工作流拓扑,也就是本主题的结构信号

      [2507.07400]

    • cluster-llm-deployment — 跨区域路由与 PD 分离下的 KV 交接属于两边。判据是目标函数:
    • 当 cache overlap 只是代价模型里的一项、与 RTT 和排队并列时

      [2602.11688],重心已经移到部署那边。同理,把前缀路由与 MoE 专家权重流式化

      绑成一个饱和条件的设计,主体是 MoE 并行策略、前缀复用只是它的记账口径

      [2605.02960],因此它在本主题里是边缘成员而非核心成员。

    • agent-scheduling / agent-context-lifecycle — 跨轮意图剪枝与跨模型服务把自己同时挂在
    • agent 侧的主题上 [2606.09916]。边界判据:

      决定"上下文里保留什么内容"是那边,决定"已算出的状态怎么被再次使用"是这边;两者在槽位

      布局这一层真实纠缠 [2606.09916]。这条界线现在多了一个更硬的骑墙者:把

      agent 拆分方式与缓存优先级边界设计成同一件事的工作,其精度收益(R-L +38%)属于那边、其缓存

      收益(命中率 +17.7%)属于这边,两者是同一次设计选择的两个投影

      [2511.01633]建议:凡是"改 agent 结构以改善复用"的工作在两边

      都登记,但效用主张必须分开陈述。

    • model-routing / cost-quality cascading — 这是本次新增的邻接关系,而且是本主题第一次与
    • "何时切换模型"这个决策直接接壤。跨参数集复用的动机完全来自那边(cascading 与会话中途切换)

      [2608.03893],而它的正确验收标准也只能由那边

      提供(双端点分母)

      [2608.03893]

      建议的划界:"该不该切换"归那边,"切换之后已算的状态还能不能用"归这边;但本主题在报告

      跨模型复用收益时必须采用那边的度量,否则会系统性地把收益记在错误的子群上。

    • speculative-decoding — 目前有两处交点:冻结的共享编码器使草稿模型可以零成本读到同一份
    • KV,验证步不必重算 [2603.13281];以及小 batch、长前缀的投机解码 decode

      形态本身就是前缀复用最受益的 regime [tokenspeed]。这条线仍然

      太细,不建议合并。

    • 轨迹级/语义级复用 — 复用 agent 的执行轨迹或语义结果,与复用 KV 状态是不同对象
    • 前者绕过的是整次调用,后者绕过的是 prefill。二者在批量工作流里会同时出现——按确定性算子

      做整算子级缓存与按前缀做 KV 复用是同一系统里的两层

      [2603.16104]——但语义等价性判定与 KV 位级恒等是完全不同的

      正确性论证,应保持分离。检索结果的映射缓存是同一类东西的第三个例子

      [2511.01633]

    • 关于拆分的修正判断 — 上一版曾建议:"如果跨模型 KV 恒等这条线再增加 2–3 个条目,它足以
    • 独立成题"。现在这条线有三个成员,但不应该按原设想拆分,因为第三个成员打破了它的同质性:

      前两个用训练时约束换恒等,因此准入条件是"能否重训"[2603.13281]

      第三个免训练但只给近似,因此准入条件是"能否只读白盒访问 + 这对模型是否通过对级筛选"

      [2608.03893]修正建议:不按"跨模型"拆,按保真度拆——把"精确复用(含

      训练时恒等)"与"近似复用(含跨上下文与跨参数集)"分成两条,因为这两条的验收标准(命中率与

      容量 vs 质量门控与出处)几乎不共享任何东西

      [2608.03893]

      在真的拆分之前,本文档应把"保真度"当作与命中率、容量并列的第三根轴来组织。


    10. 参考 #

    EntityCategoriesRole in topicKey contribution
    [2312.07104] · [2312.07104]framework机制基线radix 树 + LRU + 最长共享前缀优先调度,并证明该贪心等价离线最优 DFS;引擎内复用的原点
    [2411.19379] · [2411.19379]framework范式转折不可回滚状态下的"全有或全无"复用;把重心从淘汰移到准入,效用从 recency 换成 FLOP-per-byte
    [2506.02634] · [2506.02634]framework经验基准生产 trace 画像:理想命中率 62%/54%、单轮支配、寿命极短;据此删掉 Frequency 项
    [2403.19708] · [2403.19708]framework未来信号先驱用调度器队列当预言机驱动预取/淘汰;把 99.6% 以上命中挪进 DRAM;解耦位置编码使截断后仍可复用
    [2507.07400] · [2507.07400]framework结构性未来落地工作流拓扑 → steps-to-execution,下沉到 radix 节点、共享节点取最小值;主动预取 + 四态状态感知调度;并实测反应式回载可反向劣化到基线 0.57 倍
    [2511.01633] · [2511.01633]framework复用单元与语义分级把复用单元从碎片事实抬到 vertex chunk(+17.7% 命中);agent 边界即缓存优先级边界,四级优先级取代单队列 LRU
    [2510.09665] · [2510.09665]framework外置化引擎无关的 KV 层 + 上游化连接器 API + 管理面;块级替代页级搬运把带宽从 88 提到 400 Gbps
    [2310.07240] · [2310.07240]framework传输侧代价放弃张量形状约束,把 KV 当视频编码,体积降 3.5–4.3×;带宽不足时降级回文本重算
    [2605.24259] · [2605.24259]framework元层合约常驻/在飞/未来准入三资源分解与可行性不等式;把静默的常驻损失变成可归因的显式拒绝
    [2605.03375] · [2605.03375]framework复用经济性把 CPU 移出 GPU↔SSD 的数据与控制路径,把 I/O 气泡超过计算的交叉点推到 98.3% 命中率
    [2602.12029] · [2602.12029]framework跨模型恒等冻结共享 prefill 模块 + cache-conditioned 微调;内存主导项对模型数近似不敏感;分母取"拒绝共享时会部署的东西"
    [2603.13281] · [2603.13281]framework跨模型恒等冻结逻辑编码器保证 KV 跨模型逐位恒等;消除逐层敏感性选择
    [2405.19888] · [2405.19888]framework结构信号先驱Semantic Variable 把 prompt 结构与请求 DAG 暴露给服务端,使运行时生成的上下文也能共享
    [2607.00466] · [2607.00466]framework竞争性局部性证明前缀亲和不是路由层唯一目标;专家签名做成与 KV block 同索引以在前缀命中时保持精确
    [2605.02960] · [2605.02960]framework复用作为调度决策前缀感知路由 + true-FLOPs 计价(1 次前缀 + N 次后缀),均衡成为饱和副产品;并提供本主题唯一把复用量显式设为零的配置
    [tokenspeed] · [tokenspeed]framework机制统一与编译期安全单棵 radix 树同时管 KV 页与 Mamba 状态、多 cache group 区分滑窗/全历史层;13 态 FSM + RAII 把缓存资源安全提到编译期;retraction 取代重新 prefill
    [2509.02121] · [2509.02121]agent计划级复用把整批同模板工作流合并成一个计划,复用写成代价模型里的折扣系数并求解放置
    [2603.16104] · [2603.16104]agent编译期精确复用模板化 radix 树同时编码前缀层级与算子依赖;命中率比在线最长前缀匹配高 32.9 个百分点
    [2510.12872] · [2510.12872]agent近似跨上下文复用RoPE 对齐 + anchor 池估计跨前缀 KV 偏移,免训练;失败即回退稠密 prefill;解码后验证再提交以防污染 anchor 池
    [2606.09916] · [2606.09916]agent复用×剪枝兼容用死槽位重定向替代压实,保住前缀身份;把剪枝下的前缀命中率从 0–3% 恢复到 20.7%
    [2602.11688] · [2602.11688]algorithm目标函数重估把 overlap 折算成毫秒与 RTT 相加;给出"高命中反而更慢"的直接反例;路由平面刻意只保留轻量近似 trie
    [2608.03893] · [2608.03893]algorithm跨参数集近似复用闭式 per-head ridge 让接收方直接从发送方 KV 解码,免训练;四对保住 73–98%、两对崩到 42–44%;三部件里只有跨层选源有实测正贡献;引入按有序模型对索引的资产与保真度污染两笔新账
    [sgl-project-sglang]code生产实现radix 缓存按子树粒度淘汰 + 分层卸载;节点上只有管驱逐安全的引用计数、无出处字段;40 万块以上 GPU 的部署证据
    [vllm-project-router]code路由实现字符级并发 radix 树 + 两段式亲和/负载切换,避开路由热路径上的分词延迟
    [ZhaiFeiyue-mori-scheduler]code路由实现复制 4 种引擎的 5 种 block hash 算法做逐位精确匹配 + 跨节点 KV 索引 + 分离的 prefill/decode 策略链;用命名空间隔离防止跨引擎静默错命中