模型限流、超时、看不了图? modlens-race:多模型竞速看图,谁快用谁的
🎯核心总结 单模型再强也有失手的时候,可靠性不靠某个组件完美,而靠没有单点。 modlens-race 就是把 […]
一个真实场景开头: 晚上十点,你让 AI 帮忙看一批截图,第一个模型限流了,第二个模型转了四十秒说"我做不到",你盯着屏幕想——我就要看张图,怎么这么难。
这篇文章介绍我做的开源小工具 modlens-race。它不发明新东西,只做一件事:把"看图"从押注一个模型,变成让一群模型赛跑。
📦 GitHub:github.com/heyfine/modlens-race
一、先说 modlens 本身
用过 modlens 的朋友知道,它是个很好用的视觉识别 CLI:一张图丢进去,它调模型给你结构化的结果——内容摘要、OCR 文字、版面布局,直接就能喂给下游程序。你不用自己对接各家 API,配置里写好 provider 就行。
图片 → modlens(调你配置的那个模型)→ 结构化结果
简单、直接。但你有注意到吗,这个流程里只有一次机会。你配置了哪个模型,它就只找哪个模型。于是下面这些事,你大概率遇到过:
二、modlens-race:让模型们赛跑
modlens-race 的思路简单粗暴:既然一个模型不可靠,那就同时多叫几个。
┌── 模型 A ──┐
一张图片 ──────┼── 模型 B ──┼──→ 谁先成功,用谁的
└── 模型 C ──┘ 其余的立刻杀掉
你把几个模型写进一个"阵容"文件,modlens-race 会把它们同时派出场。任何一家先返回成功结果,比赛立即结束——赢家 result 交付,输家进程当场杀掉,不等待、不浪费。
三、和原版 modlens 对比着看
| modlens 单模型模式 | modlens-race 竞速模式 | |
|---|---|---|
| 看一张图找谁 | 你配置的那一个 | 阵容里所有模型同时上 |
| 模型限流/失败 | 流程卡住或报错 | 无感,别的模型已经在跑了 |
| 慢模型拖后腿 | 整条流程陪它等 | 总耗时 ≈ 最快成功的那家 |
| 配额消耗 | 1 个模型,失败了重来 | 胜出瞬间杀掉输家,几乎不浪费 |
| 一个模型总失败 | 你手动换配置 | 自动被其他模型顶上 |
| 出了问题怎么查 | 看报错 | 战报 JSON:谁赢、谁输、输在哪、耗时多少 |
四、最改变体验的五个亮点
1. 限流从"事故"变成了"背景噪音"
以前主力模型一限流,流程就停。现在它限流的那几百毫秒里,别的模型可能已经把结果送回来了。你甚至不会注意到今天限流了——这就是竞速模式最微妙的地方:
2. 慢模型再也拖不垮你
竞速的总耗时约等于最快成功那家的耗时。主力模型今天发挥好,10 秒出结果,比赛 10 秒结束。它今天抽风转 60 秒?隔壁便宜的小模型 12 秒就交卷了,没人等它。
3. 梯队模式:花一个模型的钱,买 N 个模型的保险
这是我个人最喜欢的功能。设一个梯队间隔(比如 15 秒),最快的模型先起跑,15 秒没动静才放第二个进场,以此类推。
4. 独立端点:不同家的 key 各玩各的
阵容里每个模型可以带自己的 baseUrl 和 apiKey,运行时互相隔离,互不干扰。你可以让 A 走官方 API、B 走某个中转站、C 干脆蹭另一家的 CLI,配置层面完全不用迁就谁。
5. 战报:出了问题不再猜
每场竞速输出一份 JSON 战报,每个模型的成功/失败/耗时/死因一目了然:
{
"ok": true,
"race": {
"winner": "openai/glm-5.3",
"durationMs": 8420,
"attempts": [
{ "provider": "openai", "model": "glm-5.3", "won": true, "durationMs": 8420 },
{ "provider": "gemini-api", "won": false, "error": "rate limited" }
]
},
"result": { "summary": "...", "ocr": "...", "layout": "..." }
}
哪家长年垫底,一目了然,下次把它从阵容里换掉就是。
五、谁适合用
六、两分钟上手
需要 Node.js ≥ 24 和一个 modlens CLI,然后:
git clone https://github.com/heyfine/modlens-race.git
cd modlens-race && pnpm install
# 写一份你的阵容(key 只放本地,不会被提交)
cp config/race.example.json race.json
# 跑一场
pnpm race 截图.png --config race.json
阵容就是一份 JSON:超时、梯队间隔、加几个模型。想让它接管 DSH 里的 AI 看图,一条 pnpm run install:dsh 完事。
写在最后
modlens 解决了"怎么调模型看图",modlens-race 解决"看图这件事怎么才可靠"。一个管执行,一个管调度,叠在一起用,看图从一个"偶尔掉链子的环节"变成"你几乎不用想的环节"。