CLIProxyAPI(八):cpa_keeper 与 cpa_cost——用量追踪与成本分析工具
本文是 CLIProxyAPI 系列教程第八篇,介绍两个配套 Python 工具:cpa_keeper.py(持久化用量追踪)和 cpa_cost.py(等效成本分析)。
系列目录
- (一)入门——把 CLI 订阅变成标准 API
- (二)多账号轮询与配额策略
- (三)接入主流 AI 编程工具
- (四)生产部署——Nginx、TLS 与安全加固
- (五)Antigravity——用 Google 订阅解锁 Claude Opus 4.8
- (六)结合 new-api 打造多用户 API 网关
- (七)自动化运维——配额监控与告警
- (八)cpa_keeper 与 cpa_cost——用量追踪与成本分析工具(本文)
背景与设计思路
第七篇已经建立了基于 Shell 脚本的运维基础,能做到账号健康检测和月度 CSV 统计。但 CSV 方案有局限:
- 难以跨时间段聚合查询(如"某账号过去3天的请求量趋势")
- 无法按令牌或模型维度切分分析
- 无法量化订阅的经济价值(给决策层看的数据)
两个 Python 脚本各司其职:
| 工具 | 数据源 | 核心价值 |
|---|---|---|
cpa_keeper.py |
CLIProxyAPI 管理 API | 账号状态快照 → SQLite,支持历史趋势查询 |
cpa_cost.py |
new-api SQLite 日志 | Token 用量 × 官方定价 → 等效 API 费用报告 |
两个工具都是纯标准库 Python 3,无需 pip install 任何第三方包,复制脚本即可用。
前置条件
- CLIProxyAPI 已运行,管理 API 可访问(参见第七篇)
- new-api 已运行,SQLite 日志在
~/new-api/one-api.db - 脚本已放置于
~/cpa/(第七篇已建立此目录)
配置 secret-key
两个工具通过 ~/.cpa/config.env 读取配置:
# 编辑配置文件
nano ~/.cpa/config.env
内容:
# CLIProxyAPI secret-key(填入明文,即设置时输入的原始密钥)
CPA_SECRET=你的明文密钥
# CLIProxyAPI 地址(通常不需要改)
CPA_HOST=http://localhost:8317
# new-api SQLite 路径(通常不需要改)
NEW_API_DB=/home/你的用户名/new-api/one-api.db
注意:
CPA_SECRET填的是设置 secret-key 时使用的明文,不是 config.yaml 里看到的 bcrypt 哈希值。CLIProxyAPI 在启动时自动对明文哈希,只要你还记得原始密钥就行。
保存后测试连通性:
python3 ~/cpa/cpa_keeper.py status
1. cpa_keeper.py 用量追踪器
1.1 工作原理
cpa_keeper.py collect 调用 GET /v0/management/auth-files 端点拿到所有账号的状态快照,写入 ~/.cpa/usage.db 的 snapshots 表。每条记录包含:时间戳、邮箱、Provider 类型、状态(active/unavailable)、累计成功/失败数。
1.2 命令参考
查看实时账号状态
python3 ~/cpa/cpa_keeper.py status
输出示例:
📊 CLIProxyAPI 账号状态(2026-06-06 12:00:00)
账号总数: 3 活跃: 3
✅ [antigravity] bhffxdg0@gmail.com
状态: active 成功: 142 失败: 0
✅ [claude] abdulrazaqgorano@gmail.com
状态: active 成功: 38 失败: 0
✅ [gemini-cli] bhffxdg0@gmail.com
状态: active 成功: 0 失败: 0
手动采集一次快照
python3 ~/cpa/cpa_keeper.py collect
# [12:05:00] 已记录 2 个账号,2/2 正常
crontab 已配置为每 5 分钟自动采集,通常不需要手动触发。
查询历史快照
# 查看最近 24 小时
python3 ~/cpa/cpa_keeper.py query
# 查看最近 72 小时
python3 ~/cpa/cpa_keeper.py query --hours 72
输出(节选):
过去 24 小时的账号状态快照(最新 100 条):
时间 邮箱 类型 状态 成功 失败
──────────────────────────────────────────────────────────────────────────────────────────
2026-06-06 12:00:00 ✅ bhffxdg0@gmail.com antigravity active 142 0
2026-06-06 11:55:00 ✅ abdulrazaqgorano@gmail.com claude active 38 0
2026-06-06 11:50:00 ❌ bhffxdg0@gmail.com gemini-cli unavailable 0 5
如果某个时间点看到 unavailable,可以对照告警日志(~/cpa/logs/alerts.log)确认是否触发了告警。
1.3 直接查询 SQLite
如果你需要更复杂的分析(比如绘图、导出),可以直接操作数据库:
sqlite3 ~/.cpa/usage.db
-- 查看各账号 unavailable 次数(过去7天)
SELECT email, provider, COUNT(*) AS unavailable_count
FROM snapshots
WHERE status = 'unavailable'
AND ts >= strftime('%s','now','-7 days')
GROUP BY email, provider;
-- 查看某账号的状态时间线(最近100条)
SELECT datetime(ts, 'unixepoch', 'localtime') AS t,
status, success, failed
FROM snapshots
WHERE email = 'bhffxdg0@gmail.com'
AND provider = 'antigravity'
ORDER BY ts DESC
LIMIT 100;
-- 统计各 provider 今日成功率
SELECT provider,
MAX(success) AS total_success,
MAX(failed) AS total_failed
FROM snapshots
WHERE ts >= strftime('%s','now','start of day')
GROUP BY provider;
2. cpa_cost.py 成本分析工具
2.1 工作原理
cpa_cost.py 读取 new-api 的 SQLite 日志(one-api.db),按模型汇总 prompt_tokens 和 completion_tokens,再乘以 Anthropic 官方定价,得出等效 API 费用。
这个数字的意义在于:你用订阅账号跑了多少请求,如果直接调用 API 的话要花多少钱——直观展示订阅的经济价值。
内置定价表(截至 2026 年 6 月):
| 模型 | 输入 $/1M | 输出 $/1M |
|---|---|---|
| claude-opus-4-8/4-7/4-6 | $5.00 | $25.00 |
| claude-sonnet-4-6/4-5 | $3.00 | $15.00 |
| claude-haiku-4-5 | $0.80 | $4.00 |
| gemini-2.5-pro | $1.25 | $5.00 |
| gemini-2.5-flash / gemini-3-x | $0.15 | $0.60 |
| deepseek-v4-flash | $0.07 | $0.28 |
| deepseek-v4-pro | $0.27 | $1.10 |
2.2 命令参考
近30天报告
python3 ~/cpa/cpa_cost.py report
指定月份
python3 ~/cpa/cpa_cost.py report --month 2026-06
按 new-api 令牌名筛选
适合查看某个团队成员的消耗情况:
python3 ~/cpa/cpa_cost.py report --month 2026-06 --token alice-dev
实际输出示例
📊 CLIProxyAPI 等效成本报告 — 2026-06
模型 请求 输入Token 输出Token 等效费用
──────────────────────────────────────────────────────────────────────────────────────────
claude-opus-4-8 12 48,200 3,100 $0.3183
claude-sonnet-4-6 45 98,500 8,200 $0.4185
claude-haiku-4-5-20251001 8 12,000 800 $0.0129
gemini-2.5-flash 30 8,100 1,200 $0.0019
deepseek-v4-pro 15 150 480 $0.0005
──────────────────────────────────────────────────────────────────────────────────────────
合计 110 166,950 13,780 $0.7521
💡 若直接调用 Anthropic API,同等用量约需 $0.75 USD
(按官方公开定价估算,实际费用以 Anthropic 账单为准)
2.3 更新定价
Anthropic 定价偶尔调整,脚本顶部的 PRICING 字典可以直接编辑:
nano ~/cpa/cpa_cost.py
找到 PRICING = { 部分,按最新官方定价修改。
3. 与 crontab 的集成
第七篇配置的 crontab 已包含 cpa_keeper.py collect 的定时任务:
# 查看当前 crontab
crontab -l | grep cpa
应该看到:
*/5 * * * * /usr/bin/python3 /home/sdmike/cpa/cpa_keeper.py collect >> /home/sdmike/cpa/logs/cron.log 2>&1
验证采集是否在运行:
# 查看最近采集日志
tail -20 ~/cpa/logs/cron.log
# 查看数据库里有多少条快照
sqlite3 ~/.cpa/usage.db "SELECT COUNT(*) FROM snapshots;"
4. 典型使用场景
场景1:账号失效后复盘
发现某段时间请求失败,用 cpa_keeper.py query --hours 48 查看快照,找到 unavailable 的时间点,对照 ~/cpa/logs/alerts.log 确认告警是否触发。
场景2:月末成本汇报
# 生成上月报告
python3 ~/cpa/cpa_cost.py report --month 2026-05
# 生成本月报告
python3 ~/cpa/cpa_cost.py report --month 2026-06
把输出贴给领导,说明"这套 Google/Claude 订阅方案本月节省了 $XX 的 API 费用"。
场景3:查某个成员用了多少
python3 ~/cpa/cpa_cost.py report --token pearl
小结
两个工具配合,构成了一套轻量但完整的用量分析体系:
| 工具 | 解决什么问题 |
|---|---|
cpa_keeper.py |
"某账号是什么时候开始失效的?" / "某时间段有多少请求?" |
cpa_cost.py |
"这套订阅方案本月省了多少钱?" / "谁用得最多?" |
两者都不依赖任何第三方包,部署即用,代码也足够简单,可以直接按需修改。
系列导航
- (一)入门——把 CLI 订阅变成标准 API
- (二)多账号轮询与配额策略
- (三)接入主流 AI 编程工具
- (四)生产部署——Nginx、TLS 与安全加固
- (五)Antigravity——用 Google 订阅解锁 Claude Opus 4.8
- (六)结合 new-api 打造多用户 API 网关
- (七)自动化运维——配额监控与告警
- (八)cpa_keeper 与 cpa_cost——用量追踪与成本分析工具(本文)
实操清单
-
~/cpa/cpa_keeper.py已创建(纯标准库,无需 pip) -
~/cpa/cpa_cost.py已创建(纯标准库,无需 pip) - crontab 已配置
cpa_keeper.py collect(每5分钟) -
cpa_cost.py report --month 2026-06运行验证,输出正常($0.05 等效成本) -
~/.cpa/config.env已填入CPA_SECRET -
cpa_keeper.py status返回 3/3 active(antigravity / claude / gemini-cli) -
cpa_keeper.py collect+query验证通过,历史快照写入 SQLite 正常