1. 为什么在 Linux 上装 OpenClaw 总卡在模型通道这一步
OpenClaw 是一个可以在本地跑起来的 AI Agent 网关,它把模型调用、渠道接入(比如飞书、Telegram)、会话管理这些事统一收拢到一个进程里。你可以在 Linux 服务器上把它当成一个常驻服务,前端接聊天工具,后端接大模型。适合谁?适合那些不想把业务逻辑绑死在某个云平台上、希望自己掌控模型通道和数据的开发者。
但我在 Linux 上第一次部署 OpenClaw 的时候,真正卡住的不是安装本身,而是模型通道配置。OpenClaw 默认让你在~/.openclaw/openclaw.json里给每个 provider 单独填baseUrl和apiKey。如果你同时用 DeepSeek、Claude、GPT 好几个模型,就得维护好几套 Key,换一个模型就要改一次配置,测试的时候来回切换非常烦。
更麻烦的是,很多人在这一步会遇到401 Unauthorized或者local proxy failed这类报错,排查半天发现是 Key 填错了位置,或者baseUrl写成了带/v1的完整路径导致拼接重复。这篇就按「先装好、再统一通道、最后验证连通」的顺序走一遍,把 OpenClaw Linux 安装指南里最容易踩坑的模型通道部分讲透。
核心思路是:OpenClaw 负责 Agent 和渠道,模型调用统一走一个兼容 OpenAI 协议的入口。这样你只需要在配置里维护一个baseUrl和一个 Key,后面换模型只改model id就行。下面从环境准备开始,一步步来。
2. TaoToken 统一 Key 接入前的环境准备与依赖安装
在动 OpenClaw 之前,先把 Node.js 搞定。OpenClaw 要求 Node.js ≥ 22.12.0,系统自带的 Node 20 不满足。这一步没做对,后面openclaw doctor会直接报版本错误。
先确认当前版本:
node -v npm -v如果低于 v22,用官方二进制包安装(不需要 root 改系统包管理器):
NODE_VERSION="v22.22.0" # x86_64 用 linux-x64,aarch64 用 linux-arm64 NODE_ARCH="linux-x64" cd /tmp curl -fsSL -o node.tar.xz "https://nodejs.org/download/release/${NODE_VERSION}/node-${NODE_VERSION}-${NODE_ARCH}.tar.xz" sudo tar -xJf node.tar.xz -C /usr/local --strip-components=1 /usr/local/bin/node -v装完确保 PATH 优先指向/usr/local/bin,写进~/.bashrc:
export PATH=/usr/local/bin:$PATH source ~/.bashrc如果你不想动系统目录,用 NVM 也行:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash source ~/.bashrc nvm install 22 nvm use 22Node 就绪后装 OpenClaw:
sudo npm install -g openclaw@latest openclaw --version openclaw doctoropenclaw doctor会检查 Node 版本、配置文件、网关状态。如果依赖从 GitHub 拉取失败,配置 Git 走 HTTPS 再重试:
git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"到这一步,OpenClaw 本体已经装好了。接下来是重点:把模型通道统一到 TaoToken。你需要先去控制台拿一个 Key,地址是 https://taotoken.net/api-keys ,拿到之后先放着,下一步写进配置。
3. 可复制配置:把 OpenClaw 的 endpoint 改到 TaoToken 统一通道
OpenClaw 的主配置文件在~/.openclaw/openclaw.json。如果文件不存在,先创建一个只含meta的空对象,再往里合并。下面这份是接入 TaoToken 统一通道的最小可用结构,路径和字段名跟 OpenClaw 实际读取的一致,可以直接复制改。
{ "meta": { "lastTouchedVersion": "2026.3.11", "lastTouchedAt": "2026-03-12T00:00:00.000Z" }, "gateway": { "mode": "local" }, "models": { "providers": { "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "YOUR_TAOTOKEN_API_KEY", "api": "openai-completions", "models": [ { "id": "claude-sonnet-4-5", "name": "Claude Sonnet 4.5" }, { "id": "gpt-4o", "name": "GPT-4o" }, { "id": "deepseek-chat", "name": "DeepSeek Chat" } ] } } }, "agents": { "defaults": { "model": { "primary": "taotoken/claude-sonnet-4-5" } } } }几个关键点说明一下。baseUrl填https://taotoken.net/api,不要在后面手动加/v1,OpenClaw 的openai-completions适配器会自己拼接路径,你多写一段就会变成/api/v1/v1/chat/completions,直接 404。apiKey换成你在控制台拿到的那个。api字段保持openai-completions,因为 TaoToken 的接口兼容 OpenAI 的 completions 协议。
models数组里列的是你想用的模型 id。这些 id 要跟 TaoToken 支持的模型名对应,写错了会在请求时返回model not found。agents.defaults.model.primary里的格式是provider/model-id,也就是taotoken/claude-sonnet-4-5,这个斜杠前面的taotoken必须跟providers下的键名完全一致。
如果你更习惯用 CLI 改,也可以:
openclaw config set agents.defaults.model.primary "taotoken/claude-sonnet-4-5" openclaw models listopenclaw models list会列出当前识别到的 provider 和默认模型,确认taotoken出现在列表里、default 指向你设的那个。改完配置一定要校验:
openclaw config validate校验通过再往下走。如果报错说某个键路径不认识,多半是层级写错了,比如把agents.defaults.model.primary写成了models.defaults,这个在 OpenClaw 里是不认的。
4. 验证请求:确认 OpenClaw 真的通过 TaoToken 调通了模型
配置写完不代表通了,得实际发一次请求。先启动网关:
openclaw config set gateway.mode local openclaw gateway install systemctl --user start openclaw-gateway.service systemctl --user enable openclaw-gateway.service openclaw gateway status网关启动后需要几秒预热,加载 agent、连接渠道。如果第一次openclaw gateway status显示RPC probe: failed或者端口没监听,等 10 秒再执行一次。正常状态会看到Runtime running、端口 18789 监听、Dashboard 在http://127.0.0.1:18789/。
然后直接测模型调用。OpenClaw 没有单独的chat命令,但你可以通过日志和一次实际对话来验证。最直接的方式是看网关日志里模型请求的返回:
openclaw logs --follow另开一个终端,触发一次 agent 调用。如果你配了飞书渠道,就在飞书里给机器人发一条消息;如果还没配渠道,可以用 OpenClaw 的本地调试入口。触发后回到日志终端,正常会看到类似这样的输出:
[models] provider=taotoken model=claude-sonnet-4-5 status=200 [agent] response received, tokens=...如果看到status=200并且有 response,说明 TaoToken 通道已经通了。如果看到401,说明 Key 不对或者没生效;如果看到local proxy failed,通常是网关没起来或者端口被占。这一步的验证动作很关键,很多人配完配置就直接上渠道,结果渠道那边收不到回复,回头排查发现是模型通道根本没通。
想更直观地确认模型能力,可以打开模型对话页面 https://taotoken.net/models 手动发一条,对比一下返回是否正常。两边都通,基本可以确定配置没问题。
5. 本篇常见报错排查:401、local proxy failed、reading choices、OAuth
这一节把 OpenClaw 接入统一通道时最常撞到的几个报错对照着说,都是真实会遇到的。
401 Unauthorized。最常见的原因是apiKey字段填了占位符没换,或者 Key 复制时带了空格。检查~/.openclaw/openclaw.json里providers.taotoken.apiKey的值,确认是完整的 Key。还有一种情况是 Key 本身失效了,去控制台重新生成一个。改完记得openclaw config validate再重启网关。
local proxy failed。这个报错通常跟模型通道无关,是网关本身没起来。先openclaw gateway status看 Runtime 是不是 running,不是的话openclaw gateway restart。如果重启还不行,看端口占用:ss -tlnp | grep 18789。端口被别的进程占了,网关就起不来,改gateway配置里的端口或者杀掉占用进程。
reading choices 相关报错。这个一般出现在响应解析阶段,报错信息里会带reading 'choices'或者cannot read property 'choices' of undefined。原因是返回的 JSON 结构跟预期不符,多半是baseUrl写错了导致请求打到了错误的路径,返回了一个 HTML 错误页而不是 JSON。确认baseUrl是https://taotoken.net/api,没有多余后缀。另外确认api字段是openai-completions,写成别的适配器可能解析不了。
OAuth 相关报错。如果你之前配过需要 OAuth 的 provider,配置里可能残留了oauth字段,OpenClaw 启动时会尝试走 OAuth 流程然后失败。检查providers下有没有多余的 provider 配置,把不用的删掉。统一走 TaoToken 之后,理论上只需要保留taotoken一个 provider。
模型 id 不匹配。报错类似model not found或者invalid model。models数组里的id必须跟服务端支持的模型名一致,大小写敏感。不确定的话,先用openclaw models list看识别到了哪些,再对照调整。
排查顺序建议是:先openclaw config validate确认配置语法,再openclaw gateway status确认网关,最后openclaw logs --follow看实际请求日志。三步走下来,大部分问题都能定位到具体是哪一层。
6. 长期跑 Agent 的通道选择与后续动作
装好、配通、验证过之后,OpenClaw 就可以作为常驻服务跑在 Linux 上了。如果你只是偶尔测一下模型,用按量的 API Key 就够了;但如果你打算长期跑 Agent、接多个渠道、做持续集成,那通道的稳定性和额度管理就变得重要。
我自己的做法是把 OpenClaw 的模型通道固定到 TaoToken,然后根据使用强度选套餐。日常调试和轻量调用,用 API Key 按量走;如果是团队里多个人共用、或者要跑长时间的自动化任务,看 Coding Plan 会更划算,地址是 https://taotoken.net/coding-plan 。它的好处是额度可预期,不用每次调用都盯着余额。
后续如果要接更多渠道,比如把 OpenClaw 接到飞书之外的平台,配置结构是一样的,在channels下加对应渠道的配置就行,模型通道不用动。这也是统一通道的价值:渠道换来换去,模型这边只维护一份配置。
最后留一个实用动作:把~/.openclaw/openclaw.json备份一份,改配置之前先复制。OpenClaw 的配置校验虽然能挡掉大部分语法错误,但字段层级写错不一定报错,可能只是静默不生效。备份能让你在改坏之后快速回滚。网关的 systemd 服务文件在~/.config/systemd/user/openclaw-gateway.service,需要调启动参数的话改这里,改完systemctl --user daemon-reload再重启。