细粒度切片复用 KV 缓存,CoinRAG 比 TurboRAG 涨 5.3% F1 且上下文更短

CoinRAG: Contextualized Information Nugget KV Cache Reuse for Long-Context RAG

Gyuwan Kim, Cheoneum Park, Tao Yang

cs.CL, cs.AI, cs.IR, cs.LG

2026-08-08

CoinRAG 把检索片段切成细粒度「金块」并复用其预存 KV 缓存,在 LongBench 多跳问答上比块级复用的 TurboRAG 高 5.3% F1,上下文更短、首 token 延迟仍压在 100 毫秒内。

这篇在解决什么

检索增强生成(RAG,Retrieval-Augmented Generation)给大模型喂入外部知识,但检索回来的上下文动辄几千 token,光是在 prefill 阶段把这些文本编码一遍就要吃掉大量算力和时间。对一个交互式问答系统来说,首 token 延迟(TTFT)一旦超过 100 毫秒,用户就会觉得卡。

此前缩短这段延迟的主流办法是「块级 KV 缓存复用」:把每个文档块离线预编码成 KV 缓存,在线查询时直接拼装这些缓存,跳过重新编码。TurboRAG、CacheBlend、KVLink 都走这条路子。问题出在粒度。一个 512 token 的块里,常常只有一小段和当前问题真正相关,其余全是冗余和噪声。带着这些噪声一起进解码器,既拖慢推理也压低准确率。

CoinRAG 想同时拿到两样东西:块级缓存复用带来的低延迟,和比块更细的相关性筛选。

方法

核心机制一句话:不直接复用整块,而是从块里切出「信息 nugget」(直译就是含金量高的短文本片段,平均十来个词),复用这些细粒度片段的 KV 缓存。

具体分四步:

有两个设计选择值得展开,因为它们决定了方法能不能成立。

第一,nugget 是从块缓存里「切」出来的,不是单独编码的。之前有些工作会把 nugget 当成孤立文本单独编码,这样就丢掉了它在整块上下文里的位置信息。CoinRAG 切出来的 KV,带着当初整块编码时的上下文接地,所以叫 contextualized。消融实验里,把 contextualized 换成 isolated 编码,三个数据集 F1 分别掉 6.3、4.9、3.9 个点。这是方法能在细粒度筛选的同时不掉准确率的关键。

第二,两阶段检索,而不是直接在整库上检索 nugget。直接在所有 nugget 上做相似度检索,候选太多、噪声太大;先检索块、再在块内筛 nugget,把搜索空间限制在和 query 相关的块里。这一步带来 9.6% 至 17.5% 的相对 F1 提升。位置对齐(RoPE 旋转)在 75 毫秒的紧预算下还能再涨 3.0% 至 8.5% 的 F1。

结果

在 LongBench 的三个多跳问答数据集上评测(HotpotQA、2WikiMQA、MuSiQue),底座是 Qwen2-7B-Instruct,检索器 BGE-M3。对照是标准 RAG、TurboRAG(块级复用)、CacheBlend(选择性重算)、KVLink(跨块注意力链接)。

在 P99 TTFT ≤ 100 毫秒的预算下:

方法HotpotQA2WikiMQAMuSiQue平均 F1平均 TTFT(ms)平均长度
Standard RAG40.128.521.029.974723
TurboRAG49.142.227.439.675855
KVLink49.038.726.838.2651117
CoinRAG51.442.431.441.765465

CoinRAG 平均 F1 41.7,比次优的 TurboRAG(39.6)高 5.3%(相对值),而延迟更低(65 对 75 毫秒),拼出的上下文更短(465 对 855 token,缩短 1.84 倍)。在准确率对延迟的二维平面上,它划出了一条新的 Pareto 前沿。

松开延迟限制后,差距还在:CoinRAG 平均 F1 42.7,对 TurboRAG 的 40.6(5.2%),上下文平均长度只有对手的 1/6.8(580 对 3955 token)。但把预算放到约 160 毫秒时,标准 RAG 和 TurboRAG 开始追上来,KVLink 也在 HotpotQA 上追平。CoinRAG 的优势集中在紧预算区间,预算一宽就趋于收敛。

为什么重要

对做交互式 RAG 服务的团队来说,100 毫秒以内的首 token 延迟是个硬指标,CoinRAG 在这个区间给出了目前最好的准确率/成本折中。上下文缩短 1.84 至 6.8 倍,不只是 prefill 更快,也意味着 KV 内存占用更小、后续解码更省,这些在多并发服务时直接换算成钱。

更可迁移的,是那个「从块缓存里切 contextualized nugget」的思路。它证明了一件事:可以拿到比块更细的相关性,又不付重新编码的代价,还能保住上下文接地。这个机制不限于多跳问答,任何「离线预算全文、在线只取片段」的场景都可能套用。

局限与存疑

论文自己列了几条,挑要紧的说:

还有一个存疑点不在论文的局限清单里:评测只在英文多跳问答上做,而且只用了一个 7B 底座。方法能不能泛化到中文、到更大的模型、到非问答的生成任务(比如摘要、代码补全),论文没给证据。

术语

原文与代码

相关论文

全部论文解读