1. openclaw gateway 无法启动:先看清报错到底在说什么
openclaw gateway 是 openclaw 这套本地 Agent 运行时的核心进程,它负责把 CLI、Dashboard、模型通道串起来,默认监听ws://127.0.0.1:18789。当你在终端敲下openclaw gateway却看到RPC probe: failed、gateway closed (1006 abnormal closure)这类字样时,说明 gateway 进程根本没把 WebSocket 服务拉起来,或者拉起来了但客户端连不上。这个场景特别适合两类人:一类是刚装完 openclaw、想跑通第一次连通性验证的新手;另一类是已经把 openclaw 接入了统一 Key 通道(比如 TaoToken),结果 gateway 起不来、模型调用全断的老用户。
我先把结论放前面:gateway 启动失败,九成不是模型通道的问题,而是配置文件路径、端口占用、鉴权字段、通道 base_url 这四类。其中路径问题最隐蔽,因为日志里往往只给你一行Config: C:\Users\xxx\.openclaw\openclaw.json,看起来正常,实际上用户名里的中文在 Node 编译/读取时被转成了乱码,gateway 拿着一个不存在的路径去加载配置,自然起不来。下面我会给出一份可直接复制的config.toml骨架,再按「启动前检查 → 逐步验证 → 常见错排查」的顺序走一遍,最后用 TaoToken 的统一 Key 通道做一次真实连通性验证。
2. TaoToken 前置:统一 Key 通道为什么能救 gateway
openclaw 本身不生产模型能力,它需要你告诉它「模型请求往哪发、用什么 Key 鉴权」。传统做法是每个模型厂商配一套 Key,openclaw 的 config 里就会堆一堆 provider 段,任何一个字段写错,gateway 启动时校验不过就直接退出。TaoToken 的思路是把这些通道收敛成一个统一入口:你只需要一个 Key、一个 base_url,就能在 openclaw 里调用多家模型。对 gateway 排错来说,这带来两个直接好处——配置面变窄,出错点从「N 个 provider」降到「1 个通道」;鉴权逻辑统一,401/403这类错误一眼就能定位到 Key 而不是某个厂商的私有字段。
你需要提前准备的东西只有三样:一个 TaoToken 账号、一个 API Key、以及确认你的 openclaw 版本支持自定义base_url。Key 在控制台的 API Keys 页面生成,生成后立刻复制,页面刷新就看不到了。如果你还没建过 Key,可以走这个入口:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。拿到 Key 之后先别急着写进 config,用一条 curl 验证通道本身是通的,这一步能帮你把「通道问题」和「gateway 问题」彻底分开。
curl -sS https://taotoken.net/api/v1/models \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ | head -c 400如果这条命令返回了模型列表 JSON,说明 Key 和通道都没问题,接下来 gateway 起不来就纯粹是本地配置或环境的事。如果这条就报 401,那先解决 Key,别去折腾 gateway。
3. 可复制的 config.toml 骨架与启动前检查项
openclaw 的配置有两种常见形态:早期版本用openclaw.json,较新版本支持config.toml。下面这份骨架是按 TOML 写的,字段名以你本地openclaw --version对应的文档为准,但结构可以直接套。核心思路是:gateway 段管监听和鉴权,channel 段管模型通道,两者解耦。
# ~/.openclaw/config.toml # gateway 监听配置:端口、绑定地址、鉴权 token [gateway] host = "127.0.0.1" port = 18789 # 这个 token 用于 Dashboard 和 CLI 连接 gateway,自己生成一串随机值 auth_token = "换成你自己的32位随机串" # 日志级别,排错时用 debug,稳定后改 info log_level = "debug" # 统一 Key 通道:所有模型请求走这里 [channel.taotoken] type = "openai-compatible" base_url = "https://taotoken.net/api/v1" api_key = "sk-你的TaoTokenKey" # 默认模型,按你实际订阅的填 default_model = "claude-sonnet-4-5" # 超时,gateway 启动时会做一次探活,太短会误判失败 timeout_ms = 30000 # 运行时配置 [runtime] # 关键:配置目录不要放在含中文的路径下 config_dir = "C:/openclaw/config" data_dir = "C:/openclaw/data"写完之后,启动前按这个清单过一遍,任何一项不过都别急着敲启动命令:
| 检查项 | 命令 / 动作 | 期望结果 |
|---|---|---|
| 端口是否被占 | netstat -ano | findstr 18789 | 无输出,或输出里不是你上一个 gateway 进程 |
| 配置路径是否含中文 | 看config_dir和实际文件路径 | 全英文、无空格 |
| Key 是否有效 | 上面那条 curl | 返回模型列表 |
| TOML 是否合法 | openclaw config validate | 输出 OK |
| Node 版本 | node -v | 20 LTS 及以上 |
注意:
auth_token不要留空,也不要用123456这种。gateway 在auth_token为空时,部分版本会直接拒绝启动,日志里只给一句gateway closed,很容易被误判成端口问题。
4. 逐步验证:从 gateway 拉起到一次真实连通性
配置检查通过后,按顺序执行下面四步,每步都有明确的成功标志,哪一步断了就停在哪一步排查。
第一步,前台启动 gateway,把日志直接打到终端,方便看实时输出:
openclaw gateway --config "C:/openclaw/config/config.toml" --port 18789成功标志是看到类似gateway listening on ws://127.0.0.1:18789和RPC probe: ok。如果还是RPC probe: failed,先别关终端,看它上一行打印的Config:路径是不是你写的那个。如果路径里出现鍙舵櫒这种乱码,说明中文用户名问题复现了,直接跳到第 5 节。
第二步,另开一个终端,用 CLI 探活:
openclaw status --url ws://127.0.0.1:18789 --token "你的auth_token"成功会返回 gateway 版本、已加载的 channel 列表、以及taotoken通道的连通状态。这一步能过,说明 gateway 和通道都活了。
第三步,发一次真实模型请求,验证端到端:
openclaw run --url ws://127.0.0.1:18789 --token "你的auth_token" \ --model claude-sonnet-4-5 \ --prompt "只回复两个字:通了"期望输出就是「通了」。如果这一步报channel timeout,多半是timeout_ms太短或 base_url 写错;报401则是 Key 的问题,回到第 2 节的 curl 复验。
第四步,打开 Dashboard 做可视化确认。启动日志里会打印一行Dashboard URL: http://127.0.0.1:18789/#token=...,直接复制到浏览器。Dashboard 能加载出通道状态页,且taotoken显示绿色,就算完整跑通了。如果你更想先在网页里手动试一次模型对话,可以走模型对话入口:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite ,用它交叉验证同一个 Key 是否正常。
5. 本篇常见错排查:端口、鉴权、通道、中文路径
错误一:gateway closed (1006 abnormal closure),且日志里 Config 路径含乱码。这是最典型的场景。Windows 用户名是中文时,Node 在拼接%APPDATA%路径的过程中可能把中文转成 GBK 乱码,gateway 拿着C:\Users\鍙舵櫒\.openclaw\去读配置,文件不存在,进程直接退出。解决办法有两个:一是新建一个纯英文用户名的 Windows 账户来跑 openclaw;二是不依赖默认路径,显式指定配置和数据目录,并用独立命令行启动:
node "C:\openclaw\node_modules\openclaw\dist\index.js" gateway \ --config "C:/openclaw/config/config.toml" \ --port 18789注意这里把 openclaw 装到了C:\openclaw而不是默认的%APPDATA%\npm\node_modules,就是为了绕开中文路径。
错误二:RPC probe: failed但 Config 路径正常。先查端口占用,netstat -ano | findstr 18789,如果有残留进程,taskkill /PID <pid> /F干掉再启。再查auth_token是否为空,空 token 在部分版本会静默失败。
错误三:gateway 起来了,但openclaw status报unauthorized。这是 CLI 的--token和 config 里的auth_token不一致。两者必须完全相同,注意别把 TaoToken 的sk-Key 填到 gateway 的auth_token里,这俩是两回事:auth_token管本地 gateway 鉴权,api_key管模型通道鉴权。
错误四:通道探活超时。检查base_url是否写成了https://taotoken.net/api(少了/v1),以及timeout_ms是否小于 10000。gateway 启动时会做一次探活,网络稍慢就会误判,建议先设 30000。
错误五:TOML 解析报错。常见于api_key里带了引号没转义,或者 Windows 路径用了反斜杠\。TOML 里路径统一用正斜杠/,或者用双反斜杠\\。
提示:排错时把
log_level设成debug,gateway 会把每次通道请求的 URL 和状态码打出来,比猜快得多。稳定运行后记得改回info,否则日志涨得很快。
6. 把 gateway 跑稳之后:长期编码与 Agent 场景怎么接
gateway 能稳定拉起、openclaw run能返回结果,只算跑通了最小闭环。如果你打算把 openclaw 当日常编码助手或 Agent 运行时长期用,接下来要关注的是通道的稳定性和额度管理。统一 Key 通道的好处在这里体现得最明显:你不需要为每个模型单独维护 Key,换模型只改default_model一行,gateway 重启即可生效。对于需要长时间挂着的 coding 场景,建议单独看一下 Coding Plan 的额度说明,避免跑到一半通道限流:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。
接入细节和字段含义如果和本文有出入,以官方接入文档为准:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。另外,如果你用的是 Claude Code 这类客户端,想把它也接到同一个通道上,可以参考这份 Anthropic 兼容配置:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claude_code_anthropic&utm_campaign=rewrite 。控制台里可以随时查看 Key 的调用量和剩余额度:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 。
最后留一个我自己的习惯:每次改完config.toml,先跑openclaw config validate,再前台启动看一遍RPC probe,确认 ok 之后再切后台。这样即使配置写错,也能在第一时间看到具体是哪一行,而不是等 gateway 静默退出后去翻日志。