OpenAI 所谓永久缓存并非真永久存储
开发者@ScarletKc 分析,OpenAI 面向 Codex 与 Work 推出的永久缓存,大概率是额度层面的永久,并非真的在服务器上为每个用户永久存储缓存数据。
Prompt 缓存存储的不是用户输入的原始文本,而是模型计算生成的 KV(键值对)。模型处理上下文时,每个 token 都会生成一组 Key 和 Value,后续 token 依靠这些数据回看前文内容。如果下一次请求的开头和之前完全一致,就可以直接复用这批 KV,省去重新计算整段上下文的 prefill 过程。
由于每个 token 的 KV 都依赖它之前的所有 token,因此缓存前缀必须完全一致,只要开头改动一个字,后续所有内容都需要重新计算。切换模型、修改开头指令、执行 compact 操作都会导致缓存失效,Codex 甚至会在末尾追加说明来修改工具定义,不会改动前面的内容。
KV 数据的体积非常大。以开源模型 Llama 3 70B 粗略计算,单个 token 的 KV 约为 320KB,20 万 token 的上下文对应的 KV 就超过 60GB。GPT 的模型结构没有公开,可能存在各类压缩手段,但为每个用户的每段对话永久存储这个量级的数据并不现实。而且这些缓存存储在特定机器的显存或本地存储中,只有请求被路由到对应机器时才能命中缓存。
OpenAI 官方文档对 12 小时缓存的规则写得很明确:这个时长只决定用户能否按缓存价格计费,不保证每次请求都能复用已存储的 KV,也不保证延迟更低。
@ScarletKc 推测,Codex 和 Work 的永久缓存也是同样的逻辑。如果 KV 已经被清理,OpenAI 会在后台重新计算,但仍然按照命中缓存的标准扣除用户额度。服务器上的 KV 是否还存在,是 OpenAI 内部的事务。
今年 8 月,Tibo 曾提到部分用户的缓存命中率下降,额度消耗速度随之变快。现在的永久缓存规则相当于把未命中缓存的风险从用户侧转移到了 OpenAI 侧。如果使用 API 想要获得 12 小时缓存,写入时需要支付 2.5 倍的输入价格,这部分额外费用就是为缓存保证支付的成本,订阅用户的这部分费用由 OpenAI 自行承担。
对用户来说,额度消耗依然会减少。唯一可能感知到的差异是间隔很久之后再次使用时,如果缓存已经被清理,第一条回复的速度会稍慢,因为需要重新执行 prefill 计算。