1. OpenClaw 本地部署后连不上模型?先搞清 gateway 与 doctor 的分工
OpenClaw 是一套可本地部署的 AI 助手运行框架,它把网关服务、模型路由、频道接入和技能插件拆成了清晰的模块。你装完之后真正每天要打交道的,其实就四类命令:gateway 管服务生命周期,doctor 做健康诊断,config 读写配置,models 管理模型列表。这四类命令配合起来,能覆盖从“服务起没起来”到“模型到底通不通”的完整排查链路。
适合谁看?适合已经在本地或容器里跑起 OpenClaw、但发现 Web 控制台里模型列表拉不出来、或者消息发出去没回应的开发者。我自己第一次部署时就卡在一个很典型的地方:gateway 显示 running,但 models 列表是空的,日志里反复出现连接超时。后来才意识到,问题不在 OpenClaw 本身,而在模型 endpoint 指向了一个当时网络环境根本访问不到的地方。
这篇就按“先诊断、再改配置、后验证”的顺序走。核心思路是:把 OpenClaw 的模型请求 endpoint 改到一个稳定可达的 OpenAI 兼容接口上,然后用 gateway 和 doctor 确认整条链路是通的。下面所有命令和配置片段都可以直接复制,路径和字段名保持和 OpenClaw 实际结构一致。
先明确一个概念:OpenClaw 的 gateway 是常驻后台进程,负责接收客户端连接、路由任务、调用模型。doctor 则是静态加动态的体检工具,会扫描配置文件、检查依赖、报告潜在风险。很多人一遇到问题就去翻 Web UI,其实最快的方式是回到终端,用openclaw gateway status和openclaw doctor先看两个最基础的信号。
还有一个容易被忽略的点:OpenClaw 的配置是分层的,config get/set用点号路径访问,比如gateway.port、models.default。当你把模型 endpoint 改到外部兼容接口时,改的其实是模型提供商那一层的 baseURL 和 apiKey。改完必须 restart gateway,否则内存里还是旧配置。这一步不做,后面 models 列表怎么拉都是旧的。
所以整篇的节奏是:先用 doctor 摸清现状,再用 config 精准改 endpoint,接着 restart 并用 gateway logs 观察,最后用 models 和一次真实请求验证。每一步都有可复制的命令,遇到报错也有对照表。
2. 把模型 endpoint 指向 TaoToken 的前置准备:Key、Base URL 与模型 ID
在动 OpenClaw 配置之前,先把三样东西准备好:API Key、Base URL、Model ID。这三件套是任何 OpenAI 兼容接入的通用前提,OpenClaw 也不例外。
Base URL 用https://taotoken.net/api,这是 OpenAI 兼容接口的根路径。注意不要在后面多加/v1之类的后缀,OpenClaw 的 provider 配置里通常会自己拼接路径,多写反而会 404。API Key 需要你在控制台里生成,地址是https://taotoken.net/console/api-keys,生成后复制保存,它只显示一次。Model ID 则取决于你想用哪个模型,可以在模型对话页面先确认可用模型名,地址是https://taotoken.net/models。
如果你还没注册,官网入口是https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=,注册后在 console 里就能拿到 Key。整个准备过程不需要改系统网络设置,也不需要额外装客户端,就是一个标准的 API 接入流程。
这里要提醒一个常见误区:很多人以为 OpenClaw 的模型配置只能通过 Web UI 改。实际上 CLI 的config set更精准,而且能写进脚本做自动化。Web UI 适合看状态,CLI 适合做变更。两者配合,才是比较顺手的运维方式。
另外,OpenClaw 支持多 provider。你可以保留原有的 provider,新增一个指向 TaoToken 的 provider,然后把默认模型切过去。这样万一新 endpoint 有问题,切回旧的就行,不用重装。这个“新增而非覆盖”的思路,在排查阶段特别有用。
准备好三件套后,先别急着改配置。用openclaw config path找到配置文件绝对路径,备份一份。然后openclaw config get models看看当前模型配置长什么样,心里有数再动手。这一步花不了一分钟,但能避免改错字段后到处找原因。
3. 可复制的 config 配置片段:把 OpenClaw 的模型请求改到 TaoToken
OpenClaw 的配置既可以用config set逐条改,也可以直接编辑配置文件。两种方式等价,但批量改推荐直接写配置文件,因为 provider 结构是嵌套的,逐条 set 容易漏字段。先执行openclaw config path拿到路径,通常在你的用户目录下的.openclaw里。
下面是一个指向 TaoToken 的 provider 配置片段,JSON 格式,字段名与 OpenClaw 实际结构保持一致。你可以把它合并进现有的models节点里,而不是整个替换:
{ "models": { "default": "claude-sonnet-4-5", "providers": { "taotoken": { "type": "openai-compatible", "baseURL": "https://taotoken.net/api", "apiKey": "sk-你的Key", "models": [ "claude-sonnet-4-5", "claude-haiku-4-5", "gpt-4o-mini" ] } } } }如果你更习惯用 CLI,等价的操作是这样几条命令。注意config set对嵌套对象和数组的支持有限,复杂结构还是建议直接编辑文件:
openclaw config set models.providers.taotoken.type openai-compatible openclaw config set models.providers.taotoken.baseURL https://taotoken.net/api openclaw config set models.providers.taotoken.apiKey sk-你的Key openclaw config set models.default claude-sonnet-4-5改完之后,用openclaw config get models.providers.taotoken确认写入成功。如果返回的是空对象或者报路径不存在,说明字段层级写错了,回去检查配置文件里的嵌套关系。OpenClaw 对未知字段一般不会报错,但也不会生效,所以确认这一步不能省。
还有一个细节:type字段的值必须是 OpenClaw 认识的 provider 类型。openai-compatible是通用兼容类型,适用于任何遵循 OpenAI 接口规范的 endpoint。如果你的 OpenClaw 版本里这个类型名不同,用openclaw doctor会提示可用的类型列表。
配置改完后不要忘了 restart。openclaw gateway restart会重新加载配置。如果你是用-d守护模式跑的,restart 后服务会自动回到后台。restart 之后立刻openclaw gateway logs follow,观察有没有加载 provider 时的报错。正常情况下你会看到类似 “provider taotoken loaded” 的日志行。
4. 验证 gateway 连通性与 models 列表拉取:一次真实请求走通
配置生效后,验证分三步:先看 gateway 状态,再拉 models 列表,最后发一次真实请求。这三步能分别确认服务层、配置层、网络层是否正常。
第一步,openclaw gateway status。输出里会显示 running 状态、PID 和 uptime。如果状态是 stopped 或者反复重启,先看openclaw gateway logs的最后几十行,通常是配置解析失败或者端口被占用。
第二步,openclaw models。这个命令会向配置里的 provider 发起一次模型列表请求。如果配置正确且网络可达,你会看到 taotoken 下面列出你在配置里写的模型 ID。如果列表为空,或者报 “failed to fetch models”,说明 baseURL 或 apiKey 有问题。这时候用openclaw doctor跑一次,它会明确指出是认证失败还是连接超时。
第三步,发一次真实请求。用openclaw agent --message "你好,请回复ok" --thinking low直接向智能体下指令。如果返回了模型回复,说明整条链路通了。这一步比看列表更有说服力,因为它走的是完整的推理路径。
如果你想更直观地确认模型本身可用,可以打开模型对话页面https://taotoken.net/models,在网页里直接发一条消息。网页能通、OpenClaw 也能通,就说明问题不在 endpoint,而在 OpenClaw 的某个配置字段。这种交叉验证能快速缩小排查范围。
实测下来,最常见的失败点是 baseURL 多写了/v1。OpenClaw 的 openai-compatible provider 会自己在 baseURL 后面拼/chat/completions,如果你写成https://taotoken.net/api/v1,最终请求就变成了/api/v1/chat/completions,路径不对自然 404。记住 baseURL 只写到/api。
验证通过后,建议把这次可用的配置片段存一份到你的部署脚本里。下次换机器或者重建容器时,直接套用,不用再从头试。这就是把运维经验固化成配置资产的做法。
5. 本篇常见报错排查:401、local proxy failed、reading choices 与 OAuth
排查阶段最有价值的就是对照真实报错。下面这几个是 OpenClaw 接入外部模型时高频出现的,每个都给出定位方法和处理方向。
401 Unauthorized:认证失败。先确认apiKey字段没有多余空格,再确认 Key 没有过期或被撤销。用openclaw config get models.providers.taotoken.apiKey看实际写入的值。如果 Key 是对的,检查 baseURL 是否指向了正确的环境。401 基本只和 Key 有关,和网络无关。
local proxy failed / connection refused:本地代理或网络层问题。OpenClaw 如果配置了本地代理,而代理没起来,就会报这个。检查配置里有没有proxy相关字段,如果有就临时去掉,直连测试。这个报错和 endpoint 本身无关,是本地环境问题。
reading choices 报错 / unexpected response:通常是返回体不是预期的 OpenAI 格式。可能原因有两个:baseURL 路径不对,请求打到了网页而不是 API;或者模型 ID 写错,服务端返回了错误结构。用openclaw gateway logs follow看原始响应体,一眼就能分辨。
OAuth 相关报错:如果你用的是需要 OAuth 的 provider,而 OpenClaw 里配的是 apiKey 模式,就会冲突。OpenClaw 的 provider 类型要匹配认证方式。指向 TaoToken 用的是 apiKey 模式,type 写openai-compatible,不要混用 OAuth 配置。
排查的通用顺序是:先openclaw doctor --fix,让它自动修掉配置缺失和路径错误;再openclaw gateway logs follow看实时日志;最后用openclaw models做一次端到端验证。大部分问题在前两步就能定位。
如果你用的是 Claude Code 类的编码工具,配置逻辑是相通的:Base URL、Key、Model ID 三件套缺一不可。Claude Code 的接入文档在https://taotoken.net/doc,里面有针对不同工具的配置示例。OpenClaw 的配置思路和它一致,只是字段名不同。
还有一个坑:改完配置忘了 restart。OpenClaw 的 gateway 是常驻进程,配置在启动时加载。你改了文件但没 restart,config get会显示新值,但实际请求还是用旧配置。这种“看起来改了其实没生效”的情况,最容易让人误判。
6. 从 gateway 到 doctor 的日常运维节奏与接入入口
把上面这些串起来,日常运维其实就一个固定节奏:改配置前先openclaw config path备份,改完openclaw gateway restart,然后openclaw doctor体检,最后openclaw models验证。四步走完,基本不会留下隐患。
对于长期跑编码任务或 Agent 的场景,可以考虑用 Coding Plan,地址是https://taotoken.net/coding-plan。它适合需要持续调用模型、对稳定性和额度有要求的用法。如果只是偶尔验证模型,用模型对话页面就够了。
接入文档在https://taotoken.net/doc,里面有完整的 Base URL、认证方式和各工具配置示例。API Key 管理在https://taotoken.net/console/api-keys。这三个入口覆盖了从拿 Key 到查文档的完整路径。
最后说一个实用技巧:把常用的 config set 命令写成一个 shell 脚本,换环境时直接跑。脚本里包含 baseURL、apiKey、default model 三条,再加一句 restart。这样每次重建实例,一分钟就能恢复到可用状态。这比手动点 Web UI 快得多,也不容易漏字段。
OpenClaw 的命令行设计其实很克制,gateway、doctor、config、models 四类各司其职。你不需要记住所有参数,只要理解它们的分工,遇到问题就知道该敲哪条命令。这套方法我在多个环境里试过,从本地容器到远程实例,排查路径都是一样的。