。
先用一句话抓住它
Prompt Caching 让"每次都重新读一遍长文档"变成"第一次读完缓存起来,之后直接跳到新内容"。
重复前缀命中缓存后,提供商可以复用已有计算,但缓存读取通常仍要付费。整体能省多少,取决于命中率、前缀占比、写入与读取价格,以及输出 token 的费用,不能把前缀折扣当作整张账单的折扣。
它是怎么工作的
大语言模型处理输入 token 时,内部会生成一系列中间计算结果(在 Transformer 架构中称为 KV Cache)。Prompt Caching 的原理是:如果本次请求的前缀和上一次完全一致,模型提供商的基础设施可以跳过这部分重复计算,直接从缓存的中间状态继续处理新增的内容。
关键是保持可复用的前缀一致。改动会影响改动位置之后的匹配,但更早的稳定前缀仍可能命中,并不必然让整条请求的缓存全部失效。把固定内容放前面,把本轮问题和易变字段放后面。
最低缓存长度随模型而变,不能统一按 1024 或 2048 token 判断。Claude 的 Messages API 可在请求顶层配置自动缓存,也可在内容块上显式设置断点;OpenAI 的支持模型会自动尝试缓存。接入时应查对应模型和端点的现行文档。
什么场景最值得用
系统提示很长的应用:如果你的系统提示包含几千字的角色设定、规则说明和格式要求,缓存可以让每次对话的成本大幅下降。
文档问答:每次请求仍发送文档和问题,缓存命中的重复前缀按读取价格计费;输出内容另外计费。
多轮对话中的固定上下文:对话系统里,历史记录通常是递增的,但可以把固定部分(如系统提示和早期对话)标记为缓存前缀,只让模型处理新增内容。
代码审查和代码库问答:相同文件前缀可复用缓存计算;新增问题、未命中的输入及生成的回答仍按各自价格计费。
成本和延迟的变化
以 Claude 为例,写入缓存有溢价,命中读取仍有费用;读取折扣随模型而变,不能统一写成九折优惠或固定省九成。应分别计算写入、读取、未缓存输入和输出,再用实际命中次数判断是否回本。
延迟方面,缓存命中的响应通常也更快,因为跳过了大量计算。对于包含长文档的请求,延迟改善尤为明显。
使用时的注意事项
缓存有有效期。Claude 默认使用 5 分钟 TTL,也可选择收费不同的 1 小时 TTL;命中会刷新有效期。过期后再写入会重新产生费用,低频调用尤其要先比较两种 TTL 的成本。
动态内容不适合缓存前缀。如果系统提示里包含当前时间、用户 ID 或每次变化的变量,缓存会频繁失效。应该把动态部分移到提示词末尾,只缓存稳定的前缀部分。
顺序很重要:固定内容必须在前,动态内容在后。反过来放会让缓存完全无效。
不是所有模型都支持。新模型发布时,缓存功能需要单独确认是否可用,定价和参数也可能与老版本不同。