1. Windows 下用 WSL 跑 openclaw 最新版,先把环境这关过了
openclaw 是一个可以本地部署、通过网关暴露 Web 控制台与 Agent 能力的开源项目,适合想把大模型能力接到自己机器上、又不想依赖云端托管的人。它支持自定义模型提供商,也就是说你可以把请求指向任意兼容 OpenAI 协议的 endpoint。这篇要解决的就是:在 Windows 上不装双系统、不折腾虚拟机,直接用 WSL2 + Ubuntu 把 openclaw 最新版跑起来,并且把模型通道切到 TaoToken 统一入口做连通性验证。
很多人第一次装会卡在三个地方:一是 WSL 装完默认落在 C 盘,磁盘一紧张就难受;二是 Ubuntu 自带的 Node 版本太老,npm 装 openclaw 直接报 engine 不匹配;三是装完之后不知道 endpoint 该填什么,本地模型和远程通道混在一起。下面按「装 WSL → 换目录 → 装 Node 22 → 装 openclaw → 改配置 → 验证请求」的顺序走一遍,命令都能直接复制。
适合谁看:手上是 Windows 10/11、想本地跑 Agent 网关、对 Linux 命令不算熟但能照着敲的开发者。整个过程不需要额外硬件,一台普通笔记本就够。
2. WSL2 初始化与 Ubuntu 子系统安装避坑
2.1 开启 WSL2 并安装 Ubuntu
在 Windows 搜索框输入 powershell,右键以管理员身份运行,执行:
wsl --install这条命令会一次性开启虚拟机平台、安装 WSL2 内核并拉取默认发行版。执行完重启电脑,这一步别省,否则内核组件没加载,后面wsl -l -v会报错。
重启后查看可用的发行版列表:
wsl.exe --list --online然后安装 Ubuntu:
wsl.exe --install Ubuntu首次进入会让你创建默认用户和密码,这个用户就是后面所有操作的账号,别用 root 直接跑日常命令。进去之后先更新依赖:
sudo apt update && sudo apt upgrade -y2.2 把子系统从 C 盘迁到其他盘
默认安装位置在 C 盘,openclaw 加上 Node 依赖体积不小,建议迁走。先看状态:
wsl -l -v如果显示 Running,先停掉:
wsl --shutdown导出镜像(假设目标盘是 F 盘,目录自己建好):
wsl --export Ubuntu F:\wsl\ubuntu.tar注销原系统:
wsl --unregister Ubuntu再确认一次状态,列表里应该已经没有 Ubuntu 了。然后导入到新位置:
wsl --import Ubuntu F:\wsl F:\wsl\ubuntu.tar导入后默认登录用户会变成 root,需要手动切回你创建的用户,或者改/etc/wsl.conf里的default字段。这一步踩过坑的人不少,登录进去发现是 root 别慌,su 你的用户名就能切。
2.3 安装 Node.js 22 与 npm
openclaw 最新版要求 Node 22 以上,Ubuntu 仓库自带的版本通常偏低,用 NodeSource 源装:
sudo apt install -y curl curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt install -y nodejs验证版本:
node -v npm -v正常应该输出 v22.x 和对应的 npm 版本。如果node -v还是老版本,说明 PATH 里有旧 Node,用which node查一下路径,把旧的删掉或调整优先级。多版本共存时可以用 nvm 管理,但这里单版本够用,不额外引入复杂度。
3. openclaw 安装与 openclaw.json 配置改到 TaoToken 通道
3.1 用 npm 全局安装 openclaw
在 WSL 终端里执行:
sudo npm install -g openclaw@latest装完检查:
openclaw --help能打印出命令列表就说明二进制已经进 PATH 了。如果提示 command not found,多半是 npm 全局 bin 目录没进 PATH,用npm config get prefix看路径,再把它加到~/.bashrc里。
3.2 运行引导程序安装守护进程
openclaw onboard --install-daemon引导过程会让你选模型提供商。这里选自定义(custom),因为我们要把 endpoint 指向 TaoToken 统一通道。需要填三样东西:Base URL、API Key、Model ID。TaoToken 的 API 地址是https://taotoken.net/api,Key 在控制台的 API Keys 页面生成。
引导完成后,配置文件落在~/.openclaw/openclaw.json。用 vim 打开:
vim ~/.openclaw/openclaw.json把models.providers部分改成指向 TaoToken 的配置。下面是一个可复制的片段,路径和字段名与官方结构一致:
{ "models": { "providers": { "taotoken": { "baseUrl": "https://taotoken.net/api/v1", "apiKey": "sk-你的TaoToken密钥", "api": "openai-completions", "models": [ { "id": "claude-sonnet-4-5", "name": "Claude Sonnet 4.5", "reasoning": false, "input": ["text"], "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, "contextWindow": 200000, "maxTokens": 8192 } ] } } }, "agents": { "defaults": { "model": { "primary": "taotoken/claude-sonnet-4-5" }, "models": { "taotoken/claude-sonnet-4-5": { "alias": "sonnet" } } } } }注意baseUrl后面要带/v1,这是 OpenAI 兼容协议的标准路径。api字段填openai-completions,openclaw 会按这个协议发请求。Model ID 要和 TaoToken 支持的模型名对齐,写错了会在响应里报 model not found。
3.3 网关 token 与本地访问
配置改完,获取网关鉴权 token:
openclaw config get gateway.auth.token把返回的 token 拼到本地地址后面:
http://127.0.0.1:18789/#token=你的token浏览器打开这个地址就能进控制台。如果端口被占用,改gateway.port字段换个端口,重启守护进程生效。
4. 验证请求:确认 openclaw 真的连上了 TaoToken
4.1 用 curl 直接打通道
在改 openclaw 配置之前,先用 curl 确认 TaoToken 通道本身是通的:
curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-5", "messages": [{"role": "user", "content": "回复ok两个字"}], "max_tokens": 20 }'返回 JSON 里choices[0].message.content有内容,说明 Key 和 endpoint 都没问题。这一步能排除掉大部分「配置写了但连不上」的困惑。
4.2 在 openclaw 里发一条测试消息
回到控制台,在对话输入框发一句「你好,报一下你用的模型」。如果配置正确,回复会正常返回。同时可以在 WSL 里看守护进程日志:
openclaw logs --follow日志里会打印出请求的 provider 和 model,确认走的是taotoken而不是默认的本地 provider。如果日志里出现local proxy failed或reading choices之类的字样,说明请求发出去了但响应解析失败,往下看排错部分。
4.3 验证成功的判断标准
三个信号同时满足就算通了:curl 能拿到 JSON 响应;控制台对话有正常回复;日志里 provider 显示为 taotoken。缺一个就按下一节的对照表排查。
5. 常见报错排查:401、local proxy failed、reading choices
5.1 401 Unauthorized
最常见的原因是 Key 没填对或者带了多余空格。检查openclaw.json里apiKey字段,确认是sk-开头、没有换行。另外注意 TaoToken 的 Key 和网关 token 是两回事,别把gateway.auth.token填到 provider 的 apiKey 里。改完配置要重启守护进程:
openclaw daemon restart5.2 local proxy failed
这个报错通常出现在 openclaw 尝试走本地代理但代理没起来的时候。如果你配置的是远程 endpoint,检查baseUrl是不是写成了http://127.0.0.1:xxxx这种本地地址。指向 TaoToken 时应该是https://taotoken.net/api/v1。另外 WSL 里的 DNS 偶尔会抽风,ping taotoken.net不通就先sudo apt install -y resolvconf修一下解析。
5.3 reading choices 解析失败
日志里出现reading choices一般是响应体结构和预期不符。可能是api字段填错了,比如填成了anthropic-messages但 endpoint 返回的是 OpenAI 格式。确认api为openai-completions。还有一种情况是模型 ID 写错,服务端返回了错误对象而不是正常的 choices 数组,把 Model ID 改成 TaoToken 文档里列出的名称即可。
5.4 OAuth 相关报错
如果你之前配过 qwen-portal 这类 OAuth 提供商,auth.profiles里会残留 oauth 模式。切到 TaoToken 的 API Key 模式后,把不需要的 profile 删掉,避免 openclaw 在启动时尝试刷新过期的 OAuth token 而卡住。配置里只保留taotoken一个 provider 最省心。
5.5 Node 版本不匹配
npm install -g openclaw@latest报 engine 错误,说明 Node 低于 22。回到 2.3 节重装 Node,或者用nvm install 22 && nvm use 22切换。装完node -v确认是 v22 再重试。
6. 把通道固定下来:后续接入与长期使用建议
配置跑通之后,建议把openclaw.json备份一份,改坏了能快速回滚。日常使用中如果要在多个模型之间切换,可以在agents.defaults.models里加别名,比如给 sonnet 和 haiku 各配一个 alias,对话时用别名指定,不用每次改主模型。
需要长期跑 Agent 任务或者做编码辅助的,可以了解下 Coding Plan 这类按周期计费的方案,比单次调用更适合高频场景。模型对话入口适合临时验证某个模型的表现,API Keys 页面用来管理密钥和查看用量,接入文档里有各语言的调用示例。这几个入口配合起来,本地 openclaw 的通道就能稳定用下去。
最后提醒一句:WSL 的时钟偶尔会和宿主机不同步,导致 HTTPS 请求证书校验失败。遇到莫名其妙的 TLS 错误,先sudo hwclock -s同步一下时间再试。这个坑不常遇到,但遇到了很难查。