详细解释
**Prefix Caching(前缀缓存 / Prompt Prefix Sharing,简称 Prefix Cache)**一句话:你所有的请求都有同一个长 System Prompt(1000 Token,包括人设、工具定义 JSON、安全规则、公司政策这些),100 个不同用户提问都要把这 1000 个 Token 的 Prefill 阶段 KV Cache 重新算一遍,浪费了 90% 的 Prefill 算力;前缀缓存就是把这 1000 个公共前缀 Token 的 KV Cache 预先算好、存在内存里(甚至写到磁盘持久化),给它一个固定的 cache_key,任何请求只要说「我用 cache_key=xxx 的前缀」,推理引擎就直接把这 1000 个 Token 的 KV Cache 从缓存里拿过来用,不再重新算 Prefill。在 Agent 多工具调用、长 System Prompt + 工具定义的真实业务场景下,TTFT(首字延迟)能直接下降 50-80%,GPU 算力省 30-60%,是 2024-2025 年推理成本优化的第一利器。
前缀缓存的两种实现层级:(1)Request-level Prefix Sharing(请求内前缀共享,vLLM PagedAttention 原生支持)——同一个推理 Batch 里多个请求如果前缀 Token 序列完全相同,直接共享同一份 KV Cache 物理页,Batch 内 10 个请求共享同一 System Prompt,Prefill 算力降为原来的 1/10;(2)Cross-request Persistent Prefix Cache(跨请求持久化,SGLang RadixAttention、TensorRT-LLM 支持)——不仅同 Batch 里共享,把最常用的 10-100 个前缀(比如你的默认 System Prompt + 默认工具定义 + 常用的长文档)的 KV Cache 存在一个全局的 LRU + 持久化 Cache 池,跨分钟、跨小时、跨天复用,用 cache_key 去索引,命中率能到 60-95%。第二种比第一种在真实在线业务上省得更多(因为大部分请求跨 Batch 分布)。
唯元智创 的兼容 API 对所有企业客户默认打开前缀缓存:客户第一次调用时如果传 extra_body.prefix_key="你的业务专用key" 并且带上完整前缀,系统就把这份前缀的 KV Cache 持久化下来;后续所有请求只要传同一个 prefix_key 就不用再传前缀内容,TTFT 平均下降 70%,一个月下来企业客户平均能省 40% 的 Token 费用和 60% 的 GPU 推理算力。
两代前缀缓存架构对比(2025 年选型)
| 维度 | vLLM PagedAttention 级别 Request-level 前缀共享 | SGLang / TRT-LLM Persistent Radix Cache 跨请求持久化前缀缓存 |
|---|---|---|
| 核心数据结构 | 物理 KV Cache 页 + 页表共享前缀页 | 前缀 Trie 树(Radix Tree)索引 + KV Cache 页 |
| 共享范围 | 同一个推理 Batch 内部的请求 | 跨所有请求(跨 Batch、跨分钟、跨小时) |
| 典型命中率 | 20%–40%(取决于 Batch 大小和前缀相似度) | 60%–95%(取决于是否常用前缀集中) |
| TTFT 下降比例 | Batch 内共享时 30–50% | 命中持久缓存时下降 70–90% |
| 是否需要代码改动 | 不用,传相同前缀 Token 即可自动匹配 | 需要传 prefix_uid 或用前缀哈希做键,SGLang 支持自动哈希匹配 |
| KV Cache 内存占用 | 没额外开销(页共享不新增内存) | 额外占 GPU HBM 5-20% 存热点前缀池 |
| GPU 算力节省 | 20–40% | 40–70% |
| 推荐度 | ⭐⭐⭐⭐ 所有部署 vLLM 的系统默认就能享受到 | ⭐⭐⭐⭐⭐ 高流量生产服务首选,SGLang 2025 默认开启 |
落地前缀缓存的 5 条最佳实践
- 优先把 System Prompt + 工具定义(Function Calling Schema)做成独立前缀缓存——这是所有请求 100% 相同的部分,用一个固定的 cache_key;实测这一个前缀就能覆盖 50-70% 的 Prefill Token。
- RAG 场景下,把常用的文档 Chunk 也做成前缀缓存——比如你有一个 10 万字的产品手册每天有几千人问关于它的问题,把产品手册全文(切到合适长度)的 KV Cache 做好缓存,每次用户问产品相关问题时先 load 这个缓存前缀,再追加用户问题,Prefill 只算用户问题 + RAG 最新召回的 3-5 条额外 chunk,Prefill 算力下降 80%。
- 前缀一旦写入缓存,修改就要换版本号 / 换 cache_key——千万不要修改已缓存前缀的内容还复用旧 cache_key,前缀内容变了 KV Cache 完全不兼容,会导致模型输出严重错乱(相当于给它灌了错的上下文);正确做法是用前缀哈希或版本号 v1/v2/v3 做 cache_key,内容改了就升版本,旧版本保留 7 天 TTL 自动过期。
- 前缀 Cache 做两级缓存(GPU HBM LRU + CPU 内存 / 磁盘持久化)——常用热门前缀放在 GPU HBM LRU 里(容量 10-50 条,毫秒级命中),温前缀放在 CPU 内存(容量 100-1000 条,几十毫秒加载到 GPU),冷前缀写到本地 NVMe(容量上万条,几百毫秒加载),分层命中率最高、成本最低。SGLang 2025 版原生支持三级分层前缀缓存。
- 做前缀 Cache 命中率监控 + 冷启动预热——上线后盯三个指标:命中率(目标 ≥ 70%)、命中延迟(目标 < 5ms)、未命中的 Prefill 额外计算时间;冷启动时把 Top 20 热门前缀先加载到 GPU HBM,用户第一个请求就能 100% 命中,不要等用户请求触发被动加载。