插件简介
TokenTracker(xiufengsun/TokenTracker,npm 包 tokentracker-cli @ 0.97.2,首页 1633 星,MIT 许可)是本地优先的 AI token 用量与成本追踪器,支持 39 款 AI CLI,其中包含 DeepSeek Harness、WorkBuddy、CodeBuddy。它只保存 token 数量、时间戳与模型名,绝不读取提示词。
本文不谈安装,谈在阿里云环境下怎么把它用成一套可交付的成本归因体系。完整的环境变量全表见 插件详情页。
实践一:归因口径先定,再采集
成本归因失败最常见的原因不是数据不准,而是口径没定就开跑。它提供三个天然维度,建议部署前明确各自回答什么问题:
| 维度 | 回答的问题 | 决策用途 |
|---|---|---|
| 按模型 | 钱花在哪个模型上 | 模型选型与降级决策 |
| 按项目(Git 归因) | 成本落在哪个仓库 | 预算分摊与项目 ROI |
| 按时间(30 分钟 UTC 桶) | 使用时段与连续性 | 资源调度与团队作息 |
注意 30 分钟 UTC 桶这个口径:换算北京时间要加 8 小时,否则会得出「团队都在凌晨工作」的错误结论。做日报周报时统一按加 8 小时处理。
Git 归因要先决定边界:如果团队对「工具进入项目目录」敏感,设 TOKENTRACKER_DISABLE_GIT_ATTRIBUTION=1 关闭,代价是只保留手动记录的归因;如果确实需要按仓库归因,但仓库放在 ~/Documents、~/Desktop 等 macOS 受保护目录下,默认会被跳过,需要另设变量开启并接受逐个授权。
实践二:把「精度等级」写进汇报模板
这是本文最想强调的一条。跨工具账本的精度由最弱的上游决定,直接拿总数做预算会在某些工具上失真,建议在汇报里显式标注三个等级:
精确级:绝大多数工具(Claude Code、Codex、Cursor、Gemini,以及作为 dsh 数据源的 DeepSeek Harness 等),token 与成本均来自上游自身的明细记录。
估算级:Grok Build。它的本地遥测当前只提供 updates.jsonl 里的累计 totalTokens,还没有稳定的输入/输出/cache 拆分,signals.json 只作 contextTokensUsed 快照兜底。
无价级:Devin 的 swe-2、swe-2-high、compactor 模型当前没有定价数据,token 数照常统计但不计入美元估算,显示 $0 并不代表免费。
另有三个特殊情况需注明:Copilot 迁移前的 App/CLI 混合历史无法无损拆分,会保留为 github-copilot-legacy 聚合量而不猜模型;Mimo Code 与 ZCode 只统计各自原生轮次,镜像进来的 Claude / Codex / Gemini 历史已被排除(这是防止重复计数的设计,不是漏记);LM Studio 与 Unsloth Studio 的本地推理成本为 $0,属真实值而非缺数据。
把这三档写进模板的价值是:任何时候有人质疑数字,你都能说清误差来源,而不是陷入「工具是不是算错了」的无效争论。
实践三:ECS 上的多用户隔离
团队共用一台开发机时,最容易出的事故是配置互相覆盖。三条做法:
- 按开发者建独立系统用户,各自持有
~/.tokentracker/、hook 配置与本地 SQLite。 - 必须共用账号时用环境变量错开数据目录:
CODEX_HOME(Codex)、GEMINI_HOME(Gemini)、TOKENTRACKER_GROK_HOME(Grok Build)、TOKENTRACKER_ACODE_HOME(AStudio)。 - systemd 服务的
ExecStart必须写绝对路径,systemd 不加载 shell 环境,nvm 装的命令在默认 PATH 里找不到。
实践四:安全边界按最小暴露原则设计
ECS 安全组不要放行 7680。 Dashboard 是无鉴权的本地工具,暴露公网等于公开团队的 AI 消耗数据。正确做法是服务只监听回环,通过 Nginx 反代到 443,鉴权放在反代层。安全组对外放行项应只有三项:22(SSH,建议限来源 IP)、443、80(跳转,可选)。
反代有两个必须显式配置的参数:proxy_read_timeout 要放到 300 秒级别(热力图与按项目归因首屏数据量偏大,默认 60 秒容易被掐断);若后续接入需要长连接的功能,还要补 Upgrade 与 Connection 头。
数据出网建议保持默认。 它的网络请求逐条披露,默认只有四类:查询 provider 配额(用机器上已有的本地凭证)、获取 GitHub Star 数与检查更新、从 raw.githubusercontent.com 更新定价数据、匿名遥测。合规评审时值得知道两个开关:TOKENTRACKER_NO_TELEMETRY=1 关闭全部匿名遥测,同时尊重跨工具的 DO_NOT_TRACK 标准;TOKENTRACKER_TRAE_CN_USAGE 保持不设——TRAE Work CN 默认完全不被读取,因为读取需要把本地保存的登录授权发送到其内部 API。完全不出网的环境也能跑,代价是定价表停留在最后一次成功拉取的版本,这一点要在成本数字的解释里注明。
实践五:把用量接进自动化
tokentracker status --json 是它从「人眼看板」升级为「体系组件」的关键——输出机器可读的结构化 JSON,可 pipe 给 jq 或喂给 AI agent,因此可以做到:每日定时把用量快照写入内部报表;在 CI 里对比本次构建的 token 消耗与基线;让 agent 自己读取用量状态并给出优化建议。
CI 环境有个必须注意的点:不要用默认输出,它会带 spinner 控制字符污染日志,应改用 tokentracker status --light(纯 ASCII 表、无 spinner)。同时建议设 TOKENTRACKER_DISABLE_GIT_ATTRIBUTION=1,避免流水线里出现多余的 git 调用。
实践六:升级前先读 CHANGELOG 的计数口径修正
有个实例值得固化成流程:升级到 v0.96.0 后 ZCode 的历史总量出现下降,原因是这次修正了缓存/推理的重复计数——旧口径重复计了。官方同时提供了历史计数修正说明与本地备份建议。把「升级前检查 CHANGELOG 是否含计数器口径修正」写进运维流程,否则历史趋势图上会出现无法解释的断崖。同时记住:基于 hook 的集成只在宿主 CLI 启动时加载 hook,升级客户端后必须重启宿主 CLI,且历史会话不会被补记。
小结
关键动作六条:先定归因口径(含 UTC+8 换算)→ 把精度等级写进汇报模板 → 按开发者隔离数据目录 → 安全组不放行 7680、反代给足超时 → 用 status --json 接入自动化(CI 用 --light)→ 升级前读计数口径修正。
一个诚实的提醒:站点对该插件的安装兼容性结论是「自动检查通过」,但明确标注未经人工实机验证,原话是「能装不等于用着没问题」,且该包未声明 dsh 版本约束。作为团队级依赖引入前,请务必在目标 ECS 上跑一遍 tokentracker status 与 tokentracker doctor 做准入验证。