为 OpenClaw 提供免费模型智能路由服务,支持本地代理、自动配置、自动轮询、故障切换和配置零侵入。为用户构建不断扩充的免费token池
---
name: free-model-router
description: 为 OpenClaw 提供免费模型智能路由服务,支持本地代理、自动配置、自动轮询、故障切换和配置零侵入。在需要设置免费模型路由、配置 Provider、切换模型或诊断模型可用性问题时使用。
---
# free-model-router
> 免费模型智能路由 — 本地代理,自动配置,自动轮询,故障切换,配置零侵入
引导注册免费模型,永久在线,实现token自由。自动同步、自动检测、自动切换、自动救援。
## 数据流向说明
本技能的数据流向分为三层,所有行为均透明可控:
```
Layer 1: 用户 → OpenClaw → 127.0.0.1:5678 本地 Router
(数据不离开本机)
Layer 2: 本地 Router → 外部模型 Provider(OpenRouter、NVIDIA NIM 等)
(提示词和模型响应经过 Provider 服务器)
Layer 3: 本地 Router ↔ freemodel 控制服务器
(仅同步 provider 列表、模型 ID、健康状态,不含对话内容)
```
| 行为 | 说明 | 用户控制 |
|------|------|----------|
| **外部通信** | 向 `freemodel.eu.org` 等服务器注册匿名 API Key、拉取 provider 列表和模型元数据 | 仅同步 provider 配置,**不含任何用户对话内容** |
| **数据上报** | 可选的匿名健康状态上报(模型延迟、可用性) | **默认关闭**,可随时通过 `reporting off` 命令或管理面板开启/关闭 |
| **设备指纹** | SHA256(hostname + homedir + platform + arch) 不可逆哈希 | 仅用于区分设备,**无法反推原始信息** |
| **配置修改** | 仅在 setup 时向 `openclaw.json` 添加 free-model-router provider | 自动备份(最多3份)+ 失败自动回滚,幂等设计 |
| **本地代理** | `127.0.0.1:5678` 仅监听本地回环 | **不暴露公网**,仅接收 OpenClaw 内部请求 |
| **推荐码** | 完全自愿的推荐试用系统 | 不参与不影响任何免费功能 |
> **重要提示**:你的提示词和模型响应会被转发到外部模型 Provider(如 OpenRouter、NVIDIA NIM 等),请知悉。本技能不收集、不传输、不存储任何用户对话内容、提示词或模型响应数据。所有外部请求仅涉及模型配置元数据。
## 核心架构
- **OpenClaw 配置只改一次** — 仅在 setup 时写入 `free-model-router` provider 指向本地 Router (127.0.0.1:5678)
- **所有模型切换在 Router 层透明完成** — 运行期间不再触碰 openclaw.json,避免 Gateway 宕机
- **Round-Robin 轮询** — 默认策略在各 provider 主模型间轮询
- **自动故障切换** — 主模型故障自动切换到备模型,所有 provider 不可用时自动降级
- **事件通知系统** — 模型切换、故障等事件写入 events.json,由 cron 任务推送
## 安装幂等性
**本技能支持幂等安装 — 多次触发 setup 不会产生副作用。**
详见 [references/idempotency.md](references/idempotency.md)
核心要点:
- Router 已运行则跳过,OpenClaw 已配置则跳过
- 重复执行时仅同步 provider 列表,**不会覆盖用户手动设置的主备模型**
- 用户手动配置的 API Key 和主模型值始终保留
## 配置流程触发
安装/识别技能后,向用户展示:
**选项 A:现在设置(推荐)** — 回复 "现在设置"/"开始配置"
**选项 B:延后设置** — 回复 "延后设置"/"稍后再说"
配置完成后,Router 注册两个定时任务(北京时间 UTC+8):
- **事件通知检查**: 每天 10:00、15:00、20:00 检查一次(避免夜间打扰)
- **每日状态汇报**: 每天 9:00 自动汇报各 provider 运行状态
> **注意:** 如果已安装(Router 运行 + OpenClaw 已配置),setup 命令会输出当前状态摘要而非重新配置。
> **CLI 路径:** 下文所有命令中的 `<skill_dir>` 指技能安装目录。默认路径为 `~/.openclaw/skills/free-model-router`,具体路径取决于当前 OpenClaw 变种的安装目录和技能名称(例如 `~/.kimi-openclaw/skills/free-model-router`)。
## 命令执行约束
**禁止复合命令:** OpenClaw 的 exec 工具不支持 `cd ... && node ...` 或 `bash -c "..."` 等复合命令。所有命令必须使用直接调用格式:
```bash
node <skill_dir>/scripts/free-model-cli.js <command>
```
其中 `<skill_dir>` 的完整路径取决于当前 OpenClaw 变种的安装目录(例如 `~/.openclaw/skills/free-model-router` 或 `~/.kimi-openclaw/skills/free-model-router`)。如需切换目录,应使用 OpenClaw 的 `workingDirectory` 参数指定,而不是在命令中使用 `cd &&`。
## 常用命令
查看完整命令列表:
```bash
node <skill_dir>/scripts/free-model-cli.js help
```
## 意图匹配
| 用户说 | 动作 |
|--------|------|
| `/free-model-router setup`、"开始配置"、"安装免费模型路由" | Setup 流程 |
| `/free-model-router`、`/free-model-router status` | 运行 providers 查看状态 |
| `/free-model-router providers`、"有哪些免费模型provider" | 运行 providers |
| `/free-model-router models`、"有哪些免费模型" | 运行 models |
| `/free-model-router models xxx`、"xxx 有哪些模型" | 运行 models xxx |
| `/free-model-router providerApiKey xxx yyy` | 设置 provider API Key |
| `/free-model-router switchProviderPrimaryModel xxx yyy`、"换成 yyy" | 切换主模型 |
| `/free-model-router disableProvider xxx`、"禁用 xxx" | 禁用 provider |
| `/free-model-router enableProvider xxx`、"启用 xxx" | 启用 provider |
| `/free-model-router configureModelRole primary`、"设为主模型"、"作为主模型" | 设为 OpenClaw 主模型 |
| `/free-model-router configureModelRole fallback`、"设为备用模型"、"作为备用模型" | 设为 OpenClaw 备用模型 |
| `/free-model-router stop`、"停止 Router" | 停止 Router 进程 |
| `/free-model-router uninstall`、"卸载技能" | 卸载 free-model-router |
| "openclaw 挂了"、"模型不可用" | 检查 provider 状态 → 诊断 → 引导修复 |
## 意图识别规则
### 1. 用户主动切换模型
用户说 "换成/切换到/换用 + 模型名" → 解析后在已配置 Provider 中查找并调用 switchProviderPrimaryModel
**歧义处理:**
- 用户提供了完整模型 ID(如 `qwen/qwen3-coder:free`) → 直接切换
- 用户只说了模型名(如 "qwen3-coder") → 在已配置 Provider 中查找匹配:
- 仅一个 Provider 有 → 自动使用该 Provider 的完整 ID
- 多个 Provider 都有 → 请用户确认使用哪个 Provider
- 找不到匹配 → 提示用户输入完整 ID 或先运行 models 查看
- 用户未指定 Provider → 先运行 models 列出各 Provider 的主模型,请用户确认
### 2. 用户引导配置(首次)
触发 Setup 流程逐步引导,详见 [references/setup-guide.md](references/setup-guide.md)
### 3. 兜底机制
openclaw 无法回复时:1) 检查 Router 状态 → 2) 检查各 provider 状态 → 3) 如有故障切换,汇报结果
## Setup 流程
> **核心原则:** 多 Provider 优于单 Provider。引导用户尽可能提供多个 Key。
完整 6 步流程详见 [references/setup-guide.md](references/setup-guide.md)
**流程概览:**
1. 运行 `setup` 命令 — 启动 Router + 初始化 + OpenClaw 配置
2. 注册定时任务 — 事件检查(北京时间 08:00~22:00 每30分钟) + 每日状态汇报(北京时间每天9:00)
3. 展示 Provider 列表,引导设置 API Key
4. [重要]主动询问用户将free-model-router设为主模型还是备用模型,否则技能将不会生效
5. 展示各 Provider 主备模型,可选择切换
6. 完成配置
## 事件通知系统
Router 内置事件通知系统,自动推送模型切换、故障等事件。
详见 [references/event-system.md](references/event-system.md)
**核心机制:**
- 事件状态: `pending`(待推送) → `notified`(已推送) → `read`(已读)
- Cron 在北京时间 08:00~22:00 期间每 30 分钟读取 `status=pending` 且 `shouldNotify=true` 的事件
- 推送后调用 `mark-notified` 标记,避免重复推送
- **无事件时保持静默**: 如果没有待推送事件,Cron 不会向用户发送任何消息
**公告事件超链接:**
- 公告事件可能包含 `metadata.url` 链接
- 推送时使用 Markdown 格式展示: `[🔗 {action}]({url})`
- 详见 [event-system.md 公告格式](references/event-system.md#公告事件格式)
## 停止与卸载
### 停止 Router
```bash
node <skill_dir>/scripts/free-model-cli.js stop
```
- 读取 PID 文件并发送 SIGTERM 信号
- 自动清理 PID 文件
- 如果 Router 未运行,输出提示信息
### 卸载
```bash
node <skill_dir>/scripts/free-model-cli.js uninstall
```
- 自动停止 Router 进程
- 移除 OpenClaw 配置中的 free-model-router provider
- 卸载后请在 OpenClaw 技能管理界面中移除 free-model-router 技能以清理 cron 任务
## 注意事项
1. **API Key 安全:** 仅存本地 router-config.json,不发送到外部
2. **模型可用性:** 免费模型随时可能下架/收费
3. **配置安全:** 所有修改自动备份,失败自动回滚
4. **配置零侵入:** OpenClaw 配置仅在 setup 和配置模型角色时修改,运行期间不再触碰
## 📚 参考文档
| 文档 | 内容 |
|------|------|
| [references/setup-guide.md](references/setup-guide.md) | Setup 完整 6 步流程 |
| [references/event-system.md](references/event-system.md) | 事件通知系统详解 |
| [references/idempotency.md](references/idempotency.md) | 安装幂等性说明 |
don't have the plugin yet? install it then click "run inline in claude" again.