星桥

API 缓存怎么计费?缓存读取、写入与账单核对

提示词缓存会复用相同输入前缀的计算结果。费用需要区分普通输入、缓存读取、缓存写入与输出。不同模型、协议、分组的价格和 usage 字段可能不同,不能把“有缓存”直接理解为免费,也不能把相同的 Token 重复计费。

资料核对:。数字为演算示例;实际报价见星桥模型价格页,模型厂商规则见文末来源。

普通输入、缓存读取与写入有什么区别?

类别含义核对重点
普通输入本次按普通输入规则处理的内容。是否已扣除采用其他费率的缓存部分。
缓存读取复用已经保存且仍有效的输入前缀。实际命中量,而不是本次发送的全部输入。
缓存写入建立后续可复用的缓存。是否单独计价,以及相应保留时间。
输出本次生成的内容。输出单价及模型可能包含的其他用量类别。

输入总量是否包含缓存部分,要以协议字段定义为准。有的字段是总数、有的字段是互斥的独立类别。仅凭字段名包含 input 或 cache,不能确定可以相加还是需要先相减。

如何避免把缓存 Token 算两遍?

先把原始 usage 转换成互不重叠的计费类别,再乘单价。只有在确认“输入总量包含缓存读取、且本例没有缓存写入”时,才能使用下面的减法。

假设一次请求的输入总量为 20,000,其中缓存读取 15,000,输出 2,000。假设普通输入、缓存读取、输出单价分别为每百万 2 元、0.2 元、8 元:

普通输入 = 20,000 - 15,000 = 5,000 Token
输入费用 = 5,000 / 1,000,000 × 2 = 0.010 元
读取费用 = 15,000 / 1,000,000 × 0.2 = 0.003 元
输出费用 = 2,000 / 1,000,000 × 8 = 0.016 元
合计 = 0.029 元

如果先用 20,000 乘普通输入单价,再加缓存读取费用,就把同一部分输入算了两次。反过来,如果某协议的 input 已经排除了缓存,再减一次也会算错。有写入用量时,要先确认它是否已经包含在总输入中,再独立分配费用。

缓存写入为什么可能比普通输入贵?

模型可能对建立缓存和延长保留时间采用不同单价。读取优惠、写入价格和有效期需要一起比较。OpenAI 官方文档也按模型区分缓存行为,并说明采用缓存写入费率的输入不应再叠加普通输入费用;不能把某一代模型的规则套到所有模型。

价格表中的“1 小时缓存写入”等项目是特定规则,不代表所有提供商都使用相同有效期。如果客户端发送了上游不支持的缓存参数,可能报错、忽略或按其他规则处理,需要核对实际请求、返回 usage 和控制台记录。

为什么发了同样的问题仍然没有缓存命中?

先固定模型、分组、工具和输入前缀,用小规模测试核对命中量。不要为了追求缓存命中反复发送长请求;建立缓存本身也可能产生费用。

怎样核对中转 API 的缓存账单?

  1. 保存测试时间、模型 ID、密钥分组和本次适用的价格,隐藏密钥。
  2. 记录普通输入、缓存读取、写入、保留时间和输出的原始用量;流式请求要看结束时的用量。
  3. 确认字段是否重叠,把用量换成互斥类别,再使用同一币种和单位计算。
  4. 与控制台本次实际结算比较,有差异时提供请求标识和脱敏后的 usage。

常见问题

没有标缓存价格,是不是不收费?

不能单凭未标价判断免费。需要确认平台当前规则、该模型是否支持缓存、是否产生缓存用量及实际结算。也不能用其他模型的缓存单价替代本次报价。

同一个模型换分组,缓存价格会一样吗?

不一定。分组可能关联不同渠道和计费规则。应使用当前密钥实际分组的最终售价核算,不能只看统一基价或另一个分组的价格。

参考来源

OpenAI 官方:Prompt caching、模型差异与缓存计费。更多费用比较见倍率与实际成本换算;字段与客户端说明见星桥接入文档。