RAG、长期对话记忆、工具型智能体,每次请求都要把一批检索来的块拼进上下文。组合千变万化,前缀缓存基本派不上用场,于是工程上流行「非前缀 KV 复用」:每个块独立编码一次存下键值,查询时把缓存拼接起来,省掉对整个检索上下文的 prefill。省钱是真的,但代价此前没人细算——arXiv 上的新论文(2611.06397)把这笔账算清了:丢掉的题,最多能到全部。
复用到底丢了多少
作者在 Qwen3-8B、Llama-3.1-8B-Instruct、Mistral-7B-Instruct-v0.2 三个模型上,用 LoCoMo(对话记忆)、NQ-Open 与 TriviaQA(开放域问答)、Gorilla(API 文档)四类数据集,共 12 个设置,只统计「完整 prefill 能答对、且必须依赖检索上下文」的题。结果:复用丢掉其中 19%-100%。
丢多少还取决于干扰块长什么样。周围放不相干的跨领域文本,损失仍在;换成同语料的无关块,12 个设置里 9 个显著变差;再换成与答案块相似的段落,六个问答设置全部进一步掉分,其中五个显著。此前工作里专门为「独立块编码」微调过的模型,在 NQ-Open 上仍丢 60%,且大部分损失同样来自相似块。论文里的直观例子:Qwen3-8B 完整 prefill 时答得对,复用同一批段落时,答案却被相似段落带偏,念出了相似段落里的女演员。
修补预算该给谁
现有修补方法分两派:token 级选择器(CacheBlend、EPIC、ProphetKV、CacheTune 等)挑少量散落 token 在线重算;SurroKV 这类则给块配固定代理前缀。这篇 36 页的论文问的问题很朴素:预算很小的时候,该修谁?
答案是答案块。其一,可修复的伤害分散在干扰块上,零星恢复几个干扰块几乎不涨分;其二,靶块本身很小,中位数只占整个上下文的 2.5%-3.3%,5% 预算就够重算。机制上作者称之为「上下文兼容性」:把靶块对着复用缓存重算,让它编码时「见过」周围的块,在测试的七个设置里全部优于直接插入它的完整 prefill KV(Holm 校正后四个显著)——尽管重算出的 KV 与完整 prefill KV 的中位相对距离仍有 0.23-0.30。起作用的不是逼近参考值,而是编码上下文的一致。
部署时不知道答案块怎么办
问题注意力在复用缓存上挑靶块,最多只命中 18.8%(另一检测器 12.5%),而求和注意力 58%-100% 盯着紧挨问题的最后一块——拿注意力选块并不可靠;检索器把靶块排第一的比例也只有 47%-64%。作者的部署方案:把检索器 top 块挪到紧邻问题的位置再重算,同样 5% 预算下,九个问答与 API 文档设置里六个显著优于 InfoFlow 式重排序;若已知靶块,5% 预算重算它在九个设置中全部胜过 token 级选择器。
边界:对话记忆不买账
LoCoMo 上结论不迁移:整个会话块塞进 5% 预算只覆盖 11%-21% 的题(10% 预算下 89%-94%),重算会话块相对 token 级选择器的变化是 -0.04 到 +0.03,从不显著。块大到预算装不下,「盯靶块」这笔账就不成立。
所以呢
这篇论文把缓存修补从手艺活变成了预算分配问题:先测检索器的 top1 命中率,再决定修补策略;修补时优先「对着复用缓存重算」,而不是抄完整计算的 KV。对做检索推理优化的人,不妨反问一句:你省下的 prefill 算力,有没有拿丢掉的题数对过账?(论文:https://arxiv.org/abs/2611.06397)