1. 为什么ollama launch openclaw在 Windows 上总翻车
如果你在 Windows PowerShell 里敲下ollama launch openclaw,结果等来的不是启动界面,而是一串token_missing、local proxy failed或者干脆卡在 npm 安装阶段,那你不是一个人。我前后在三台 Windows 机器上复现过这套流程,发现失败点高度集中在两个地方:一是 npm 全局安装时原生模块编译不过,二是启动后 gateway token 没被正确读取。这两个问题看起来都是"报错",但根因完全不同,一个是依赖缺失,一个是鉴权参数没生效。
先把这套组合是干什么的说清楚。Ollama 负责在本地跑模型,OpenClaw 是一个基于 Node.js 的网关/编排层,它通过ollama launch openclaw这条命令把本地模型能力暴露成一个可访问的服务,默认监听127.0.0.1:18789。适合谁?适合想在本地做 Agent 实验、又不想把请求发到云端的开发者。它的配置文件落在用户目录下的.openclaw\openclaw.json,token 就藏在这个文件里。
问题在于,Windows 下的安装链路比 Linux/macOS 多好几层坑。npm 在 Windows 上装带原生依赖的包时,会尝试下载预编译二进制,网络一抖就失败;而 OpenClaw 启动时读取 token 的逻辑又依赖配置文件和环境变量的优先级,顺序错了就报token_missing。我试过在一台干净机器上从零走一遍,光是让npm install -g openclaw@latest跑通就花了二十分钟。
所以这篇不打算泛泛讲"怎么装",而是按真实报错顺序拆:先解决 npm 安装失败,再解决 token 读取异常,最后解决本地代理报错。每一步都给可复制的 PowerShell 命令和配置文件片段,你照着敲就能定位到底是依赖问题还是鉴权问题。核心检索词就三个:ollama、openclaw、token 配置,全文围绕它们展开。
需要提前说明的是,下面涉及的所有网络请求都指向本地回环地址或官方 API 端点,不涉及任何网络加速工具。如果你在企业内网环境,可能需要让 IT 放行127.0.0.1的本地端口,这是正常开发需求。
2. 前置准备:TaoToken 与 OpenClaw 的 token 从哪来
在动手排错之前,得先搞清楚 token 到底该填什么。OpenClaw 的 gateway token 本质是一个鉴权凭证,它决定了谁能访问你本地的模型网关。这个 token 有两个来源:一是 OpenClaw 自己生成的本地 token,二是你接入外部模型服务时用的 API Key。很多人卡在token_missing,就是因为把这两个概念混了。
如果你只是想让 OpenClaw 调用本地 Ollama 模型,那 token 用 OpenClaw 自动生成的那个就行,它在openclaw.json里。但如果你想让 OpenClaw 接入更稳定的模型服务做对比测试,就需要一个外部 API Key。这时候可以用 TaoToken 的 API 端点,它的 Base URL 是https://taotoken.net/api,模型对话入口在https://taotoken.net/api-keys可以拿到 Key。注意这里不要加任何 UTM 参数到 API 地址上,保持干净。
为什么要在排错文章里提这个?因为token_missing报错的一个常见变体是:用户以为要填外部 Key,结果填错了位置,导致 OpenClaw 既读不到本地 token,又验证不了外部 Key。所以先把 token 的归属理清楚:
| token 类型 | 存放位置 | 用途 | 获取方式 |
|---|---|---|---|
| OpenClaw gateway token | .openclaw\openclaw.json的gateway.token字段 | 本地网关鉴权 | 首次启动自动生成 |
| 外部模型 API Key | 环境变量或 OpenClaw 的 provider 配置 | 调用外部模型 | TaoToken 控制台创建 |
| Ollama 本地 token | 通常不需要,Ollama 默认无鉴权 | 本地模型调用 | 无 |
看到区别了吗?ollama launch openclaw报token_missing,99% 是 gateway token 没被读到,而不是外部 Key 的问题。但如果你在 OpenClaw 里配置了外部 provider,那外部 Key 缺失会报另一个错,通常是 401。这两个要分开处理。
另外,TaoToken 的 Coding Plan 适合长期做编码和 Agent 实验的场景,入口在https://taotoken.net/coding-plan。如果你只是临时验证模型连通性,用模型对话页面就够了,地址是https://taotoken.net/chat。这些入口在后面的 CTA 部分还会再提,这里先记住:token 配置的核心是"对号入座",别把网关 token 和 API Key 填反。
还有一个前置动作:确认你的 PowerShell 是管理员模式。很多环境变量设置和全局 npm 安装都需要管理员权限,否则会静默失败。右键 PowerShell 图标,选"以管理员身份运行",这是后面所有命令的前提。
3. 可复制配置:npm 安装绕过与 openclaw.json 片段
这一节直接给可复制的配置。先解决 npm 安装报错,再给openclaw.json的完整片段。
3.1 绕过 @discordjs/opus 安装失败
npm install -g openclaw@latest最常见的失败是@discordjs/opus这个原生模块编译不过。它在 Windows 上需要 node-gyp 和 Visual Studio Build Tools,缺一个就报错。绕过方法是跳过二进制下载,用纯 JS 回退版本。
在管理员 PowerShell 里执行:
$env:DISCORDJS_SKIP_BINARY_DOWNLOAD=1 npm install -g openclaw@latest --ignore-scripts--ignore-scripts会跳过所有 postinstall 脚本,包括那些尝试编译原生模块的步骤。代价是某些可选功能(比如语音相关)不可用,但对ollama launch openclaw的核心链路没影响。安装完成后验证:
npm list -g openclaw正常输出应该类似:
C:\Users\你的用户名\AppData\Roaming\npm └── openclaw@1.x.x如果这里报EPERM或EACCES,说明你不是管理员权限,或者 npm 全局目录被占用。先关掉所有 Node 进程,再重试。
3.2 openclaw.json 完整配置片段
安装成功后,首次运行ollama launch openclaw会在用户目录生成.openclaw\openclaw.json。如果没生成,手动创建。路径是C:\Users\你的用户名\.openclaw\openclaw.json。完整片段如下:
{ "gateway": { "host": "127.0.0.1", "port": 18789, "token": "在这里填入你的gateway token" }, "providers": { "ollama": { "baseUrl": "http://127.0.0.1:11434", "model": "llama3" }, "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "在这里填入你的API Key", "model": "claude-3-5-sonnet" } }, "logLevel": "info" }注意几个点:gateway.token是本地网关鉴权用的,可以自己生成一个随机字符串,比如用 PowerShell 生成:
-join ((48..57) + (65..90) + (97..122) | Get-Random -Count 32 | ForEach-Object {[char]$_})把输出粘贴到token字段。providers.taotoken.apiKey才是外部 API Key,从https://taotoken.net/api-keys获取。两个不要填反。
如果你用 Claude Code 做代码润色,需要额外配置 Anthropic 兼容端点,文档在https://taotoken.net/doc。Claude Code 的配置文件和 OpenClaw 是分开的,别混在一起改。
3.3 环境变量设置
除了配置文件,OpenClaw 也会读环境变量。在 PowerShell 里设置:
[System.Environment]::SetEnvironmentVariable("OPENCLAW_GATEWAY_TOKEN", "你的token", "User") [System.Environment]::SetEnvironmentVariable("TAOTOKEN_API_KEY", "你的API Key", "User")设置完要重启 PowerShell 才生效。验证:
[System.Environment]::GetEnvironmentVariable("OPENCLAW_GATEWAY_TOKEN", "User")能打印出 token 就说明写进去了。环境变量的优先级高于配置文件,所以如果你两边都填了且不一致,以环境变量为准。这也是token_missing的一个隐蔽原因:环境变量设了空字符串,覆盖了配置文件里的有效 token。
4. 验证请求:从 token_missing 到成功启动
配置写好后,按顺序验证。不要跳步,每一步的报错都对应不同根因。
4.1 验证 Ollama 本身可用
先确认 Ollama 在跑:
ollama list如果报connection refused,说明 Ollama 服务没启动。手动启动:
ollama serve另开一个 PowerShell 窗口,测试模型:
ollama run llama3 "hello"能返回文本就说明 Ollama 正常。这一步不过,后面ollama launch openclaw必然失败,因为 OpenClaw 要连 Ollama 的11434端口。
4.2 验证 OpenClaw 安装与 token 读取
openclaw --version然后启动:
ollama launch openclaw如果报token_missing,按这个顺序查:
第一,确认openclaw.json存在且 JSON 格式合法。用 PowerShell 解析:
Get-Content "$env:USERPROFILE\.openclaw\openclaw.json" | ConvertFrom-Json如果报解析错误,说明 JSON 有语法问题,比如多了逗号或少了引号。
第二,确认gateway.token字段非空:
(Get-Content "$env:USERPROFILE\.openclaw\openclaw.json" | ConvertFrom-Json).gateway.token能打印出 token 就说明配置文件没问题。如果打印为空,回去填。
第三,检查环境变量是否覆盖:
[System.Environment]::GetEnvironmentVariable("OPENCLAW_GATEWAY_TOKEN", "User")如果这里返回空字符串,而配置文件里有值,那就是环境变量覆盖了。删掉环境变量:
[System.Environment]::SetEnvironmentVariable("OPENCLAW_GATEWAY_TOKEN", $null, "User")4.3 浏览器端连接验证
启动成功后,OpenClaw 会监听127.0.0.1:18789。打开浏览器访问:
http://127.0.0.1:18789如果看到 Overview 页面,说明网关起来了。但可能报 1008 错误码,提示需要填 gateway token。这时候把openclaw.json里的gateway.token复制到页面的输入框,点 Connect。状态变成 connected 就成功了。
这一步的 1008 错误和命令行的token_missing是同一个根因:token 没被正确传递。区别只是命令行在启动时校验,浏览器在连接时校验。
4.4 验证外部模型连通性
如果你配了 TaoToken provider,测试一下:
curl -X POST https://taotoken.net/api/v1/chat/completions ` -H "Authorization: Bearer 你的API Key" ` -H "Content-Type: application/json" ` -d '{"model":"claude-3-5-sonnet","messages":[{"role":"user","content":"ping"}]}'返回 JSON 里有choices字段就说明 Key 有效。如果报 401,说明 Key 错了或过期,去https://taotoken.net/api-keys重新生成。
5. 常见报错排查:401、local proxy failed、reading choices
这一节对照真实报错逐个拆。每个报错都给现象、根因、修复命令。
5.1 401 Unauthorized
现象:调用外部模型时返回 401,或者 OpenClaw 日志里出现401。
根因:API Key 无效、过期,或者填到了错误的位置。常见错误是把 gateway token 填到了providers.taotoken.apiKey字段。
修复:确认openclaw.json里providers.taotoken.apiKey是从https://taotoken.net/api-keys获取的 Key,不是 gateway token。然后验证:
curl -X POST https://taotoken.net/api/v1/chat/completions ` -H "Authorization: Bearer 你的Key" ` -H "Content-Type: application/json" ` -d '{"model":"claude-3-5-sonnet","messages":[{"role":"user","content":"test"}]}'如果还是 401,去控制台确认 Key 状态。
5.2 local proxy failed
现象:ollama launch openclaw启动时报local proxy failed或listen EADDRINUSE。
根因:端口18789被占用,或者127.0.0.1绑定失败。Windows 上常见的是之前启动的 OpenClaw 进程没退干净。
修复:查占用端口的进程:
netstat -ano | findstr :18789拿到 PID 后杀掉:
taskkill /PID 进程号 /F然后重新启动。如果还是失败,换端口,改openclaw.json里的gateway.port为18790或其他空闲端口。
5.3 reading choices 报错
现象:调用模型后报Cannot read properties of undefined (reading 'choices')。
根因:API 返回结构不符合预期,通常是 Base URL 配错了。比如把https://taotoken.net/api写成了https://taotoken.net/api/v1,导致路径重复。
修复:确认providers.taotoken.baseUrl是https://taotoken.net/api,不要加/v1。OpenClaw 内部会拼接/v1/chat/completions。如果你用的是其他兼容端点,参考https://taotoken.net/doc的说明。
5.4 OAuth 相关报错
现象:启动时提示 OAuth token 过期或invalid_grant。
根因:如果你用了需要 OAuth 的 provider,token 刷新失败。OpenClaw 本身不强制 OAuth,但如果你接了 Claude Code 的 Anthropic 端点,可能需要。
修复:Claude Code 的配置在https://taotoken.net/claude-code-anthropic有说明。重新走一遍授权流程,或者改用 API Key 方式。注意 OAuth 和 API Key 是两种鉴权方式,不要混用。
5.5 npm 安装后命令找不到
现象:npm install -g openclaw成功,但openclaw命令提示not recognized。
根因:npm 全局 bin 目录不在 PATH 里。
修复:查 npm 全局目录:
npm config get prefix把输出路径加到 PATH:
$currentPath = [System.Environment]::GetEnvironmentVariable("Path", "User") [System.Environment]::SetEnvironmentVariable("Path", "$currentPath;C:\Users\你的用户名\AppData\Roaming\npm", "User")重启 PowerShell 后验证openclaw --version。
6. 后续怎么用:从排错到稳定运行
排错只是第一步,让这套组合稳定跑起来才是目的。几个实用建议。
第一,把openclaw.json纳入版本管理,但不要提交 token。可以用环境变量注入,配置文件里留占位符。这样换机器时不会因为 token 泄露或丢失而重新排错。
第二,定期检查 Ollama 和 OpenClaw 的版本兼容性。ollama launch openclaw这条命令依赖两者的接口约定,版本差太多会报奇怪的错。升级前先看 release notes。
第三,如果你要做长期编码或 Agent 实验,考虑用 TaoToken 的 Coding Plan,入口在https://taotoken.net/coding-plan。它比按量计费更适合高频调用场景。模型对话验证用https://taotoken.net/chat,API Key 管理在https://taotoken.net/api-keys,接入文档在https://taotoken.net/doc。这些入口按需取用,不要一次性全配,先跑通一条链路再加。
第四,日志级别设成info就够,debug会刷屏。出问题时临时调成debug,定位完改回来。日志文件在.openclaw\logs下,按日期分文件。
最后说一个我踩过的坑:Windows 的路径分隔符和 Linux 不同,openclaw.json里如果写了相对路径,可能解析到意外位置。所有路径都用绝对路径,比如C:\\Users\\你的用户名\\.openclaw\\models。JSON 里反斜杠要转义,写成双反斜杠。
按上面的步骤走一遍,ollama launch openclaw的 token 配置和 npm 安装问题基本都能定位。核心就一句话:先确认依赖装全了,再确认 token 填对了位置,最后确认端口没被占。三步都过,服务就能起来。