OpenClaw 无需更新即可使用新模型:改为三个模型列表来源
Use new models in OpenClaw without an update
OpenClaw 重构模型列表获取方式,约五周、80 个 PR,新模型不再等客户端发版。现在从三处取模型列表:每 4 小时重建的 catalog.openclaw.ai 目录(约 1000 个模型)、账号可用的模型列表,以及 PATH 上已安装的 Codex(需同主版本且握手通过,否则回退内置版本)。
官方复盘了无需发版即可接入新模型的架构改动,读者可以了解模型目录、账号列表和已装 Codex 三条路径的具体取舍。
OpenAI 发布 GPT-6.1 Sol 时,用 ChatGPT 账号登录 OpenClaw 的用户却选不到它。OpenClaw 内置的是 Codex 0.158.0,而 ChatGPT 只向 Codex 0.159.2 及更新版本提供 Sol,想改掉这个版本号,唯一的办法就是我们发一个新版本。
发布当天正是大家最想试用新模型的时候,却因为我们,用户不得不等。于是我们花了大约五周时间、提交了约 80 个 PR,重做了 OpenClaw 获取模型列表的方式。
本文介绍 OpenClaw 现在从哪三个地方获取模型列表、一个我们上线后又回滚的修复,以及还有哪些地方仍然需要发版。
以前模型是怎么到用户手里的
每个提供商插件都在一个清单文件里带着自己的模型列表,而这个文件是打包在 OpenClaw 安装包里的。提供商以插件形式发布,插件又绑定在某个版本上。
现在 OpenClaw 从三个地方填充你的模型列表。
1. 会自动更新的目录
我们在 catalog.openclaw.ai 托管了一份模型目录,每四小时由任务重建一次。它从 models.dev 获取模型数据,再叠加我们自己的清单、补上价格,然后发布结果。目前收录约 1,000 个模型。
运行中的 Gateway 会在后台检查是否有更新的目录,并实时切换过去。
- 之前:Gateway 下载新目录后仍继续使用旧目录,直到你重启它。
- 之后:新的轮次使用新目录。已经进行中的轮次会用启动时的目录跑完,因此它的模型列表和价格始终一致。
发布端还会移除已下线或提供商不再提供的模型。
例如,NVIDIA 已停止在其 API 上提供 2 个模型,但目录里仍然列着它们。
故障是怎么发生的
9 月 21 日,models.dev 把它的 kimi-for-coding 条目拆成了两个新条目。我们的发布程序把一个缺失的提供商当成致命错误,导致每次运行都失败。那段时间里,GPT-6 Sol 和 Luna 没能进入已有的安装。现在缺失提供商会记录一条警告,只有该提供商拿不到最新数据。
2. 你的账号列出的,你就能选
目录知道公开存在哪些模型,你的账号知道你能用哪些。当你登录某个提供商时,OpenClaw 会向它请求你的模型列表,并显示其中所有对话模型,包括比你安装版本更新的模型,或只有你的账号能访问的模型。
- OpenAI API key。之前:
Unknown model: openai/gpt-5.2,尽管账号里列出了它。之后:账号列出的对话模型会出现并可运行。 - Anthropic API key。之前:新的 Claude 模型要等 OpenClaw 发版才会出现。之后:只要 Anthropic 的模型列表返回它,它就会出现。
- Claude Code。之前:一份由我们维护的固定列表。之后:Claude Code 为你的账号报告的模型菜单。
- GitHub Copilot。之前:
kimi-k3第一轮就因unsupported_api_for_model失败。之后:我们会读取每个模型接受哪个端点,并使用那个端点。 - Grok 订阅。之前:
grok-4.7-build-fast提供两档思考级别,关闭和 ultra。之后:按它的列表说明,提供 low、medium、high 和 xhigh。 - Ollama。之前:你运行
ollama pull,模型却始终不出现。之后:下次刷新时它就会出现。 - OpenCode Go。之前:你的账号可用的四个模型缺失。之后:列表中每个模型都会出现。
这项工作有一半讲的是模型能做什么。OpenClaw 过去会根据模型名称来猜测思考等级和请求格式,一旦遇到从未见过的新模型就会失效。其实服务商已经在自己的列表里公布了这些信息,所以我们改为直接从那里读取。
3. Codex 版本问题
这就是文章开头提到的 Sol 缺陷。ChatGPT 根据客户端上报的 Codex 版本决定提供哪些模型。版本旧,拿到的列表就短。
第一次尝试:上报最新的 Codex 版本
我们最初的修复很简单:向 npm 查询最新的 Codex 版本号,在拉取列表时上报这个数字。Sol 出现在了选择器里。
一次教训
可惜的是,列表请求上报的是 0.161.0,但对话轮次仍然跑在随附的 0.160.0 上,而这个二进制文件会在每次请求时上报自己的版本。需要更新版本的模型会出现在选择器里,然后以 HTTP 400 失败。我们只是把失败从选择器挪到了第一条消息,这更糟。于是我们回滚了。
现在的发布方案
OpenClaw 会在你的 PATH 上寻找 Codex。如果它是稳定版、比随附版本新且主版本号相同,OpenClaw 就会与它做一次真正的握手。如果握手通过,同一个二进制文件负责拉取模型列表并运行你的对话轮次。任何一步失败,OpenClaw 就使用随附的 Codex。它绝不会替你安装任何东西。
这是在装有 Codex 0.162.1 的 Mac 上测试运行时,Gateway 的日志行:
[agent/embedded] Codex app-server: using installed ~/.local/bin/codex 0.162.1 (newer than bundled 0.161.0)现在只要更新全局 Codex,就足以用上需要它的模型。
一个不再缩水的列表
找到模型是一个问题,让它们留在屏幕上则是另一个问题。过去,列表会因为与用户毫无关系的原因丢失模型。
OpenRouter 超时一次
- 之前:466 → 3 个模型。在有人手动刷新之前,它们一直消失。
- 之后:它会自行重试。首次在 30 秒后,之后间隔逐渐拉长,最长 30 分钟。
Gateway 切换到新目录
- 之前:599 → 54 个模型,在生产 Gateway 上最长持续四分钟。
- 之后:全程保持 599。旧列表会一直保留,直到新列表完整。
你更改默认模型
- 之前:68–142 秒。Gateway 在重新加载每个大型插件时会卡住。
- 之后:0.6–1.4 秒。它会复用已经加载的插件。
选择器现在也会立即打开。它们先显示 OpenClaw 已知的模型,其余的在后台补齐。过去它们要等发现流程完成,最长五秒。
一千个模型太多了
一旦所有模型都显示出来,列表就会变得很长。仅 OpenRouter 就有 466 个。因此目录现在为每个服务商附带一份简短的推荐列表,选择器会把它放在最前面。
这是我们自己某个 Gateway 上的同一个选择器。在 OpenAI 分组中,当前模型排在最前,然后是两个推荐模型,其余 33 个则收在一行后面。
推荐列表由人工整理,并根据我们自身的经验以及多种基准测试每天更新。
要点
- 列出某个模型的版本,也必须能运行它。报告的是一个 Codex 版本、实际运行的却是另一个,只会把故障从选择器挪到第一条消息。
- 能力信息要从列表里读,而不是从名字里猜。服务商的列表本来就写明了某个模型支持哪些思考级别和端点。靠模型名字推断的规则,遇到第一个没见过的模型就会失效。
- 保留上一份可用的列表。刷新失败或切换目录,都不该让选择器里的模型比之前更少。
- 一个来源出问题,不该拖累其他来源。models.dev 上一个改了名的服务商曾让所有服务商的目录更新全部停摆,直到我们把它降级为警告。
仍需发版才能解决的问题
- 如果你没有安装更新的 Codex,那么你看到哪些 ChatGPT 模型,仍由内置版本决定。
- 比目录更新的模型还没有价格。OpenClaw 会把它的成本显示为未知,并在目录跟上之前,用保守的默认限制来运行它。
想看你当前的安装现在能访问到什么,运行 openclaw models list --refresh。
下一步
我们会持续改进体验,并支持更多服务商。如果你的账号里列出了某个模型,而 OpenClaw 没有显示,请提交 issue,并附上该命令的输出。
致谢
本文由 Ayaan Zaidi 撰写。感谢 @vincentkoc 贡献目录 v2 和按路由定价,@ly85206559 贡献 models.dev 服务商别名,@mcooks-cmd 修复目录 worker 的内存问题,以及 @steipete 让多服务商目录刷新更快。
主要 PR:来自 models.dev 的目录、实时目录接入、账号模型列表、已安装 Codex 的选择、发现重试、选择器中的推荐模型。
来源:OpenClaw:Blog · openclaw.ai