问题
当前 Provider 用量结构没有完整保留缓存输入明细,结算时将缓存读取 token 固定为 0。不同协议的输入计数含义不同,因此影响方向也不同:
- Anthropic 的 input_tokens 不包含缓存读取和缓存创建用量,丢弃这两类字段会低估本地用量和费用。
- OpenAI Chat/Responses 的输入总数包含缓存命中;丢弃命中细分后,如果配置了更低的缓存读取价格,本地费用会按普通输入价高估。
审查基准:0e15d1d104fe535965cf68df50bca6f106f20d52。这里影响的是针路簿账本和后续预算判断,不会修改供应商账单;未证明已经发生实际超支。
代码与协议依据
Anthropic 自定义 Provider 可通过 Advanced JSON 的 request_body.cache_control 启用缓存;OpenAI 返回缓存命中明细时同样会走上述解析与结算路径。
最小修复范围
在协议解析、统一 Usage、持久记录及金额结算之间保留明确的缓存用量语义。区分普通输入、缓存读取和缓存创建;按各供应商对总输入的定义归一化,避免重复相加。缓存创建的价格或 TTL 差异应明确建模;价格缺失时保留不确定性,不能默认按零费用处理。
复用现有价格快照、预算预留和幂等结算,不重建账务系统。不以这一项修改重试次数、执行权限或供应商实际计费规则。
验收条件
证据边界
本项来自固定提交的源码与官方协议核对,未在本次审查中执行付费请求或新的运行时复现。上述夹具是待实现的验收,不是已通过的测试。
问题
当前 Provider 用量结构没有完整保留缓存输入明细,结算时将缓存读取 token 固定为 0。不同协议的输入计数含义不同,因此影响方向也不同:
审查基准:
0e15d1d104fe535965cf68df50bca6f106f20d52。这里影响的是针路簿账本和后续预算判断,不会修改供应商账单;未证明已经发生实际超支。代码与协议依据
Anthropic 自定义 Provider 可通过 Advanced JSON 的 request_body.cache_control 启用缓存;OpenAI 返回缓存命中明细时同样会走上述解析与结算路径。
最小修复范围
在协议解析、统一 Usage、持久记录及金额结算之间保留明确的缓存用量语义。区分普通输入、缓存读取和缓存创建;按各供应商对总输入的定义归一化,避免重复相加。缓存创建的价格或 TTL 差异应明确建模;价格缺失时保留不确定性,不能默认按零费用处理。
复用现有价格快照、预算预留和幂等结算,不重建账务系统。不以这一项修改重试次数、执行权限或供应商实际计费规则。
验收条件
证据边界
本项来自固定提交的源码与官方协议核对,未在本次审查中执行付费请求或新的运行时复现。上述夹具是待实现的验收,不是已通过的测试。