声明:本文由 Claude Code 辅助撰写,文中工具的开发同样借助 AI 编程。
起因:余额在掉,但账单是黑盒
用 Claude Code 接 DeepSeek 之后,我养成了每天看余额的习惯——但也只能看到余额:官方提供余额查询接口,没有按请求的消费明细。钱花在哪个项目、哪类请求最烧钱、缓存命中率多少、高峰和空闲时段各花了多少,全是黑盒。
所以我在 Claude Code 的帮助下写了一个小工具:本地代理 + Tkinter 看板,让每一次 API 请求都变成一行带费用的明细账。
效果:打开看板,一眼看清
看板分几个区域:
- 概览卡片:账户余额、今日使用、请求数、输入/输出 tokens、总费用、缓存命中率、高峰/空闲费用
- 趋势图:余额分钟折线(最近 30 分钟)+ 按天费用柱状图(历史天)
- 请求明细:最近 200 条,含来源、会话 ID、工作目录、提问文本、单笔费用
- 按提问聚合:同一会话、间隔小于 10 分钟的请求算一次提问,统计每次提问的轮数、tokens、费用
(以下为示意数据,非真实账单):
| 指标 | 示例值(示意) |
|---|---|
| 请求数 | 2200+ |
| 缓存命中率 | 97% 左右 |
| 总费用 | ¥150 上下,日均约 ¥30 |
| 高峰 / 空闲费用 | 约 2 : 1 |
看数据最大的收获:账单大头其实是缓存命中的钱,该不该优化、能省多少,第一次有数字可以算。
原理:一个代理,三个客户端,边转发边记账
架构一句话:
Claude Code / Codex ──► 本地代理(127.0.0.1:8787)──► DeepSeek 官方 API
│
└─ 转发完成后解析 usage,写 logs/日期.log
三个关键点:
- 协议分流,多客户端:
/v1/messages走 Anthropic 兼容端点,/v1/responses(Responses API)与/chat/completions走 OpenAI 兼容端点——同一个代理,Claude Code、Codex 都能过,看板还会按路径自动识别来源、分别统计。 - 流式也记账:SSE 响应逐行扫
data:,usage 字段取最大值(流式会分多次推送)。 - 计价按官方规则:deepseek-v4-pro 的高峰/空闲价不同——北京时间工作日 9:00-12:00、14:00-18:00 算高峰,其余时间半价。节假日与调休补班按国务院通知内置(2026 年数据已录入),不是简单判周末。
使用:两分钟接上
python ds-monitor.py # 纯标准库,零依赖,单文件
代理默认开在 8787,然后二选一:
- 点监控台"打开命令行"按钮——自动注入
ANTHROPIC_BASE_URL开一个代理终端,不污染全局配置; - 或全局配置一次:
// ~/.claude/settings.json
"env": { "ANTHROPIC_BASE_URL": "http://127.0.0.1:8787" }
Codex CLI 同理,三行配置:
# ~/.codex/config.toml
model = "deepseek-v4-pro"
wire_api = "responses"
base_url = "http://127.0.0.1:8787"
看板每分钟轮询一次官方余额接口写快照,"今日使用"按快照下降量累加。
几个值得说的细节
1. 充值会把"首尾相减"算错。 用"今天第一笔余额 − 现在余额"算使用量,中途充值会让结果虚增甚至为负。我的算法是相邻快照差值累加,充值自动分段不冲抵。
2. 按提问聚合消费。 一次提问可能触发几十轮工具调用,"每笔请求"维度看不出单次提问成本。看板支持按"会话 + 提问"聚合,统计每次提问的轮数、tokens、费用。
3. 服务器版余额记录器。 不想天天开看板,我写了个零依赖的 Node 脚本部署到云服务器 24 小时跑,每分钟写一行余额快照;看板把快照文件同步回本地就能看趋势,漏掉的时间段自动累计进下一行差值,总量不漏算。
4. 一个彩蛋:练手移植了个 C 版。 Win32 原生 GUI,exe 只有 127KB,和 Python 版日志格式互读兼容。不是为了替代,就是想看看零依赖到极致是什么手感,已归档。
踩过的坑(挑五个)
- Windows Terminal 的
;陷阱:wt.exe会把整个命令行按分号拆成多条子命令,引号都挡不住。注入代理环境变量的 PowerShell 脚本只能用-EncodedCommand(UTF-16LE base64)传参,命令行里不能出现分号。 - 30 秒余额采样一半是重复的:DeepSeek 余额约每分钟结算一次,扣费集中在整分到半分之间,30 秒双采样浪费,改成每分钟一次。
- OpenAI 嵌套 token 字段:
input_tokens_details.cached_tokens已包含在input_tokens里,不扣掉会按全价重复计费、费用虚高。两种协议字段名要对齐归一再记账。 - Windows GBK 输出崩溃:文件头
sys.stdout.reconfigure(encoding="utf-8")是必须的,不然控制台一跑就崩。 - Codex 改了 base_url 不生效:Codex 的请求由 app-server daemon 进程发出,配置在启动时就被缓存——改完 config.toml 只重启 TUI 没用,必须杀掉 codex.exe daemon 再重开。
写在最后
这个工具的思路其实很轻:代理 + 解析 usage,能做的事远不止记账——按项目统计、按模型对比、超支告警,都是顺着日志字段往上加的事。API 用量透明化,对重度 AI 开发的人来说,是刚需。