模型都在降价,你的API账单却在涨?3步搭Token成本监控+预算告警,把每一分钱算明白

· 小白基础技术分享

今天 AI 圈最热闹的两件事:谷歌 Gemini 3.7 Flash 输入输出价格直接砍半,OpenAI 推 Ultrafast 模式把 GPT-5.6 Sol 提速 14 倍。大厂打价格战,看起来很美好——但很多开发者发现:模型降价了,自己每月的 API 账单反而在涨。原因很简单:用量涨得比降价快,而且你根本不知道钱花在哪。

模型都在降价,你的API账单却在涨?3步搭Token成本监控+预算告警,把每一分钱算明白封面

更扎心的是,很多团队连”哪个模型、哪个功能烧钱最多”都说不清,等到月底看账单才傻眼。真实案例:一个团队把 RAG 问答的检索范围从 10 个文档扩到 100 个,输入 Token 直接翻十倍,模型降价 50% 都盖不住成本的暴涨;另一个团队某天测试脚本进了死循环,一夜烧掉平时一个月的预算,等发现时账单已经出了。监控不是锦上添花,是省钱的第一步。 这篇教程教你 3 步搭一个 Token 成本监控 + 预算告警,把每一笔调用都算明白。

第 1 步:统一记录每次调用的 usage

用 OpenAI 兼容 SDK 时,在响应里拿到 `usage` 字段并落库。无论你用的是 Gemini、DeepSeek 还是别的模型,只要走 OpenAI 兼容接口,这一步代码都能复用:

import sqlite3, time
from openai import OpenAI

client = OpenAI()  # 密钥放环境变量,别写进代码

def call_and_log(model, prompt):
    resp = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": prompt}],
    )
    u = resp.usage
    conn = sqlite3.connect("cost.db")
    conn.execute(
        "INSERT INTO usage_log(model, input_tokens, output_tokens, ts) VALUES (?,?,?,?)",
        (model, u.prompt_tokens, u.completion_tokens, int(time.time())),
    )
    conn.commit()
    return resp.choices[0].message.content

第 2 步:按模型最新单价计算成本

维护一个价格表(单位:美元/百万 Token)。注意价格变化很快——Gemini 3.7 Flash 今天已经降到输入 0.75、输出 3.75,记得及时更新:

PRICES = {
    "gemini-3.7-flash": {"in": 0.75,  "out": 3.75},
    "gpt-5.6-sol":      {"in": 5.0,   "out": 30.0},
    "deepseek-v4-pro":  {"in": 0.5,   "out": 2.0},
}

def calc_cost(model, input_tokens, output_tokens):
    p = PRICES.get(model, {"in": 0, "out": 0})
    return (input_tokens / 1e6 * p["in"]) + (output_tokens / 1e6 * p["out"])

第 3 步:每日汇总 + 预算告警

每天定时跑一次汇总,超过预算就发告警。示例用最简的文件标记,生产环境可以换成钉钉/企业微信 webhook 或邮件:

def daily_report():
    conn = sqlite3.connect("cost.db")
    rows = conn.execute(
        "SELECT model, SUM(input_tokens), SUM(output_tokens) FROM usage_log "
        "WHERE ts > ? GROUP BY model", (int(time.time()) - 86400,)).fetchall()
    total = sum(calc_cost(m, i, o) for m, i, o in rows)
    print(f"今日成本: ${total:.2f}")
    if total > 20.0:  # 日预算阈值
        print("⚠️ 超预算!检查是否有死循环或异常调用")

成功验证

连续跑 3 次调用后执行 `daily_report()`,能看到成本随用量增长;把阈值临时调到 0.01,触发一次告警,确认链路通。正确标准:每笔调用有记录、成本可计算、超预算必告警。

进阶玩法:在 `usage_log` 表里加一列 `feature`,给每个业务功能打标签,比如”客服”、”RAG”、”总结”。一周后跑一个 `GROUP BY feature`,你会第一次看到”哪个功能在烧钱”的真相——八成会惊讶地发现,最贵的不是你以为的那个。有了这个数据,砍成本就不是拍脑袋,而是有依据的决策。

常见失败处理

usage 字段为空:部分模型流式输出(stream=True)不返回 usage,需要自行累计,或改用非流式统计。

价格表过期:模型降价后记得更新 `PRICES`,否则报表虚高。

漏记调用:所有入口都要走 `call_and_log`,别让裸 SDK 调用绕过日志。

多环境混用:测试和生产的调用都写进同一个表,可以在表里加 environment 字段区分。

这套方案适合日调用量百万 Token 以内的中小项目,直接跑在单机 SQLite 上零成本;如果每天几亿 Token,建议换 ClickHouse 或云日志服务。价格战是红利也是陷阱:不算清楚成本,降价只会让你花得更多。3 步搭好监控,明天就能看到真实的 API 账单。

🔥 关注LC智趣厅,教你用最小的成本把 AI 用到极致。

👇 关注不错过,明天还有实操干货。


— END —
LC 智趣厅 · 科技与生活的交点
ihygg.cn

Scroll to Top
微信公众号:LC智趣厅

扫码关注微信公众号
LC智趣厅