openclaw.json 里的 apiKey 还写着 your-api-key-here,Azure Windows 11 虚拟机上 gateway 能起、默认 agent 就是不回话。去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 拿一把 Key,再用 TaoToken 的兼容通道把模型请求接出去,这台机器上的 OpenClaw 才算真的能用。很多人 RDP 进去之后把精力全花在端口、Node 版本、Azure 网络安全组上,反复netstat、反复重启,却忘了回头看一眼%USERPROFILE%\.openclaw\openclaw.json里那个从模板抄下来的字段——它一直是占位符,而 gateway 启动时压根不需要它是真值。
这篇按排障的顺序走:先讲怎么一眼确认是占位符的问题,再讲 Key 从哪儿来、openclaw.json 里到底改哪几个值、改完怎么验证,最后把 Windows 虚拟机上常见的那几类报错摊开对照。RDP、Node.js、npm 那套安装流程仍然照原文走,TaoToken 在这条链路里只做两件事:发 Key、提供兼容通道。
1. gateway 起来了却不回话,先怀疑 openclaw.json 的占位符
1.1 三个容易骗过自己的「成功信号」
在 Azure 上跑 OpenClaw,最先看到的往往是假象。openclaw onboard一路回车结束,没有红色报错,这是一;PowerShell 窗口里 gateway 进程活着,netstat -ano | findstr :8080能看到监听,这是二;浏览器打开本地地址,界面正常渲染出来,这是三。
这三件事有个共同点:它们全部发生在本地服务层面。启动一个 HTTP 服务、绑定一个端口、返回一个静态页面,都不需要出网,也不校验任何凭据。真正用到 apiKey 的时刻,是你向默认 agent 发第一条消息、gateway 准备把请求转发到上游模型的那一刻。在此之前,your-api-key-here和一把真实 Key 在行为上没有任何区别。
所以当症状是「界面能开、发送无响应」而不是「进程起不来」时,排查方向应该立刻从环境层切到凭据层。
1.2 一次就能确认的检查:把 openclaw.json 打出来
RDP 会话里直接开记事本最省事:
notepad $env:USERPROFILE\.openclaw\openclaw.json如果不想被记事本的换行影响判断,用命令行捞关键字段更快:
Select-String -Path $env:USERPROFILE\.openclaw\openclaw.json -Pattern "apiKey|baseURL|baseUrl|model"只要输出里出现your-api-key-here、sk-xxxx、<your key>这类明显是模板文案的字符串,问题就定在这儿了,不必再折腾防火墙和 DNS。顺便看一眼 base 相关的字段是不是空的、是不是填了官网首页地址——这两件事后面会单独说。
1.3 为什么占位符会让 agent 一声不吭
请求带着假 Key 发出去,上游返回的是 401 或 403。gateway 在中转这一层通常只把状态码写进日志,不一定会把它翻译成前端可见的错误提示,于是界面表现就是「一直在想」「转圈,然后什么都没有」。
更麻烦的是超时伪装。有些版本在拿不到有效响应时会一直重试,前端看起来像网络慢,实际是每一条请求都被上游拒掉。判断方法是去翻 gateway 那个 PowerShell 窗口的输出,或者找 OpenClaw 在用户目录下写的日志文件,看有没有成片的 401。看到 401 就别再怀疑 Azure 的网络了。
2. 换 Key 这一步:TaoToken 只负责发凭据和通道
2.1 创建 Key,以及模型 ID 该从哪里抄
打开 TaoToken,注册登录后进控制台创建 API Key。Key 通常在创建时完整显示一次,之后列表里只留前几位,所以当场复制、当场贴进 openclaw.json,别先存到聊天窗口再回头找。
模型 ID 同样不要凭记忆写。很多教程里出现的带日期后缀、带版本号的名字,换个账号或换个时间点就不一定存在,写错了报的是 model not found,很容易被误判成 Key 无效。正确做法是打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的模型广场,按当时列表里真实存在的 ID 复制。本文的示例统一写成YOUR_MODEL_ID占位,你替换成自己那份列表里的字符串。
2.2 这些步骤不用动:RDP、Node.js、npm、Azure 网络安全组
排障最容易走偏的地方,是把「模型通道不通」当成「环境要重装」。原文里那套流程——RDP 连进 Azure Windows 11 虚拟机、装 Node.js、用 npm 全局安装 OpenClaw、跑openclaw onboard生成初始配置——全部照旧。TaoToken 不进这一层,它既不参与远程桌面,也不管 npm 装了什么版本。
需要额外留意的只有两件事,都属于 Windows 虚拟机的常规操作:一是安装 Node.js 时把「Add to PATH」勾上,否则新开的 PowerShell 窗口找不到命令;二是 onboard 生成的配置文件路径固定在用户目录下,如果你用的是管理员账号和普通账号两个会话,注意别在 A 账号里改文件、用 B 账号起服务。
2.3 Base URL 填什么,别填什么
这是本篇最容易被抄错的一行。填进 openclaw.json 的模型通道地址是:
https://taotoken.net/api末尾不要加/v1。很多 OpenAI 兼容客户端习惯把/v1写进 base,再由 SDK 拼/chat/completions,但这里填的是根路径,多余的/v1会拼出重复段,最终表现是 404,而不是 401,排查时很容易和 Key 的问题混在一起。
另外,不要把这个地址填成https://taotoken.net/?utm_source=taotoken_aicg_blog_end。那是给人点击的落地页,用来注册、创建 Key、看模型广场和用量;接口地址和落地页是两条不同的东西,混填的结果通常是返回一页 HTML,解析失败。
3. 用 notepad 改 openclaw.json:只动三个值
3.1 改之前先备份,改完先验 JSON
不管多急,先复制一份原文件:
Copy-Item $env:USERPROFILE\.openclaw\openclaw.json $env:USERPROFILE\.openclaw\openclaw.json.bak备份的意义在于,onboard 生成的这份文件里除了模型通道,还有 gateway 的监听地址、端口、agent 定义等内容,手抖删掉一个逗号,报的错会完全跑偏。改完之后立刻做一次语法检查:
Get-Content $env:USERPROFILE\.openclaw\openclaw.json -Raw | ConvertFrom-Json | Out-Null这条命令没有任何输出就代表 JSON 合法。如果抛异常,多半是多了尾随逗号、少了引号,或者记事本保存时换了引号字符——中文输入法下的引号是“”,JSON 只认半角"。
3.2 apiKey、baseURL、model 三个值怎么填
下面是一份结构示意。字段名以你本机 onboard 生成的那份为准:有的版本写baseURL,有的写baseUrl,有的把通道配置放在providers下面。你只需要在原文件里找到对应键名,改它的值,不要整段替换成下面这份。
{ "gateway": { "host": "127.0.0.1", "port": 8080 }, "providers": { "default": { "type": "openai-compatible", "baseURL": "https://taotoken.net/api", "apiKey": "YOUR_API_KEY", "model": "YOUR_MODEL_ID" } }, "agents": { "default": { "provider": "default" } } }三个值的来源分别是:apiKey从 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的控制台创建后复制;baseURL固定写https://taotoken.net/api;model从模型广场当时列出的 ID 里挑一个。改完保存,注意编码选 UTF-8,别存成带 BOM 的格式,某些解析器会把开头的 BOM 当成非法字符。
3.3 保存之后的重启顺序
改文件不会自动生效。正确顺序是:先在跑 gateway 的那个 PowerShell 窗口按Ctrl+C停掉进程,确认端口释放,再重新执行一次openclaw onboard,让它按新配置把 gateway 拉起来。
确认端口真的释放了:
netstat -ano | findstr :8080没有任何输出才说明上一个进程退干净了。如果还占着,用taskkill /PID <进程号> /F收掉,否则新进程可能因为端口冲突起不来,你会误以为配置改坏了。
4. 三条验证,确认模型通道真的通了
4.1 看启动日志里有没有出现 provider 和 model
重启之后,别急着开浏览器。先看 PowerShell 窗口里滚出来的启动日志,重点找两个信息:有没有加载到 provider 配置,有没有打印出将要使用的模型标识。
如果日志里出现的是默认值、或者干脆没有这一段,说明配置文件的层级没对上——比如你把通道写在了顶层,而这一版要求放在providers下。此时不必猜,把 openclaw.json 完整贴出来对着上面那份结构比对一遍层级。
4.2 给默认 agent 发一条最小请求
开浏览器访问本地地址,向默认 agent 发一句最朴素的话,比如「用一句话说明你现在用的模型是什么」。观察两件事:响应回来得快不快,以及内容是否正常。
如果这一步正常返回,说明 Key、Base URL、模型 ID 三个值都对上了。如果仍然转圈,先看 4.1 的日志有没有 401;有 401 就回到第 3 节确认 Key 是不是残留了占位符,没有报错但一直不返回,就往第 5 节的超时方向查。
4.3 用同一把 Key 在模型对话页交叉验证
这一步能把「到底是谁的问题」这件事一刀切开。打开 TaoToken 模型对话,用刚才那把 Key 和同一个模型 ID 发一条消息。
- 对话页正常、OpenClaw 不正常:问题在 openclaw.json 或 gateway,不在 Key。
- 对话页也报错:Key 有问题,或者模型 ID 抄错了,回控制台重新确认。
- 两边都超时:先确认这台虚拟机能正常访问外部网络,再考虑是否是重试策略把超时放大了。
验证通过之后,回 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的控制台看一眼这次的调用有没有记上,用量记录里有条目,才算闭环。
5. 401 / 404 / model not found:Windows 虚拟机上的对照排查
5.1 401:Key 没换、多了引号、复制带了空格
401 几乎只有一个来源:发出去的凭据不被上游认可。三种最常见的情况,第一种是 openclaw.json 里那行your-api-key-here根本没动过,只改了 baseURL;第二种是从控制台复制时把首尾空格一起带进去了,或者粘贴时被记事本加了换行;第三种是值外面套了两层引号,变成""YOUR_API_KEY""。
修法很直接:在 openclaw.json 里让 apiKey 的值保持纯粹的字符串,前后不要有空格,不要有换行。改完用 3.1 那条 ConvertFrom-Json 验一遍。
5.2 404:baseURL 后面多写了 /v1
404 和 401 的症状很像,都是「发出去没结果」,但含义完全不同。401 是身份不认,404 是路径找不到。填https://taotoken.net/api就够了,再往后加/v1,客户端和网关各拼一次,路径就重复了。
处理方式是回到 openclaw.json,把 base 相关的那个值改成不带后缀的写法,保存、重启、重试。顺手确认一下自己有没有把落地页地址填进去——那会返回一整个 HTML 页面,日志里看到的不是 404 也可能是一段解析错误。
5.3 model not found:ID 抄错或列表里没有
这个报错通常写得很清楚,直接告诉你哪个字符串不认识。原因是模型 ID 抄错了,或者你复制的那个名字在你账号里并不存在。解决办法只有一个:打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 的模型广场,从当时列表里重新复制一遍,覆盖 openclaw.json 里的 model 值。
不要依赖任何教程里写死的模型名,包括本文示例里的YOUR_MODEL_ID——它只是个占位。
5.4 一直转圈:出网、时间同步与重试放大
排除掉前面三类之后,剩下的就是网络层。Azure Windows 11 虚拟机默认能出网,但如果你改过 NSG 规则、加了出站限制,或者用了不合适的 DNS,出网就可能被拦。用一条简单的出网测试确认连通性,再把结果贴回对话里判断。
还有一个容易被忽略的点是虚拟机的时间同步。系统时间偏差太大时,TLS 握手会失败,表现同样是长时间无响应。在 Windows 里执行一次时间同步,成本很低,值得一试。
6. 通道通了之后,把 Key 和用量管起来
6.1 别把一把 Key 塞进所有环境
排障阶段用一把 Key 快速跑通没问题,但长期这么用会有两个隐患:一是 Key 一旦泄露,所有环境一起受影响;二是用量混在一起,看不出是哪台机器在跑。
比较省事的做法是按环境拆:Azure 那台虚拟机一把,本地开发机一把,CI 里再一把。每把 Key 起个能认出来的名字,出问题的时候直接停用对应的那一把即可。新 Key 在 控制台 API Keys 里创建,创建完回到 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 看用量分布,确认三把 Key 各自跑在预期的位置上。
如果这台 Windows 虚拟机是要长期挂着 OpenClaw 跑日常编码任务,可以顺手看一下 Coding Plan 里的套餐额度,按你的实际调用节奏选,别让排障完的第二天就撞上额度墙。
6.2 下一步
现在这台 Azure Windows 11 虚拟机上的 OpenClaw 已经能把请求发到模型通道了:gateway 在跑,默认 agent 有回话,openclaw.json 里三个值都是真值而不是占位符。接下来无非两件事——把模型 ID 换成更合适的那个,以及把这套配置在另外几台机器上照着抄一遍。
真要动手前,建议先回控制台确认一次这次调用的记账记录,再去模型广场把要长期使用的 ID 定下来。RDP、Node.js、npm 那一整套流程你已经走过一遍,下次复制配置的时候记得:落地页地址只用于注册、创建 Key 和看用量,填进 openclaw.json 的永远是https://taotoken.net/api。