KV Cache 之上的跨请求复用层:命中时跳过 Prefill,TTFT 骤降、吞吐飙升、账单打骨折
大模型推理里有一条「几乎免费的午餐」:如果两个请求的输入前缀相同,前缀部分的 KV 计算就完全可以复用,一次都不用重算。
这就是 Prefix Cache(前缀缓存)。它的收益立竿见影:
更难得的是:vLLM、SGLang 两大自部署引擎都把它做成了「默认或一行参数」的能力,服务商侧也不需要改代码——前提是你得按缓存友好的方式组织 Prompt。这篇文章一次讲透原理、实现、计费与最佳实践。
一句话:KV Cache 解决「单个请求内」的重复计算,Prefix Cache 解决「多个请求之间」的重复计算。
这就是前缀缓存的第一性原理:相同的 token 序列 → 相同的 KV → 算一次,人人共享。
请求到来
↓
在缓存索引中查找「最长公共前缀」(Longest Common Prefix)
↓
命中:直接加载已缓存前缀的 KV 张量,只计算后缀部分
→ Prefill 只算新增 token → 首 token 延迟(TTFT)大降
↓
未命中:正常 Prefill 全量计算,并把可复用的前缀写入缓存
→ 后续请求可以复用
注意:缓存与输出的内容无关,只与输入的 token 序列有关——所以它「不挑模型、不影响输出质量」,纯赚。
| 维度 | 收益 |
|---|---|
| 首 token 延迟(TTFT) | 命中后跳过前缀 Prefill,长前缀场景从秒级降到百毫秒级 |
| 吞吐 | RAG/多轮对话等场景实测吞吐提升最高 8 倍、整体性能最高 7 倍 |
| 计算/能耗 | 相同前缀只算一次,Prefill 计算量按重复度成比例下降 |
| 成本 | 服务商侧缓存命中 token 打折计费,最高 90% off |
自部署场景绕不开 vLLM 和 SGLang。两者都支持前缀缓存,但底层路线完全不同——这也是「选型」时最常被问的问题。
--enable-prefix-caching 开启radix_eviction_policy 切换为 LFU、SLRU 等| 维度 | vLLM APC | SGLang RadixAttention |
|---|---|---|
| 数据结构 | 固定 block + 哈希表(内容寻址) | 基数树(树形前缀索引) |
| 匹配粒度 | block(16 token) | 精确 token 级前缀 |
| 开启方式 | --enable-prefix-caching 参数 | 默认开启 |
| 淘汰策略 | LRU | LRU(可换 LFU/SLRU) |
| 优势 | 与 PagedAttention 显存管理天然融合 | 前缀匹配更精确,多轮对话/分支采样场景收益大 |
前缀缓存不止存在于自部署引擎,服务商把它封装成了 API 特性,用户直接用、按命中折扣付费:
| 服务商 | 机制 | 缓存读折扣 | 备注 |
|---|---|---|---|
| Anthropic | 显式 cache_control 断点 | 90% off(缓存写有 1.25x 溢价) | 命中 1.4 次即回本 |
| OpenAI | 自动缓存,无需配置 | 50% off | 无感、省心但不可控 |
| Google Gemini | 上下文缓存,最小 1 小时 TTL | 75% off | 长上下文场景收益大 |
| 火山方舟 | 显式缓存 / 隐式缓存 | 豆包系列命中价约输入价 10% | 另有缓存存储按小时计费 |
| 向量云 | 独享接入点 + 显式/隐式缓存 | 命中价 0.04 元/百万 tokens 起 | 接入点级缓存隔离,命中率更高 |
cached_token 计费(远低于 prompt_token 单价);未命中部分仍按原价;缓存存储按小时计费隐式缓存的命中率受共享链路干扰:请求被路由到不同实例、缓存池被其他租户挤占,都会导致命中率跳水。独享接入点保证你的请求始终落在同一组缓存实例上——前缀稳定、命中稳定,缓存红利才真正落袋。
缓存的是「输入的开头」。前缀越靠前、越稳定,命中率越高:
❌ 反例:动态变量放在开头
You are a helpful assistant. Current time: 2026-10-09 14:05:23 ...
✅ 正例:固定内容前置,动态内容后置
You are a helpful assistant. [长系统提示] ...
用户信息 / 时间戳 / 随机数都放到 Prompt 末尾
以 Anthropic 官方口径为例:缓存读 90% off、缓存写 1.25x 溢价——同一前缀被读 1.4 次即可回本,之后的每一次命中都是净赚。换算到自家业务:
假设 System Prompt 固定 2000 token,每天被调用 10 万次
未命中:每天为这段前缀支付 2000 × 100000 次的输入费
启用缓存(90% off 档):只有首次 + 每次命中的 10% 费用
→ 该前缀的输入成本约降一个数量级
自部署引擎(vLLM/SGLang)没有 token 单价,但显存和算力是钱:缓存命中让同量显存服务更多并发、让首字更快,等于用「缓存空间」换「算力与时间」。
--enable-prefix-caching,两行配置先拿到收益Q1:前缀缓存和 KV Cache 是一回事吗?
不是。KV Cache 解决单个请求内跨步的重复计算;前缀缓存解决多个请求之间相同前缀的重复计算,是 KV Cache 之上的复用层。
Q2:前缀缓存会改变模型输出吗?
不会。它复用的是「相同输入前缀必然相同」的中间结果,对输出结果无任何影响,纯优化。
Q3:vLLM 为什么缓存按 16 token 一个 block?
vLLM 的 KV 以固定 block 管理(配合 PagedAttention),哈希寻址以 block 为单位。好处是寻址简单、显存好管理,代价是前缀不足一个 block 时无法命中。
Q4:SGLang 的 RadixAttention 和 vLLM 的 APC 哪个好?
没有绝对好坏:SGLang 树形索引前缀匹配更精确,多轮对话、分支采样(self-consistency)场景收益大;vLLM 与 PagedAttention 显存体系天然融合、生态成熟。都支持 LRU 淘汰,实践差距主要在前缀组织的质量。
Q5:服务商的 Prompt Cache 和我自己部署的 Prefix Cache 冲突吗?
不冲突。服务商缓存发生在服务端推理引擎,你的应用代码无需感知;自部署时你同时拥有引擎缓存的控制权。两者都遵循「前缀越稳定越赚钱」的同一规律。
Q6:隐式缓存为什么不保证命中?
隐式缓存由系统自动管理:容量有限会淘汰、分布式路由可能把请求分到不同实例、多租户共享会互相挤占。需要确定性收益时用显式缓存或独享接入点。
Q7:命中率上不去,先改哪里?
先查「前缀稳定性」:动态变量是否在开头、System Prompt 是否频繁改版、RAG 排序是否稳定。命中率 <40% 时,换哪家服务商都救不了——先把前缀修稳,再谈折扣。
一句话总结:前缀缓存是「KV Cache 之上的复用层」:自部署有 vLLM/SGLang 两行配置,API 有服务商按折扣计费,收益由「前缀的稳定性」决定——相同的 token 序列,算一次,人人共享。
面向大模型应用落地的技术服务型企业,依托字节跳动火山方舟能力,为合作方提供低折扣模型 Token、可独立部署的运营支撑平台及全链路运营支持。
火山方舟官方 API 与官方 Key 直连 · 向量云 · 大模型服务前缀缓存
A. 不是。KV Cache 解决单个请求内跨步的重复计算(让第 n 个 token 只做增量计算,避免 O(n²) 重算);前缀缓存解决多个请求之间相同前缀的重复计算,是 KV Cache 之上的复用层。两者的关系可以记成:KV Cache 是引擎内部的事,Prefix Cache 是跨请求的事。
A. 不会。它复用的是「相同输入前缀必然相同」的中间结果(KV 张量),对输出结果无任何影响,是纯优化。这也是它与语义缓存的最大区别——前缀缓存按 token 序列精确匹配,语义缓存按语义近似匹配。
A. vLLM 的 KV 以固定 block 管理(配合 PagedAttention 分页显存),哈希寻址以 block 为单位,每个 block 的哈希由父块哈希等链式信息决定。好处是寻址简单、显存好管理、命中可挂载物理块;代价是前缀不足一个 block 时无法命中——前缀过短的请求等于没有缓存。
A. 没有绝对好坏:SGLang 用基数树组织前缀,匹配精确到 token 级,多轮对话、分支采样(self-consistency)、Agent 链式调用等前缀高度重叠的场景收益大,且默认开启零配置;vLLM 的 APC 与 PagedAttention 显存体系天然融合、生态成熟,一行参数开启。两者都支持 LRU 淘汰,实践差距主要在前缀组织的质量。
A. 不冲突,也不重复收费。服务商缓存发生在服务端推理引擎(如火山方舟显式/隐式缓存),你的应用代码无需感知;自部署时你拥有引擎缓存的完全控制权。两者都遵循同一规律:前缀越稳定,命中越多、越省钱。
A. 隐式缓存由系统自动管理:缓存容量有限会按策略淘汰、分布式路由可能把请求分到不同实例、多租户共享会互相挤占。需要确定性收益时,用显式缓存手动声明复用片段,或选择独享接入点保证请求落在同一组缓存实例上——缓存红利与接入点强相关。
A. 先查「前缀稳定性」:动态变量是否误放开头(时间戳/用户 ID/随机数)、System Prompt 是否频繁改版、RAG 检索结果排序是否稳定。命中率低于 40% 时,换哪家服务商都救不了——先把前缀修稳,再谈折扣;合格线目标是 60% 以上,高并发模板化场景可达 90%+。