AI编程仪表盘中最危险的数字是那些标着“成本”却没有定义的值。一个本地工具可以从 Claude Code 和 Codex 的会话记录中重构 token 活动,并应用一份带日期的模型价格表,生成一个可用于对比周期和理解本地活动形态的估算——但它不是发票。
第一步:统一文件格式边界。Claude Code 和 Codex 的记录格式不同——Claude 在 assistant 消息中暴露 input、output、cache creation、cache read 字段;Codex 则将 model context 与后续 token 事件分开,cached input 可能包含在 total input 内。计算前必须归一化:provider、timestamp、model、input tokens、output tokens、cache creation tokens、cache read tokens。
第二步:正确计算缓存输入。对于 Codex,安全做法是先分离 cached input:non-cached input = max(total input - cached input, 0),然后分别按不同费率计价 non-cached input、output、cache creation、cache reads。如果直接用 total input 计价再加 cache reads,会造成精确的重复计数。
第三步:防止重放。会话文件会被多次读取、应用重启、监视器重连、归档文件重现。如果每次观察到同一事件都计数,周报会膨胀。使用稳定的 provider 事件标识符;若格式无此标识,需记录回退方案及其不确定性。
第四步:价格表必须带日期。新模型 ID 可能在桌面应用得知费率之前出现,API 价格也可能变更。追踪器应附带一份带日期的费率快照,对未知名称的模型保留可见但不计价,历史报告保留费率日期。在 Agent Island 中,计算出的数字被标记为“API value”——这是基于嵌入费率的反事实估算。
第五步:区分四种度量。一个有用的仪表盘不应把这些合并为一个指标:Provider quota(账户距重置边界的距离)、Local token volume(会话记录的内容)、Estimated API value(基于日期化的 token 类别计算)、Actual billing(收据、额度、订阅、provider 端调整)。只有第四项是账单,本地记录不足以重建它。
在使用任何 AI 编程成本追踪工具前,对照以下问题检查:它读取哪些本地记录?是否分离 input、output、cache creation、cache reads?如何防止重放事件被重复计数?当模型不在费率表中时如何处理?价格快照是否带日期?UI 显示的是“估算”还是暗示“实际支出”?数据收集是否本地化,分享是否是独立操作?如果那个数字可能被误认为是已支付的费用,说明文字应当紧挨着数字出现。
#开发者 #工具 #AI编程 #成本追踪 #测量合同 #ClaudeCode #Codex #AgentIsland #本地工具
@DevToolboxHub