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