API 免费额度自动看门狗:不再担心额度耗尽

2026-07-03

痛点:免费额度的日常焦虑

我之前为几个功能配了不同的免费 API 服务——语音识别用百炼 ASR、网页抓取用 Tavily 和 Firecrawl。各有每月免费额度,理论上够用,但有一个烦人的问题:你永远不知道额度什么时候用完。

额度用完了服务自动停掉,你等到调用报错时才发现。然后手动查还剩多少 → 改配置切方案 → 恢复。整个过程有几分钟到几小时的不可用空窗期。

之前已经有一个手动版脚本 quota-check,能在终端输命令查额度,但每天得记得跑,而且查到了也只能自己手动处理。

真正的解法是:监控和恢复都不需要人参与。

解决方案:一个看门狗脚本

核心思路很简单:

  1. 每天定时检查所有关键 API 的剩余免费额度
  2. 额度低于阈值 → 自动切换到后备方案
  3. 推送每日报告,额度充足时静默

架构上就三个文件:

├── quota-watchdog.py         # 主脚本(开发编辑)
├── ~/.quota-watch.json       # 状态/配置
└── cron                      # 每天 08:00 定时触发

监控的两条链

ASR 语音识别:9 级回退链

百炼 ASR 提供多个语音识别模型,每个有独立的 36000 秒/月免费额度:

paraformer-realtime-v2 → paraformer-realtime-v1 → paraformer-v2 →
paraformer-v1 → paraformer-mtl-v1 → paraformer-realtime-8k-v2 →
paraformer-realtime-8k-v1 → paraformer-8k-v2 → paraformer-8k-v1

链上模型按体验排序(16kHz > 8kHz,realtime > offline,v2 > v1)。当前模型额度用完,自动退到下一个,直到找到有余量的。

网页内容提取:2 级回退链

tavily → firecrawl

Tavily 每月 1000 次免费,Firecrawl 每月 1000 积分。Firecrawl 额度用完后还有 keyless 模式——不传 API Key 时每个 IP 每天还有少量免费额度,作为最后的兜底。

代码核心逻辑

额度检查

通过各平台的监控 API 实时查询:

# Tavily 额度
requests.get("https://api.tavily.com/usage", headers={...})

# Firecrawl 额度
requests.get("https://api.firecrawl.dev/v2/team/credit-usage", headers={...})

# 百炼模型额度
subprocess.run(["qianwen", "usage", "free-tier", "--format", "json"])

配置切换

切换模型或后端时,需要修改对应的配置文件。这里有两个典型操作:

# 替换 .env 文件中的值
def write_env_value(key, value):
    pattern = re.compile(r"^" + re.escape(key) + r"=(.*)", re.MULTILINE)
    new_content = pattern.sub(f"{key}={value}", content)

# 修改 config.yaml 中的单个字段
def switch_extract_backend(backend):
    cfg = load_config_yaml()
    cfg.setdefault("web", {})["extract_backend"] = backend
    write_config_yaml(cfg)

每日报告示例

============================================================
Quota Auto-Fallback Watchdog
  Time: 2026-07-02 21:14:52
============================================================

── 语音识别 ASR ──
  当前模型: paraformer-realtime-v2 (剩余额度: 36000)
  ✅ ASR 模型额度充足,无需切换

── 网页内容提取 ──
  当前后端: tavily
  Tavily 剩余: 986
  Firecrawl 剩余: 0
  ✅ Tavily 额度充足,无需切换

── 总结 ──
  ✅ 一切正常

额度充足时不推送通知(静默模式),只有触发切换时才发提醒。

部署方式

用系统 cron 每天跑一次就够了:

# 每天 08:00 检查
0 8 * * * cd /path/to/scripts && python3 quota-watchdog.py

如果某个服务的额度消耗特别快,可以加到早 8 和晚 8 两次。

踩坑记录

1. CLI 认证过期

百炼的 qianwen CLI 工具存在一种特殊情况:长期不用后 Token 会过期,命令返回 exit=2,导致 ASR 那段额度检查无法执行。

解法:脚本中捕获这种情况,跳过 ASR 部分只检查其他项;同时记录提醒,提示用户用 qianwen login 重新授权。

2. cron 脚本路径限制

定时任务系统要求脚本必须在特定目录下(如 ~/.hermes/scripts/),不接受符号链接。如果你的工作源码在其他地方:

# 工作区保持一份方便编辑
~/workspace/quota-watchdog/watchdog.py
# cron 目录放一份副本,改完后手动同步
cp ~/workspace/quota-watchdog/watchdog.py ~/.hermes/scripts/quota-watchdog.py

3. 配置文件的格式保持

Python 的 yaml.dump 重写整个 YAML 文件会丢失所有注释,且字段排序可能改变。如果你的配置文件有大量注释或固定的结构,不要重建整个文件——只精确修改目标字段即可。

扩展:还能监控什么?

这套看门狗的逻辑可以扩展到更多维度:

  • LLM 模型额度:当前用的主力模型额度接近耗尽时自动切到备用模型
  • 综合状态面板:和系统健康巡检合并,形成一个统一的服务状态看门狗
  • 额度耗尽量预警:目前每天检查一次,可在低阈值时额外发即时通知

总结

这套看门狗的双链设计解决了免费 API 额度管理的核心矛盾:服务不能断,但也不想为额度付费。写法上也没用什么特殊技巧——就是检查余额、比较阈值、配置切换,三个环节串起来。有了它之后,我的免费额度列表再也没手动改过。你需要做的只是:

  1. 确定你要监控的 API 和后备方案
  2. 写一个检查+切换的脚本
  3. 挂 cron 让它自动跑

核心思路其实不复杂:与其等报错再修,不如让机器在你发现之前就修好。