跳到主要内容
← 全部文章

提示缓存详解:缓存命中价格如何降低你的大模型账单

发布于 · 更新于

Agent 和对话应用会一遍又一遍地发送同一段很长的开头:系统提示词、工具定义、参考文档、到目前为止的对话。厂商识别出这段前缀后,会复用之前的计算,并把这部分 token 按更低的**缓存读取**价格计费,而不是普通的输入价格。

在哪里看缓存价格

我们目录里的每个模型,都把缓存读取价格列在输入价格旁边。这两个价格的比例决定了缓存值多少钱,而且不同模型系列之间差别很大。

价格为每百万 token,实时读取自目录
模型输入输出缓存命中上下文
DeepSeek V4.1 Flash 1017$0.128$0.51$0.002551M
Qwen3.8-Max$1.697$5.089$0.2131M
MiniMax-M3$0.266$1.063$0.0541M
GLM-5.3-Flash$0.072$0.25$0.0211M
GLM-5.3$0.715$2.50$0.1791M

命中缓存能省多少

下面的表按同样的价格实时计算。它给出 1,000 次请求的输入费用,每次请求的提示词是 100,000 token,分别算“完全没有缓存命中”和“提示词中 90% 命中缓存”两种情况。输出 token 不计入,因为缓存只影响输入这一侧。

1,000 次请求的输入费用(每次提示词 100,000 token),对比有无缓存命中
模型缓存读价 / 输入价无缓存命中90% 命中缓存输入费用节省
DeepSeek V4.1 Flash 10172.0%$12.8$1.509588.2%
Qwen3.8-Max13%$169.7$36.1478.7%
MiniMax-M320%$26.6$7.5271.7%
GLM-5.3-Flash29%$7.2$2.6163.7%
GLM-5.325%$71.5$23.2667.5%
1,000 次请求的输入费用(每次提示词 100,000 token),对比有无缓存命中

要对比的是第一列。缓存读取价只有输入价几个百分点的模型,对稳定前缀的回报远高于缓存价是输入价四分之一的模型,所以要看这个比例,而不是只看输入价的标价。

怎样提高缓存命中率

  • 不变的内容放最前面:系统提示词、工具定义和参考资料,放在任何会变化的内容之前。
  • 会变的内容放最后面:最新的用户消息、时间戳、请求 ID 放在末尾。把时间戳放在提示词靠前的位置,会让每次调用的整个前缀都不一样。
  • 保持调用之间前缀完全一致:文字相同、顺序相同、工具相同。厂商通常按完全相同的前缀匹配,所以哪怕只是调换工具列表的顺序,也可能导致不命中。
  • 后续请求尽快发出。缓存会过期,保留多久取决于厂商。
  • 一次对话尽量用同一个模型。缓存是属于单个模型的。

怎样确认缓存在起作用

看响应里的用量。OpenAI 格式中,命中缓存的部分是 usage.prompt_tokens_details.cached_tokens;Anthropic 格式中是 usage.cache_read_input_tokens。有些厂商会加上自己的字段,这些字段会原样透传(例如 DeepSeek 的 prompt_cache_hit_tokens)。如果在你反复发送的长提示词上,这个数一直是 0,说明前缀在调用之间变了。

resp = client.chat.completions.create(model="deepseek-v4.1-flash-1017", messages=messages)

usage = resp.usage
details = usage.prompt_tokens_details
cached = details.cached_tokens if details else 0
print(f"{cached} of {usage.prompt_tokens} prompt tokens came from cache")

需要留意的地方

  • 命中缓存的 token 按缓存读取价计费,替代输入价,而不是在输入价之外再加一次。
  • 不是每个模型都会报告缓存命中,少数模型的缓存写入另有单独的价格。模型详情页有完整的价格明细。
  • 价格和时段折扣会变化,本页的表格读取的是实时目录。

下一步