用量统计靠“月底看账单”是行不通的——我自建AI用量统计脚本的踩坑复盘
先说三种常见的失败做法
独立开发者和小团队对接 AI API 时,用量统计这件事,几乎人人都踩过下面这些坑。
失败做法一:完全不做统计,月底看账单。 这是最普遍的状态。账单只告诉你“这个月花了多少”,不告诉你钱花在哪:是哪个项目烧的、哪个功能调的、哪个用户刷的。等你发现异常时,往往是几天甚至几周之后,钱已经流出去了。
失败做法二:依赖各供应商后台各自的用量面板。 如果你接了两三家模型,就得每天分别登录几个后台看曲线。面板口径不一、粒度不一、导出格式不一,想拉一张“本周各项目 token 消耗对比表”得手动粘贴半天,两周后你就放弃了。
失败做法三:在业务代码里到处埋 print 计数。 有人意识到要记录,于是在每个调用点手动打印 token 数。问题是调用点散落在十几处,改一次模型封装就得重埋一遍,日志一滚动数据就丢了,最后统计出的数字对不上账单,你甚至不知道哪边错了。
这三种做法的共同点是:统计是事后的、手动的、分散的。正确路径恰恰相反——统计应该是实时的、自动的、集中的。而做这件事的第一步,是先把模型调用收敛到一个统一出口。
正确路径:统一网关 + 自动上报
思路很简单:不要让业务代码直连各家模型,而是统一走一个 API 网关,比如 ThisToken.AI。所有调用都从同一个入口出去,响应里自然带回了标准的 usage 字段(prompt tokens、completion tokens),你只需要写一个小脚本把这些数据落下来。
这样做有三个好处:
- 业务代码零改动——网关兼容 OpenAI 格式,
base_url一换就能跑; - 统计天然集中——不管底层调的是哪家模型,用量都从同一处采集;
- 异常可发现——当天就能看到消耗突增,而不是月底。
下面动手跑通。
第一步:注册并获取 API Key
- 打开 ThisToken.AI,注册一个账号;
- 进入控制台的「API Keys」页面,创建一个新的 Key;
- 立即复制并妥善保存。Key 只在创建时完整展示一次,泄露的 Key 等于把钱包交给别人——把它放进环境变量,不要写进代码、不要提交到 Git。
至于各模型的具体价格,以官网价格页为准,不要依赖记忆或过时的博客数字。
第二步:跑通第一段代码
安装依赖:
pip install openai下面的脚本做了三件事:调用模型、读取返回的 usage 字段、把用量追加写入本地 CSV。你在自己的脚本里封装成同一个函数,所有调用点都走它,统计就集中起来了。
import os
import csv
from datetime import datetime
from openai import OpenAI
# 从环境变量读取,避免硬编码
# export THISTOKEN_API_KEY="sk-xxxx"
client = OpenAI(
api_key=os.environ["THISTOKEN_API_KEY"],
base_url="https://api.thistoken.ai/v1",
)
def call_and_track(model: str, prompt: str, project: str = "default"):
"""统一调用入口:请求模型 + 记录用量"""
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
)
usage = resp.usage # 标准 usage 字段,网关返回,业务代码零改动
row = [
datetime.now().isoformat(timespec="seconds"),
project,
model,
usage.prompt_tokens,
usage.completion_tokens,
usage.total_tokens,
]
with open("usage.csv", "a", newline="", encoding="utf-8") as f:
csv.writer(f).append(row)
print(f"[{project}] {model}: {usage.total_tokens} tokens")
return resp.choices[0].message.content
if __name__ == "__main__":
# 首次运行写入表头
if not os.path.exists("usage.csv"):
with open("usage.csv", "w", newline="", encoding="utf-8") as f:
csv.writer(f).writerow(
["time", "project", "model", "prompt", "completion", "total"]
)
call_and_track(
"gpt-4o-mini",
"用一句话解释什么是 token",
project="demo",
)运行:
python track_usage.py如果一切正常,你会看到一行 token 输出,并且 usage.csv 里多了一条记录。这就是用量统计的最小闭环——不到五十行代码,但你已经比“月底看账单”的状态领先了一个量级。
第三步:从能跑到有用
跑通之后,几个低成本的升级方向:
- 按项目打标签:上面的
project参数就是为这一步准备的。区分“主站 / 内部工具 / 实验脚本”,一眼看出钱花在哪; - 定时汇总:用 cron 每天跑一次汇总脚本,把日报推到群里或发到自己邮箱;
- 设置阈值告警:单日消耗超过设定值就提醒,突增往往意味着死循环调用或 Key 泄露;
- 换用结构化存储:数据量上来后,把 CSV 换成 SQLite,一条 SQL 就能出周报。
结语
用量统计不是大厂才需要的能力。独立开发者和小团队预算更紧,反而更需要知道每一分钱流向了哪里。失败做法的共性是“统计让位于开发,直到账单爆炸”;正确路径只需要你今天花二十分钟:注册一个账号、拿到 Key、跑通上面这段代码,从下一条调用开始,每一枚 token 都有迹可循。
现在就可以开始:前往 https://api.thistoken.ai/register 注册账号,创建你的第一个 API Key,把统计跑起来。
---
不想折腾多家供应商的接入差异?在 https://api.thistoken.ai/register 注册,用一个 base_url 调用所有模型。