LLM Prompt Caching · 前缀缓存实验室
0 / 8 章 ← 首页
01

一句话:缓存的不是答案,是已经算过的前缀状态

把已经算过的前缀注意力状态留下;命中就按折扣价读,分叉之后重新算。
CACHE ≠ RESPONSE
CACHE = REUSABLE PREFIX STATE

同一个输入仍会重新生成输出;temperature 等参数仍可能让答案不同。

“LLM 缓存”至少指四件不同的事。先把它们拆开,后面的价格、TTL、命中率才不会串台。

KV

先纠正一个常见说法“前缀差一个字节就整段作废”说得太狠了。准确说法是:从第一个分叉点往后不能复用;分叉前若存在可用缓存断点或缓存前缀单元,仍可能命中更短前缀。厂商会向后寻找最长可用匹配,但规则各不相同。
✦ 本章通关条件
✓
能说清 KV Cache、Prefix Cache 与 Semantic Cache 为什么不是一回事
02

里面发生了什么:每个词都做成 K/V 卡片,前缀第二次直接复用

别被 K/V 吓到。模型读句子,就像店员在仓库取货:每个词都先被做成两张小卡片,后面要用时才有现成的可拿。先把这三张卡认熟:

Q查询卡

“我现在想找什么”。每读到一个新词,模型就拿着它当问题,去前面挨个问。

K门牌卡

“这个词是什么来头”。每个词都贴一张门牌,用来被别人的查询卡比对。

V储物柜

“这个词真正装着什么”。门牌对上了,才打开柜子把内容取出来用。

一句话版本:注意力 = 拿新词的 Q,去比前面每个词的 K,比得越像,取的 V 越多。K/V 不是缓存的“答案”,而是模型回头翻材料用的中间账本。
第 1 幕 · 第一次请求
CACHE SHELF · 缓存货架未存档
点击“下一步”开始
  • 第一次:完整前缀进模型,逐词做成 K/V 卡(最费算力的一段);合格前缀被存进缓存货架。
  • 下一次:前缀一字不差,卡片直接货架取,只给新尾部现场做卡,再照常生成新答案。
  • 账单不等于显存:推理引擎内部那张 K/V 表是单次请求的加速;API usage 里的 cached tokens 才是跨请求的货架复用。
为什么输出不缓存?货架只存“读完这段前缀后的模型状态”。模型还是要对新问题做注意力、逐 token 采样生成答案——输入可以复用,输出不承诺相同。
03

动手:看前缀从左向右咬合,在哪里断

点击四种变体。蓝色是复用的缓存前缀,橙色是正常变化的动态尾部,红色是本来想复用、却因更早变化而重新计算的部分。

PREFIX MATCHER · 模拟已存在“稳定区末尾”断点
已缓存
新请求
最长相同前缀—
断点能否命中—
根因—

真正比较的是厂商渲染后的完整上下文,不只是你肉眼看到的字符串。模型、工具 schema、结构化输出、reasoning/thinking 配置都可能改变前缀。稳定骨架通常是:

append-only-prompt.txt · 通用结构
[tools / 工具定义]       # 最稳,固定内容与顺序
[system / developer]     # 稳定指令
[参考文档 / few-shot]    # 按版本稳定
[对话历史]               # 只追加,不回头改
──────── CACHE BREAKPOINT ────────
[动态 RAG / 时间 / 用户问题] # 每次变,放最后
04

一次请求:从序列化到最长命中,再写入新状态

点“推进”走完整条流水线。注意:共同前缀存在,不代表它已经被写成可读取的缓存项。

01
渲染完整
上下文
02
检查长度
与断点
03
寻找最长
缓存项
04
读取前缀
K / V
05
计算尾部
生成答案
06
持久化新
缓存项

DeepSeek 的缓存前缀单元,是一个重要例外

DeepSeek 默认自动构建磁盘缓存,但新版规则不是“发现任意公共前缀,当次马上命中”。每个可命中的前缀必须先成为完整的缓存前缀单元:

  • 请求会在用户输入末尾和模型输出末尾持久化前缀单元;长内容还会按固定 token 间隔切单元。
  • 若第一次是 A+B,第二次是 A+C,第二次不能命中 A+B;系统会发现公共 A 并将 A 持久化,第三次 A+D 才可能命中 A。
  • 缓存构建需要数秒,且是 best-effort;并发冷启动不能假定 100% 命中。
05

三家对照:别把模型代际与平台规则揉成一张假表

以下规则来自 2026-08-27 官方文档。价格和模型会变,生产环境应把 usage 与实际价目表作为最终事实。

OpenAI

CONTROL
支持模型默认启用;GPT-5.6+ 有 implicit / explicit-only,最多 4 次写入、读取看最近 50 个断点。
MINIMUM
GPT-5.6+:1,024 可见 token;更早模型通常 2,048。
PRICE
GPT-5.6+ 写 1.25×、读 0.1×;更早模型不另收写费,读价看模型。
LIFETIME
GPT-5.6+ 默认且仅支持最低 30m;更早模型有 in-memory 或支持时 24h。
USAGE
cached_tokens、GPT-5.6+ 的 cache_write_tokens

Anthropic

CONTROL
顶层 automatic caching,或 content block 显式 cache_control;最多 4 个断点,回看 20 blocks。
MINIMUM
按模型 512 / 1,024 / 2,048 / 4,096,不再适合概括成“多数 1,024”。
PRICE
5m 写 1.25×;1h 写 2×;读 0.1×。
LIFETIME
默认 5m,可选 1h;写或读会刷新,计时从请求开始。
USAGE
cache_creation_input_tokens + cache_read_input_tokens

DeepSeek

CONTROL
磁盘 Context Cache 默认开启,无需改代码;完整匹配已经持久化的缓存前缀单元。
MINIMUM
官方当前 Context Caching 指南未承诺统一最低命中长度;旧公告曾称 64 token 存储单元,不应当作新版 SLA。
PRICE
V4 当前峰值缓存命中相对 miss 约 1/31.4;离峰同倍率,具体价格随模型变化。
LIFETIME
未使用后通常数小时至数天自动清除,无可配置 TTL 承诺。
USAGE
prompt_cache_hit_tokens + prompt_cache_miss_tokens
问题OpenAIAnthropicDeepSeek
缓存原文答案?都不是。复用输入前缀状态,输出重新生成。
能否手动清空?否否文档未提供
命中保证?受路由与容量影响并发首写完成前不可读明确 best-effort
变化最敏感处完整 rendered contexttools → system → messages已持久化前缀单元的完整匹配
⚠ 规则变化比你想得快Anthropic 当前文档已支持顶层 automatic caching,最低长度也按新模型细分;OpenAI GPT-5.6+ 又增加显式断点和写入计费。不要把 2024 年博客里的数字长期硬编码进监控系统。
06

成本实验室:写一次,读几次,什么时候开始省

拖动参数观察输入成本。图中用“标准输入 token 等价成本”比较,避免把不同模型的美元单价混在一起;输出 token 与动态尾部不受缓存折扣。

—相对无缓存节省
完全不缓存
按当前命中率

怎么算?
无缓存 = N ×(稳定前缀 + 动态尾部)。有缓存 = 首次写入前缀 + 每次动态尾部 + 后续命中的前缀读价 + 后续未命中的前缀标准价。OpenAI / Anthropic 分别使用写 1.25×、读 0.1×;DeepSeek 当前 V4 峰值 hit/miss 比约 0.0318,自动写入没有单列写费。模拟忽略输出、路由失败和 TTL 过期。
07

缓存杀手挑战:8 个改动,哪些会砸掉命中

假设改动发生在缓存断点之前,并且没有更早的独立断点可退。先判断,再看真实失效边界。

CACHE KILLER REVIEW0 / 8 已判断

生产口诀,不是玄学

  • 稳定的放前,变化的放后:时间、用户 ID、request ID、动态 RAG 结果留在断点后。
  • 工具定义冻结:固定名称、schema、描述与顺序;OpenAI 可用 allowed tools,而不是每轮删工具。
  • 历史只追加:不要重排、重写旧消息;compaction 会改变前缀,需接受压缩后的第一次命中下降。
  • 先测 usage:看 token 级命中率,不要用“请求命中过几次”掩盖只命中很短前缀。
  • 先预热再并发:Anthropic 要等首个响应开始后缓存才可用;DeepSeek 构建也需要数秒。
Agent 场景的肥肉tools + system/developer + 长文档 + append-only history 才值得缓存。用户的当前问题天然会变,把它留在最后,不要让它挡在稳定前缀前面。
08

终极测验:你真的会设计可命中的 Prompt 了吗?

5 题验收。答对 4 题以上,才算能去看生产账单。

FINAL EXAM · PREFIX CACHING0 / 5

官方来源