实测工具调用并监控模型故障切换
model-radar会实际测试OpenRouter免费模型能否调用工具,而非只相信能力声明;model-canary监控付费模型与余额,在不可用时切换到更便宜或本地模型。项目还区分失败与限流、超时状态,并提供无凭据演练流程。
AI 深度解读
免费模型标着支持 tools,Agent 真调用时却只收到一段文字,后面的流程就走不下去了。model-radar 针对这个落差做了一件直接的事:让新模型实际发起工具调用,再判断能不能用;配套的 model-canary 则监测付费模型和余额,在出问题时切换备用模型。
这套方案值得看的地方,是把「发现可用模型」和「维持 Agent 运行」拆开处理。不过,作者每周执行的安装验证没有 API key,不能把它当成在线探测和故障切换都已通过验证。
支持 tools,为什么还要实际调用一次
model-radar 会列出 OpenRouter 上的免费模型,并要求每个新发现的模型实际发起一次工具调用(tool call)。它检查的是模型有没有做出这个动作,而不是让模型回答「你是否支持工具」。
模型声明支持工具,不等于它会按请求发起工具调用。
作者提到,之前试过一个免费模型,每次请求都有回复,却一次工具都没调用。对需要调用函数、继续执行任务的 Agent 来说,有文字回复还不够。
探测结果分为 PASS、FAIL 和 BUSY。其中,BUSY 表示限流或超时,不作为能力判定,留到下次重试。作者在 10 月 8 日的一次探测中测了 8 个模型,4 个通过、2 个返回 403、2 个处于忙碌状态。这是一次实测记录,不能推导成免费模型普遍只有一半可用。
首次去掉 --dry-run 运行后,工具会保存基线,之后只探测没见过的模型。这样能减少重复请求,但也要分清:它发现新模型的机制,并不等于持续复测所有旧模型。
安装容易,先验证检查失败能不能被发现
运行要求是 Python 3.11 或更新版本,不需要通过 pip 安装依赖。作者称配置约需十分钟,安装入口如下:
git clone https://github.com/casareanderson/model-radar.git && cd model-radar
cp config.example.toml config.toml
./bin/model-radar --help
注意第二行:需要先从示例生成 config.toml,后续备用模型的配置也放在这里。
作者建议先不加凭据,检查两个命令如何处理无法检查的情况:
./bin/model-radar --dry-run # 两个来源均提示无凭据并跳过,基线为空
./bin/model-canary --dry-run # 提示缺少 OPENROUTER_API_KEY,退出码为 1
关键是第二行的退出码 1。如果 canary 根本没执行检查,定时任务就应该能发现异常,不能把这轮运行当成成功。

之后通过 export OPENROUTER_API_KEY=sk-or-... 设置凭据,再运行 ./bin/model-radar --dry-run 查看真实探测结果。
作者每周会在全新 Ubuntu 环境执行指南,但该环境没有 API key,因此只验证安装、配置、帮助和无凭据行为。真实探测与 canary 故障切换,需要使用者自己的 OpenRouter 账户。
故障切换要区分硬失败和暂时拥堵
model-canary 监测 Agent 使用的付费模型以及账户余额,在模型或余额无法继续支撑使用时,沿配置好的备用顺序切换到更便宜的模型或本地模型。
接入时,需要指向 Agent 使用的 JSON 文件或 hermes-agent profiles,在 config.toml 中配置付费备用模型和本地模型,再通过 cron 每隔几小时运行。
它不会遇到一次异常就切换:连续两次硬失败才沿备用顺序降级,超时和 429 都不计入。
这个取舍有现实意义。限流和网络超时未必代表模型已经不可用,立即切换可能让配置反复变化。但「每隔几小时检查」也决定了发现故障的速度,不能直接替代请求执行过程中的重试和兜底。原文没有展开硬失败的完整分类,也没有说明切换配置时如何影响正在运行的 Agent。
我的判断
我认可它先测行为、再决定是否使用的思路,也认可把 BUSY 与失败分开。相比只看模型列表里的能力声明,这能多排除一类「有回复,但没完成工具调用」的问题。
通过工具调用探测,只能证明通过了这项检查,不能证明适合整个业务。
原文没有给出复杂参数、多轮工具调用或实际任务完成率的对照数据,也没有展示故障切换的成功率。十分钟安装是作者的经验,自动降级的可靠程度还需要在自己的配置里验证。
它适合作为模型筛选和运行维护的一层检查。请求内重试负责处理当前任务,定时 canary 负责发现持续故障,两者解决的问题不同。
能拿来做什么
- 给依赖工具调用的日常 AI 编程 Agent 选择免费模型时,先做真实调用探测,再把通过的模型加入候选列表。
- 接入 cron 前,先运行两条无凭据命令,确认调度系统能识别 model-canary 的退出码
1,并让维护者看到检查失败。 - 为正在使用的付费模型配置备用顺序,并用自己的 OpenRouter 账户验证切换行为;涉及本地模型时,还需要核实具体接入配置,原文没有展开。
- 将
BUSY留待重试,同时保留请求执行时的重试机制,避免把每隔几小时运行的检查当成即时恢复能力。