跳转到内容

Codex 用量统计偏高:fork/resume 会话重复统计父历史 token

Quick fix

升级 cc-switch 至 v3.18.0+ 并重建用量数据库,可修复 fork 会话重复统计父历史 token 问题。

报错原文
Codex fork 一个会话时,不应该因为 fork 文件里带有父会话历史记录,就让用量统计增加。

Codex 在执行 fork(派生会话)或 resume(恢复会话)操作时,生成的 JSONL 日志文件会包含父会话或原会话的历史 token 累计快照。cc-switch 旧版本的 Codex session usage importer 在处理这些文件时,会按单个文件独立计算 token delta,未区分历史快照与新请求增量。这导致历史累计值被当成 fork 或 resume 会话的新增用量写入,造成总 token、缓存命中量和成本统计被严重放大(部分用户反馈偏差达 2.5 至 20 倍以上)。

该问题涉及多个技术细节:1) fork 文件中复制的父会话历史 token_count 事件被重复统计;2) 单个 session 内 total_token_usage 出现回退/重放时,历史值被重新计入新增用量;3) resume 会话生成的双段文件名 rollout 被误判为「文件名线程 ID 与 root meta ID 不一致」而永久跳过,导致后续用量静默丢失。Issue #3011 的评论指出,即使升级到 v3.18.0,非 fork 的根会话中因 rate_limits.limit_id 交错导致的 token 统计高估问题仍然存在,需等待后续 PR 修复。

  1. 升级 cc-switch 到 v3.18.0 或更高版本。该版本引入了新解析器,通过显式父身份和 token 签名前缀对齐过滤复制的父历史。

  2. 升级后,cc-switch 会在 schema v16 升级时自动备份并重建已有用量数据库,清除历史错误用量数据。

  3. 如果升级后仍遇到 resume 会话后用量统计静默停止,检查同步日志是否出现「文件名线程 ID 与 root meta ID 不一致」警告。该问题在 v3.20.0 仍存在,需等待官方合并修复双段文件名校验的 PR。

ToolCodex
Version3.14.1 - 3.20.0(fork 重复统计问题在 v3.18.0 修复,resume 静默丢失问题在 v3.20.0 仍存在)
PlatformsWindowsmacOS
升级到 v3.18.0 后,之前的错误用量数据会自动修正吗?
会。v3.18.0 在升级到 schema v16 时会自动备份并重建已有用量数据库,清除因 fork 历史重复统计导致的错误数据。
为什么我的 Codex 用量统计比实际高出 20 倍以上?
旧版本 cc-switch 的 Codex session usage importer 会将 fork 文件中复制的父会话历史 token_count 快照当作新增用量统计,导致总 token、缓存命中量和成本统计被严重放大。
升级到 v3.18.0 后,为什么恢复会话后用量统计不再增加?
这是 v3.20.0 中仍存在的另一个 bug:Codex resume 会话生成的双段文件名 rollout 被误判为线程 ID 不一致而永久跳过。需检查同步日志中是否有「文件名线程 ID 与 root meta ID 不一致」警告,并等待官方修复。
v3.18.0 是否修复了所有 Codex 用量统计偏高的问题?
没有。v3.18.0 修复了 fork 会话重复统计父历史 token 的问题,但单个 session 内 total_token_usage 回退/重放以及 rate_limits.limit_id 交错导致的统计高估问题仍需后续 PR 修复。

这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。