Community研究与数据分析github.com

1Lany2a/token-usage-report

Agent 技能:报告每轮对话的 Token 用量、缓存命中率和预估费用(DeepSeek 峰谷定价),支持 ZCode、Codex、Claude Code、OpenCode 等平台。

token-usage-report 是什么?

该 Agent 技能通过读取本地回放文件,为 AI 编程助手(如 Claude Code、Codex、ZCode、OpenCode)提供每轮对话和整个会话的 Token 用量报告,包括输入/输出 Token 数、缓存命中数、缓存命中率和预估费用。它基于 DeepSeek 峰谷定价模型计算费用,并自动区分高峰时段(北京时间 09:00–12:00 和 14:00–18:00)与非高峰时段(半价)。报告包含两行数据:当前分段和整个会话,方便用户交叉核对官方账单。脚本使用纯 Python 3.9+ 标准库(可选 zstandard 处理 dsh 日志),仅读取本地回放文件,不涉及 API 密钥或凭据,安全可靠。适用于所有主流 Agent 平台,并支持通过 `--agent` 参数明确指定目标 Agent 以避免多 Agent 并发时的误判。

兼容平台✓Claude Code✓Codex CLI~Cursor✓OpenCode
npx skills add 1Lany2a/token-usage-report

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Token 用量报告

读取 Agent 的本地回放文件,打印最近一个对话分段的用量 以及 整个会话(两行):

本段会话:输入 123456 / 缓存命中 98765 / 输出 4321 / 命中率 80.0% / 费用 ¥0.12
整个会话:输入 987654 / 缓存命中 876543 / 输出 43210 / 命中率 88.8% / 费用 ¥0.50

为什么需要两行?整个会话的数据由脚本本地计算(无需额外模型调用),因此报告它们只会在回复中增加几十个字符——Token 开销可以忽略不计,用户还可以对比当前轮次与会话总量。

何时运行

  • 在 每次会话的最终回复之前 运行。
  • 触发短语:"token usage"、"用量"、"费用"、"cost"、"billing"、"多少 tokens"、"汇报"、"spent"。
  • 原因:它为用户提供每轮的用量行,可用于与服务商的实际账单交叉核对。费用为 估算(基于定价快照),并非实际账单。

运行方式

脚本:scripts/usage_report.py — Python 3.9+,仅使用标准库(无需安装),可选 zstandard 包用于 DeepSeek Harness (dsh) 日志。

python3 <此技能目录>/scripts/usage_report.py --latest   # 最近的分段/会话(默认)
python3 <此技能目录>/scripts/usage_report.py --whole    # 整个最新会话
python3 <此技能目录>/scripts/usage_report.py --all      # 按会话列出
python3 <此技能目录>/scripts/usage_report.py --agent zcode|codex|claude|opencode|dsh
python3 <此技能目录>/scripts/usage_report.py --session <子串>   # 锁定某个会话

始终使用此技能目录的 绝对路径。不要先 cd 到其他目录。在 Agent 会话内运行时请显式传递 --agent(自动检测会读取最近修改的文件,可能属于其他并发运行的 Agent);--session 用于锁定特定会话文件。

将脚本的输出 原样 追加到最终回复中——两行,每行独立(上方是本段会话,下方是整个会话)。如果回复是 Markdown 格式,单个换行符会渲染为空格并合并两行,因此请将它们放在代码块中(或在两行之间留一个空行):

本段会话:输入 123456 / 缓存命中 98765 / 输出 4321 / 命中率 80.0% / 费用 ¥0.12
整个会话:输入 987654 / 缓存命中 876543 / 输出 43210 / 命中率 88.8% / 费用 ¥0.50
  • 退出码 0 → 始终包含这两行,即使数字与之前的报告完全相同(用户希望每次都能看到)。
  • Codex 报告 单行(整个会话)——没有分段数据。
  • 退出码 1 / "No usage data found" → 静默跳过;不要询问用户。
  • 任何其他错误 → 在回复前修复原因(缺少 Python、技能目录移动等);不要静默跳过。

支持的 Agent

Agent数据源--latest 含义
ZCode~/.zcode/cli/rollout/model-io-*.jsonl最后一个 分段:自最新请求(其最后一条消息是用户提示)以来的记录(该轮次包含其工具调用)
Codex~/.codex/sessions/**/rollout-*.jsonl最后一个 会话(整体)——Codex 回放存储 累积 运行总量,因此只报告最终总量,单行;分段数据不可用
Claude~/.claude/projects/**/*.jsonl最后一个 分段:自最新 "type":"user" 记录以来的记录
OpenCode<data>/opencode/opencode.db (SQLite;Windows 上为 %LOCALAPPDATA%,否则为 $XDG_DATA_HOME 或 ~/.local/share)最近会话的最后一个 分段(从最新用户消息开始)
DSH~/.dsh/sessions/**/session.jsonl[.zstd] (zstd 压缩;需要可选 zstandard)最后一个 轮次(一次用户交换)+ 整个会话

所有四种 Agent 均从有文档记录、本地验证过或已知的格式中解析。DeepSeek Harness (dsh) 和其他 Agent 可以通过编写一个小解析器添加——参见 README.md 了解方法。

准确性与局限性

本报告是根据 本地回放数据 + 标价估算 得出,并非服务商账单。与实际官方用量页面的差异可能来自:

  • Codex 总量是累积的:每个 total_token_usage 记录都是当前会话的运行总量,因此脚本使用最后一条记录(绝不求和)。Codex 无法获取单次请求或分段数据。
  • 峰谷定价按会话开始时间计算,而服务商按每个请求的时间定价。跨峰谷边界(北京时间 09:00–12:00 / 14:00–18:00)的会话在跨越部分会存在定价偏差。
  • 推理输出 Token 在 Codex 中包含在 output 中(按输出费率计费);ZCode 回放不显示推理字段。
  • 本地回放可能未捕获该密钥上的所有请求(中断的流、非交互式调用),因此总量可能低于完整密钥用量。
  • 费率是一个快照;网关/聚合密钥或不同的模型 ID 可能按不同价格计费。

费用模型

DeepSeek 官方峰谷定价,生效时间 北京时间 2026-08-17 00:00(2026-08-13 公告)。高峰时段:北京时间 09:00–12:00 和 14:00–18:00;其他时段为非高峰,价格为 半价。2026-08-17 之前的会话使用旧的统一费率。

模型时段缓存命中输入未命中输入输出(CNY / 1M tokens)
deepseek-v4-flash非高峰0.051.54.5
deepseek-v4-flash高峰0.103.09.0
deepseek-v4-pro非高峰0.154.513.5
deepseek-v4-pro高峰0.309.027.0

计费周期来自会话开始时间(机器本地时间)。如果官方费率发生变化,请更新 scripts/usage_report.py 中的 PRICES_* 表;权威来源是 platform.deepseek.com。

集成(自动报告每个会话)

将以下规则添加到 Agent 的用户级指令文件(~/.zcode/AGENTS.md、~/.codex/AGENTS.md、CLAUDE.md 或项目 AGENTS.md):

在每次最终回复之前运行 python3 <技能目录>/scripts/usage_report.py --agent <你的Agent> --latest(始终传递 --agent——自动检测可能读取另一个并发运行 Agent 的数据),并原样追加两条输出行: 本段会话:输入 X / 缓存命中 Y / 输出 Z / 命中率 N% / 费用 ¥M 整个会话:输入 X / 缓存命中 Y / 输出 Z / 命中率 N% / 费用 ¥M。 仅当脚本输出 "No usage data found" 时跳过。

安全性

  • 脚本 只读取 用户主目录下的本地回放 JSON 文件。它从不读取、打印或需要 API 密钥、.env 文件或凭据。
  • 回放文件可能包含提示文本——切勿回显其内容。仅打印脚本输出的汇总数字。

相关技能