提示缓存(prompt cache) 上下文与记忆
别名:
缓存命中 · 前缀复用
供应商对「与之前某次请求完全一致的 prompt 开头」复用计算结果并按折扣价计费。要命中必须前缀逐字节相同,因此工程铁律是「稳定内容放前面、变化内容放后面」。见[第 20 章](/chapters/20-observability-v07/)。
机制:精确前缀复用
提示缓存(prompt cache)是供应商侧的一种推理优化:模型对 prompt 前段做注意力计算后,把这段的 key-value 计算结果缓存起来;当下一次请求的 prompt 以逐字节相同的前缀开头时,直接复用已算好的结果,只计算新增的部分。省了算力,所以打折:OpenAI 对缓存命中的输入 token 只收约 10% 的价格(usage.prompt_tokens_details.cached_tokens 报告命中数),Anthropic 把缓存读取计为 cache_read_input_tokens(约一折,且写缓存本身有成本、有 TTL)。要命中,前缀必须完全一致——任何动态内容(时间戳、用户 ID)出现在可缓存段之前,都会打碎整段缓存。
工程铁律:稳定内容放前面,变化内容放后面
这条机制直接导出 Agent 的 prompt 结构铁律:
- 稳定前缀放前面:system prompt(每条请求相同)、工具列表(模型面对的 schema 每轮相同)——天然命中缓存;
- 变化内容放末尾:最新一轮的用户输入、新追加的 tool 消息——不参与前缀匹配,变了也不影响前面已缓存的部分。
第 20 章的 demo 用 cachedTokens 字段量化了这个收益:两轮调用各命中 30 个缓存 token,每轮省 30 × ($3 − $0.3) / 1e6 = $0.000081,账单里 savedByCache 就是 cache 经济学的直接体现。
与上下文工程的关系
缓存命中的前提是「前缀稳定」,而前缀是 system-prompt 与工具 schema 的组合——所以缓存优化与上下文工程是同一条纪律的两个受益方:把不变的东西固定在头部,既省钱(缓存命中)又省注意力(模型不必反复读重复内容)。