免费模型雷达
成品公式:用户问"现在还能白嫖哪些模型" → 拿到一张带上下文、工具支持、上线日期的免费清单,以及相比上次的变化。
解决的问题:OpenRouter 上有几百个模型,免费档一直在变——新模型上架、老模型下架、最坑的是某个一直免费的模型突然开始计费,用到一半报余额不足。手动翻网页看不到"和上周比变了什么",只能靠定期存一份清单再比对。
零依赖、不需要 API Key(/api/v1/models 是公开接口),全程本机。
功能
| 能力 | 说明 |
|---|---|
| 免费清单 | 标价输入输出都为 0 的模型,按上下文排序 |
| 工具调用标记 | 支持 function calling 的标 ✅,这类才能接 Agent 工作流 |
| 变化对比 | 与上次扫描比:新上架 / 下架 / 由免费转收费 / 由收费转免费 |
| 精确过滤 | --tools 只看能接 Agent 的,--min-ctx 卡上下文,--think 只看推理模型 |
| 两种输出 | 人看的 Markdown 表格,或 --json 给程序用 |
脚本里的几个判断(agent 不用操心):
- 只算"纯文字输出"的模型。
text+audio、text+image这类多模态生成模型(如音乐生成)也返回文字,但对选型没用,会把真正能写代码的模型挤下去,已排除。 - 价格按 $/百万 token 展示。接口给的是 $/token(如
1e-06),人看着没感觉,已换算。 - 历史存 60 次扫描,可以回答"这个模型什么时候开始收费的"(翻
~/.free-model-radar/history.json)。
工作流程
- 先扫一遍看现状:
bash
SKILL_DIR="$HOME/.workbuddy/skills/nhao-free-model-radar"
[ -f "$SKILL_DIR/scripts/radar.py" ] || SKILL_DIR="$PWD/.workbuddy/skills/nhao-free-model-radar"
R="$SKILL_DIR/scripts/radar.py"
python3 $R --tools --min-ctx 100000
- 按用户场景加筛选:
- 要接 Agent / 写代码 →--tools
- 要读长文档 →--min-ctx 200000
- 要看推理能力 →--think
- 只想看最新的 →--sort new - 第一次运行会说明"已存基线",这是正常的。第二次起的报告才会出现"新上架 / 变收费"段落。
- 回答"能不能白嫖"时必须带一句前提:标价为零是接口里的客观事实,但 OpenRouter 的免费档普遍有速率限制(每天若干次),部分还要求账户里有过充值记录。所以"免费"= 不计费,不等于"不限量"。这点不提醒,用户跑批量任务时会被限流打回来。
- 要每天自动盯:用 WorkBuddy 定时任务跑
python3 $R -o <每日报告路径>,把"变收费"段落作为是否打扰用户的依据。 - 交付:给结论而不是整张表。例如「现在 17 个免费模型,16 个支持工具调用;上下文最大的是 A 和 B(都是 1M);最近新上的是 C(10/21 上线)」。用户要完整清单时再贴表格或给报告路径。
命令参考
R="$SKILL_DIR/scripts/radar.py"
python3 $R # 全部免费模型
python3 $R --tools # 只看支持工具调用的
python3 $R --tools --min-ctx 200000 # 又要能接 Agent,又要 ≥200K 上下文
python3 $R --think --sort new --limit 10 # 最新上线的推理模型,只看前 10 行
python3 $R --json # JSON 输出(含 new_free / became_paid 等字段)
python3 $R -o ./每日雷达/2026-10-27.md # 写 Markdown 报告
python3 $R --no-save # 试跑,不写入历史(不影响下次对比)
历史文件位置:~/.free-model-radar/history.json(可用环境变量 FREE_MODEL_RADAR_HOME 改到别处)。
示例
例 1:选一个免费模型接 Agent
> 用户:我想不花钱接个能调工具的模型,有推荐吗
> →
> bash
> python3 $R --tools --min-ctx 100000 --sort new
>
> 回答:「支持工具调用、上下文 ≥100K 的免费模型有 16 个。最近上线的是 recursive/flint-v1.0:free(262K 上下文,10-21 上线)。要注意免费档有每日次数限制,跑批量会被限流。」
例 2:查某个免费模型为什么不能用了
> 用户:上周还能白嫖的 xxx:free 怎么报错了
> →
> bash
> python3 $R | head -40
>
> 报告里若出现在 "⚠️ 原来免费、现在收费了" 段落 → 直接告诉他「它已经改成 $X/百万 token,不再是免费档」。若出现在"消失"段落 → 「已下架或改名」。
例 3:每天自动盯,涨价的才算事
> 配一条每天早上的定时任务:
> bash
> python3 $R -o "$HOME/每日雷达/$(date +%F).md"
>
> 只有报告里出现"变收费"时才提醒用户,其余情况一句话带过("今天 17 个免费模型,没变化")。
边界
- "免费"不等于"无限用"。标价为零指的是不计费;能否跑通还取决于该模型的免费额度、速率限制、以及账户是否需要有过充值。脚本测的是标价,不是可用性。这句话必须在回答里说,否则用户会以为踩了坑。
- 不评测模型好坏。能说"有 16 个免费且支持工具调用",不能替用户断言"哪个最聪明"。要对比效果,让用户自己拿同一道题试。
- 不管本地模型。用户问"我 12G 显存能跑多大模型",那是量化与显存的问题(llama.cpp 的事),不是这个技能的范围。
- 接口结构变了会失效。脚本依赖
/api/v1/models返回{data:[...]};OpenRouter 改结构时会明确报"接口返回结构不认识",不会静默给空表。 - 不做自动下单/充值。只读取公开价格,不涉及账户操作。
注意事项
| 现象 | 原因与处理 |
|---|---|
| 报"取不到模型清单" | 网络不通或需要代理。这个接口国内直连常失败,走代理即可 |
| 报"接口返回结构不认识" | OpenRouter 改了返回格式,脚本需更新,不是用户操作问题 |
| 数字和 OpenRouter 网页对不上 | 网页可能按展示分组或标"促销",脚本读的是接口原始价格字段 |
| 免费数量比印象里少 | 已排除多模态生成模型(text+audio / text+image),只看纯文字输出 |
| 报告里"变收费"为空 | 说明这段时间真没有免费模型转收费,是好事,不是没检测到 |
| 想清空历史重新开始 | 删掉 ~/.free-model-radar/history.json 即可,下次运行会重建基线 |