技术教程 · 阅读约 6 分钟

ChatGPT Pro 额度一天耗尽?教你用 Python 自动监控 API 用量,避免超额

ChatGPT Pro 额度一天耗尽?教你用 Python 自动监控 API 用量,避免超额

上周看到不少人在吐槽:ChatGPT Pro 20x 的周额度居然能一天用完。我自己也中过招——跑了个批量数据处理脚本,第二天发现额度见底,剩下 6 天只能干瞪眼。

问题在于 OpenAI 官方没有提供实时用量查询 API。你不知道自己还剩多少配额,只能等到用超了收到邮件通知才知道。对于需要跑自动化任务的人来说,这简直是盲开。

今天教你写一个 自动监控脚本,定时查询 API 用量,快到阈值时发通知。代码 50 行不到,能帮你省下不少冤枉钱。

痛点:官方 Dashboard 只能手动刷

OpenAI 的用量统计藏在 Dashboard 里,需要手动登录网页查看。如果你在跑批量任务(比如数据标注、RAG 索引构建),根本不可能每小时去刷一次页面。

更坑的是,用量数据有延迟。你以为还剩 30%,实际上可能已经超了 10%,只是数据还没更新。

方案:用非官方 API + 定时任务

虽然 OpenAI 没提供官方接口,但我们可以用兼容 OpenAI 格式的第三方服务来实现:

1. 换一个提供用量查询的 API 服务(比如国内直连的中转 API)

2. 写个 Python 脚本定时查询余额

3. 快到阈值时发钉钉/飞书/邮件通知

下面是完整代码,直接能跑:


import requests

import time

from datetime import datetime



# 配置参数

BASE_URL = "https://api2everything.xyz/v1"

API_KEY = "your_api_key_here"  # 替换成你的 key

ALERT_THRESHOLD = 10.0  # 余额低于 10 元时告警

CHECK_INTERVAL = 3600  # 每小时检查一次(秒)



def get_balance():

    """查询账户余额"""

    headers = {"Authorization": f"Bearer {API_KEY}"}

    try:

        # 大部分兼容 OpenAI 的服务都支持这个端点

        response = requests.get(

            f"{BASE_URL}/dashboard/billing/subscription",

            headers=headers,

            timeout=10

        )

        if response.status_code == 200:

            data = response.json()

            return data.get("hard_limit_usd", 0)

        else:

            print(f"查询失败: {response.status_code}")

            return None

    except Exception as e:

        print(f"请求异常: {e}")

        return None



def send_alert(balance):

    """发送告警(这里用打印模拟,实际可接钉钉/飞书 Webhook)"""

    message = f"⚠️ API 余额告警\n当前余额: ${balance:.2f}\n时间: {datetime.now()}"

    print("\n" + "="*50)

    print(message)

    print("="*50 + "\n")

    

    # 取消下面注释可接入钉钉机器人

    # webhook_url = "你的钉钉 Webhook"

    # requests.post(webhook_url, json={"msgtype": "text", "text": {"content": message}})



def monitor_loop():

    """主监控循环"""

    print(f"开始监控 API 用量,告警阈值: ${ALERT_THRESHOLD}")

    

    while True:

        balance = get_balance()

        

        if balance is not None:

            print(f"[{datetime.now().strftime('%H:%M:%S')}] 当前余额: ${balance:.2f}")

            

            if balance < ALERT_THRESHOLD:

                send_alert(balance)

        

        time.sleep(CHECK_INTERVAL)



if __name__ == "__main__":

    monitor_loop()

代码说明

1. get_balance():调用余额查询接口,大部分 OpenAI 兼容服务都支持 /dashboard/billing/subscription 端点

2. send_alert():余额低于阈值时触发,可以接入钉钉/飞书 Webhook 实现真正的推送通知

3. monitor_loop():主循环,默认每小时查一次(可调整 CHECK_INTERVAL)

为什么用第三方 API?

因为 OpenAI 官方根本不提供余额查询接口。但用兼容服务有几个额外好处:

  • 国内直连:不用担心网络问题
  • 更便宜:同样的 GPT-4o,比官方便宜 65%(SVIP 还能再打 7.7 折)
  • 余额永久有效:不像官方那样每月清零

我自己现在用的是 無量 API(api2everything.xyz),支持 300+ 模型,改一行 BASE_URL 就能无缝迁移。注册送 ¥1 可以先试试效果。

进阶:接入企业通知

如果你在公司跑批量任务,建议把告警接到钉钉/飞书:


def send_dingtalk_alert(balance):

    webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxx"

    data = {

        "msgtype": "markdown",

        "markdown": {

            "title": "API 余额告警",

            "text": f"### ⚠️ 余额不足\n- 当前余额: **${balance:.2f}**\n- 时间: {datetime.now()}"

        }

    }

    requests.post(webhook, json=data)

钉钉机器人创建方法:群设置 → 智能群助手 → 添加机器人 → 自定义。

总结

OpenAI 官方缺失用量监控 API 是个老问题了。如果你在跑批量任务或自动化流程,强烈建议:

1. 换成支持余额查询的兼容服务(比如無量 API)

2. 部署这个监控脚本,可以丢到服务器上用 nohup 后台运行

3. 设置合理的告警阈值,避免用超

最后,如果你也被 Pro 20x 的周额度坑过,评论区说说你的解决方案。觉得有用的话点个赞,后面我会分享更多 AI 开发的实战技巧。


試試無量 API:国内直连 OpenAI/Claude/Gemini 等 300+ 模型,比官方便宜 65%,注册送 ¥1 余额永久有效

👉 https://api2everything.xyz/?utm_source=zhihu&utm_medium=article&utm_campaign=daily&aff=wqUb