AI 工具评测开发工具 · 更新于 2026年10月7日 · 约 6 分钟

别被 AI 账单吓到:tokentab 本地算清每日花费

别被 AI 账单吓到:tokentab 本地算清每日花费
本文目录

用 AI 编程工具的人,多半都有过这个瞬间:月底看账单,数字比自己预估的高出一截,却说不清钱花在哪了。是这个项目烧的,还是那次调试?

是大模型用多了,还是聊了太多废话,这些问题的答案其实一直躺在你的硬盘里——Claude Code、Codex、Gemini CLI 每次调用都会在本地留下会话日志,只是没人去读。调用记录一直躺在硬盘里,你去看过吗?

8 月 27 日出现在 GitHub 上的开源工具 tokentab,干的就是这件事:把三家工具的会话日志读出来,算出你到底花了多少钱,截至本文写作时,它已经拿到 1141 颗星、210 个 fork,距离创建不到七天。

它读什么:三家工具,Cursor 还在路上

tokentab 直接读取这些工具已经写在磁盘上的日志:

Claude Code — ~/.claude/projects/**/*.jsonl
Codex — ~/.codex/sessions/**/rollout-*.jsonl
Gemini CLI — ~/.gemini/tmp/**/session-*.json

Cursor 在代码里留了插槽,但作者明确标注尚未完成,暂时用不了,好消息是,如果某个工具你没装,它会自动跳过——你只会看到自己实际在用的那些。没装的工具会自动跳过,这设计挺省心?

算出结果后,按四个维度拆开:按模型、按项目、按日期、按工作类型。这四个切法基本覆盖了所有你想问的问题。

最让人放心的一点:它完全不联网

这是我认为它值得推荐的首要理由。tokentab 全程在本地运行:不需要账号,不需要 API Key,任何数据都不会离开你的机器。

细节做得相当彻底。

它的价格表是一张手写在 tokentab/pricing/prices.py 里的静态表,单位是美元每百万 Token——作者明确说这是有意为之,工具永远不会联网去查价格,「一个稍微过时的数字,好过厂商半夜改个模型名就让你的工具崩掉」。

连网页仪表盘都不从 CDN 拉字体,直接用系统自带的衬线和等宽字体,所以断网也能正常显示。

装起来:两条命令

安装很常规:

git clone https://github.com/damejan80/tokentab
cd tokentab
pip install .
python cli.py

装完后 tokentab 命令就在你的 PATH 里了,整个项目唯一的第三方依赖是 rich(用来画终端表格),解析、JSON 输出、网页服务全用 Python 标准库实现,不带参数直接跑 python cli.py,默认给你看最近 7 天、所有工具的汇总。你更想先看单价,还是先看哪一次调用更烧钱?

常用命令:从粗到细一层层剥

几个高频用法:

python cli.py -today — 只看今天
python cli.py -month — 看本月
python cli.py -p all — 看有史以来的全部记录
python cli.py --provider claude — 只看某一个工具
python cli.py --project myapp — 只看某一个项目
python cli.py --from 2026-06-01 --to 2026-06-15 — 指定时间窗
python cli.py --json | jq . — 输出机器可读格式。

方便接进别的流程
python cli.py -web — 起本地网页仪表盘,有个小细节很贴心:当你把输出通过管道传给别的地方时,颜色会自动关闭,不会把一堆转义符一起复制到 PR 或聊天窗口里。

网页仪表盘:像个对账单

python cli.py -web 会打开 http://localhost:4747,把同样的数据排成一份月度对账单的样子——总数在最上面。

下面逐条明细。

技术上它用的是 Python 标准库的 HTTP server,没有 Flask 也没有任何框架,不用额外装东西,它每次请求都重新读盘(数据量很小,没必要缓存,还能避免看到过期数据),并且只绑定 localhost,什么都不会上传。

想换端口用 --port,不想让它自动弹浏览器就加 --no-open。

数字是怎么算出来的

这里有几个设计值得单独说,因为它们决定了你看到的数字可不可信,Token 数直接来自日志——这几个工具本身每次调用都会记录自己的 token 计数,所以不存在估算或猜测。

缓存会被单独处理。这一点很关键:Claude 会把缓存读取和缓存写入分开记录,而 Gemini 上报的输入 token 里是包含缓存部分的。

tokentab 在计价前会先把缓存 token 抽出来,避免同一批 token 被重复计费。如果你关心缓存命中率,这个处理就是必须的。

价格用模糊匹配。模型名 claude-opus-4-6-20260514 也能匹配到表里的 claude-opus-4-6。

万一真匹配不上,它会显示 $0.00 并且明确告诉你没匹配上,而不是悄悄当成免费。这种「宁可报错也不给错答案」的态度在数据工具里很难得。宁可报错也不给错答案,这个取舍你欣赏吗?

工作类型是推断的。

coding / debugging / refactor / testing 这些分类。

是基于该会话用到了哪些工具、以及你在会话里第一条消息的措辞猜出来的,作者坦白说了这是确定性推断、不调用任何模型,所以又快又能让你一眼看出对不对——当成提示,别当成结论。

三条自查经验:这才是真正的价值

tokentab 的 README 里给了三条判读经验,我认为比工具本身还值钱:① 缓存命中率持续低于 80% — 大概率是你的上下文在多次调用之间不稳定,或者缓存根本没开。偶尔一次异常不用管,但连续几周都这样,就值得查一查了。缓存命中率低于八成,问题出在哪一步?你现在的缓存命中率,是稳定达标还是偶尔好看?

② 某个大模型在大量小调用上占据主要成本 — 说明你可能在用贵的模型干便宜的活。这类任务换成小模型往往能一次搞定。

③ 「chat」或「exploring」占了很大比例 — 意味着大部分钱花在了聊天和读代码上,而不是真正的编辑,有时候这就是工作本身,但有时候说明某次会话跑偏了。

作者也提醒:这些都是切入点,不是判决书。工具给你看数据,而你才知道那段时间实际在干什么。

想加新工具?成本很低

tokentab 的扩展性设计得挺干净。

每个 provider 就是 tokentab/providers/ 下的一个模块。

只要暴露一个返回 UsageRecord 列表的 collect() 函数就行,写好模块、加进 __init__.py 的列表,计价、分组、仪表盘全都自动生效——因为下游所有环节都只认那一个统一的数据结构。

作者建议从 Claude 的解析器开始读,它是最简单的模板。

对普通人意味着什么

如果你只是偶尔用用 AI 编程,这个工具意义不大,但如果你每天开着 Claude Code 或 Codex 干活,或者团队里几个人的 API 花费需要归因到具体项目,那它就是刚需——看不见的成本是没法优化的。

而且它把「隐私」这件事做对了:不联网、不要账号、数据不出机器、连字体都不外链。在一个什么都往云上送的年代,这种克制反而让人放心。

最后提醒一句:价格表是人工维护的,作者也说欢迎提 PR 或 issue 修正,如果你发现某个模型的单价明显不对,顺手改一行提交上去,对所有人都是好事。

· · · · ·

关注「AI 智习室」,每天一条看得懂的 AI 情报。

Avatar photo

龙主编

龙主编,AI智习室官方媒体主编。 专注 AI 行业观察与实操分享,擅长将复杂技术转化为通俗易懂的实战指南。 坚信 AI 不是取代人类,而是赋能每个人。 内容风格: 真实案例 + 详细干货 + 可操作性 使命: 让普通人也能抓住 AI 时代的红利。