本地日志与平台账单:两个开源 skill 实测你的 AI token 成本
先说结论:AI 用量度量不存在「一个工具全覆盖」。同一笔消耗可能记在两个地方、粒度还不一样——本地客户端把每次会话的明细写在你机器上,IDE 平台把账单记在自家服务端,API 厂商(如 DeepSeek)只给你按天的粗汇总。因此选路的分界不是「客户端 vs 平台」,而是数据在哪、细到什么程度。
一、数据源分层
| 层 | 代表 | 存储 | 可解析粒度 |
|---|---|---|---|
| 本地 session 日志 | Copilot、Codex、Claude Code、OpenCode | JSONL(~/.claude/projects/*、~/.codex/sessions/** 等)/ SQLite(OpenCode 的 opencode.db) | per-turn、per-session、per-model、per-agent |
| 平台服务端记账 | Qoder、CodeBuddy、TRAE、CloudCode | 平台后端,本地无 token 记录 | 平台给多细就有多细(CodeBuddy 可到 per-request,DeepSeek 只有按天) |
| 自配 API(BYOK) | OpenCode / Claude Code + 自有 Key | 明细只在本地,扣费在 API 厂商 | 本地细、平台粗 |
BYOK(Bring Your Own Key,自带 API Key)是最容易被漏掉的一层:你不是客户端厂商的付费用户,它的账单页没有你的数据;API 厂商控制台只有按 key 的日汇总。要按 agent / 会话归账,只有本机日志这一条路。
二、路线一:本地日志解析(ai-token-usage)
核心是把各家字段归一化成 input_tokens / output_tokens 后再聚合:Copilot 的 promptTokens/completionTokens、Codex 的 input_tokens/output_tokens/reasoning_output_tokens、Claude Code 的 message.usage.* 都映射到同一套字段;Codex 记的是累计值,需按相邻快照取正 delta 去重;Claude Code 的 subagent 日志在 subagents/agent-*.jsonl,默认计入、可排除。
聚合维度是 daily / per-session / per-model / per-agent 四个 bucket,另有当前会话的上下文窗口占用分析。
实测 8 月数据:
口径提醒:摘要里的成本是按标准 token 单价折算的估算值,不是真实支出——免费额度同样按官方标准价计入合计。例如 deepseek-v4-flash 在 OpenCode 上免费,这部分 token 仍按 DeepSeek 官方定价计入了 ¥813.16。所以它应读作「按标准价折算的用量成本」,会高于实际被扣金额。
成本估算的实现要点(也是它的误差来源):
- 单价来自内置离线价表
references/pricing.json,无运行时网络调用; - 成本按真实 input / output / cache-read 三分量分别计价,不是混合单价——缓存读(如 $0.014/M)与输出(如 $1.32–4.4/M)差两个数量级,混合计价会严重失真;
- 缓存读按 cache 费率计,价表存的是标准 list 价,所以结果是估算而非发票;
- 免费额度按标准价计入:deepseek-v4-flash 在 OpenCode 上免费,但这部分 token 仍按 DeepSeek 官方定价计入合计(想看「只算付费」的口径可加
--exclude-free),因此估算值高于实际被扣金额; - 未收录模型回落到
auto费率而不是按 0 计,避免静默低估。
硬限制:Qoder / CodeBuddy / TRAE / CloudCode 不写可解析的本地 token 日志,这条路线对它们恒为 0,报告里会输出可用性说明而不是编造数字。
三、路线二:平台账单归一化(ai-usage-report)
把各平台账单统一成 date / model / cost / free / prompt / platform 的记录(同平台多账号用 account 隔离),再出带图报告与跨平台总览。三条数据入口:官方导出文件、用量 REST 接口直取、真实浏览器抓取(保登录态拦截后端 JSON)。
两道护栏值得单独提,都是踩过坑才加的:
- 出报告前校验:抓取漏掉请求区间内超 50% 的天数就中止(曾修掉 Qoder 抓取静默丢数据);
- 落库前过滤:部分平台用量 API 无视请求日期范围、只返回最近一段(TRAE 曾请求 8/1–8/29 却返回 9/2–9/3),窗口外记录直接丢弃并告警——否则会污染错误月份,把缺口假填满。
四、单位陷阱:积分 ≠ 人民币
归一化后 Qoder / DeepSeek 的 cost 是人民币,TRAE / CodeBuddy 是积分。跨平台合计前必须按 configs/units.json 里可改的套餐折算率(TRAE≈89 元/4000 积分、CodeBuddy≈99 元/4000 积分)折算成 RMB。折算合计是参考估算(促销、赠送积分会偏移),严格比价仍应以请求数、活跃天数、模型构成为主。
五、把度量成本压到可忽略
两个 skill 装进 agent 后可以直接用自然语言驱动,抓数、校验、出报告、存归档全自动。实测一次完整审计:4 次请求、3 分钟、3.80 积分 ≈ 0.094 元。
而它量出来的真实扣费:
一个附带发现:显式选择 hy3-x 的那次会话,账单里同时出现了 deepseek-v4-pro——IDE 会把部分子步骤改派到别的模型。模型层的实际支出与你在 UI 上的选择并不严格一致,这也是必须落到账单层校验、而不能只信客户端侧统计的原因。
六、复现清单
- 逐个工具确认:本地有无可解析日志、账单在平台何处、平台粒度到哪一层;
- 本地有日志的走
ai-token-usage,服务端记账的走ai-usage-report,粗账平台两块拼; - 跨平台比较前统一折算单位,折算值仅作参考;
- 每月固定跑一次并归档,观察 Top 模型占比与日费趋势。
仓库开源,安装与完整参数见手册:ai-token-usage、ai-usage-report。如果你在别的客户端上补过解析器,欢迎提 PR。