1. 为什么我想把 OpenClaw 的百炼通道换成 TaoToken
在 Ubuntu 服务器上折腾 OpenClaw 的人,多半都经历过同一个流程:装完 OpenClaw,QuickStart 里模型厂商选了阿里云百炼,然后被引导去百炼控制台建 Key,再把compatible-mode/v1的地址和 Key 一起塞进models.providers.bailian。对只想先把 agent 跑起来的人来说,这一步确实偏绕——你还没验证 OpenClaw 本身能不能用,就先被拉去另一个平台走了一遍注册和建 Key 的流程。
我这次想验证的事情很具体:OpenClaw 的百炼通道baseUrl如果改指向 TaoToken,qwen3-max还跑不跑得通?答案是跑得通,而且改动量比想象中小。核心逻辑是——OpenClaw 的 provider 配置里,api字段保持openai-completions不变,models数组里qwen3-max那一段的id、contextWindow、maxTokens全部保留,只把该 provider 的baseUrl换成 TaoToken 的通道地址,apiKey换成在 TaoToken 创建的 Key,agents.defaults.model.primary仍然指向这个 provider 下的模型。Save + Update 之后进聊天发一条消息,有回复就说明 OpenClaw 的 agent 已经通过 TaoToken 调通 qwen3-max 了。
这篇适合两类人:一是已经在 Ubuntu 上装好 OpenClaw、QuickStart 选了百炼但不想去百炼控制台建 Key 的;二是想搞清楚「同一把 Key 换供应商」这件事在 OpenClaw 里到底改哪几行的。下面按我实际操作的顺序写,命令和配置都能直接抄。
2. 前置准备:TaoToken 的 Key 和 OpenClaw 的安装状态
先说 Key 这一侧。打开https://taotoken.net/?utm_source=taotoken_aicg_blog_end注册,进控制台创建一个 Key,复制出来备用。这一步替代了原文里「去百炼控制台创建 Key」的环节,后面配置里apiKey粘贴的就是它。Key 建议先放本地文本里,因为 OpenClaw 的 Web UI 配置框里粘贴时容易带空格。
再说 OpenClaw 这一侧。如果你还没装,Ubuntu 服务器上执行:
curl -fsSL https://openclaw.ai/install.sh | bash这个脚本会自动装 Node.js 和依赖,等它跑完。安装完成后会自动进入配置页面,方向键切换选项、空格选中/取消、回车确认。QuickStart 快速开始,模型厂商那一步按原文选百炼也没关系——我们后面会在 Web UI 里把 provider 的baseUrl改掉,所以这里选哪个厂商不影响最终结果,只是让 OpenClaw 先把 provider 骨架生成出来。
配置过程中会问要不要配通信通道(QQ、飞书、Telegram 之类),不需要就 Skip for now;技能配置可以跳过;钩子(hooks)我选了command-logger和session-memory,前者记录 Agent 命令方便回溯,后者在/new、/reset时保存会话上下文。提示运行网关时 Restart,提示启动方式时选网页启动(Open the Web UI)。
到这里 OpenClaw 本体就绪,接下来是端口转发和 Web UI。
3. 可复制配置:dashboard 端口转发与 models.providers 改写
先在 Ubuntu 服务器上生成 dashboard 链接:
openclaw dashboard它会输出一个带端口的本地链接。注意,这个链接不能直接在服务器上开浏览器访问,要在你本地电脑的终端做 SSH 端口转发。打开本地终端(不是 Ubuntu 服务器终端),执行:
ssh -N -L 18789:127.0.0.1:18789 ubuntu@你的服务器公网IP输入密码回车后,如果终端卡住不动,那就是正确的——-N表示不执行远程命令,只做转发。这个终端保持不要关。然后浏览器打开刚才openclaw dashboard生成的链接,就能进 OpenClaw 的 Web UI 了。
进 Web UI 后找到配置区,定位到models和agents这两块。下面是我改完之后的完整片段,你可以对照自己的替换:
"models": { "mode": "merge", "providers": { "bailian": { "baseUrl": "https://taotoken.net/api", "apiKey": "你在TaoToken创建的KEY", "api": "openai-completions", "models": [ { "id": "qwen3-max-2026-01-23", "name": "qwen3-max-thinking", "reasoning": false, "input": ["text"], "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, "contextWindow": 262144, "maxTokens": 65536 } ] } } }, "agents": { "defaults": { "model": { "primary": "bailian/qwen3-max-2026-01-23" }, "models": { "bailian/qwen3-max-2026-01-23": { "alias": "qwen3-max-thinking" } }, "maxConcurrent": 4, "subagents": { "maxConcurrent": 8 } } }几个关键点单独拎出来说。baseUrl填https://taotoken.net/api,不带/v1,也不加任何 UTM 参数——这一点和百炼的compatible-mode/v1写法不同,别顺手把/v1补上去。api字段保持openai-completions不动,这是 OpenClaw 识别请求格式的依据。models数组里qwen3-max那一段的id、contextWindow、maxTokens全部保留原值,contextWindow是 262144,maxTokens是 65536,这些是模型能力声明,跟走哪个通道无关。agents.defaults.model.primary仍然写bailian/qwen3-max-2026-01-23,也就是「provider 名/模型 id」的格式,provider 名还是bailian,只是它背后的地址换了。
改完点右上角 Save,再点 Update,等一会儿让配置生效。
4. 验证请求:发一条消息看 qwen3-max 是否真的通了
配置 Update 完成后,在 Web UI 里点聊天,发一条消息,比如「用一句话说明你现在用的是哪个模型」。如果有回复,就说明 OpenClaw 的 agent 已经通过 TaoToken 调通 qwen3-max 了。这一步的验证逻辑很直接:请求从 OpenClaw 发出,走baseUrl指向的 TaoToken 通道,apiKey鉴权通过,模型 id 匹配到 qwen3-max,返回内容渲染到聊天窗口。
如果你想在命令行侧再确认一次通道本身是通的,可以用 curl 直接打 TaoToken 的接口:
curl https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer 你在TaoToken创建的KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3-max-2026-01-23", "messages": [{"role": "user", "content": "ping"}] }'有正常 JSON 返回就说明 Key 和通道没问题,那 OpenClaw 里没回复就只可能是配置没 Save/Update 或者端口转发断了。实测下来,OpenClaw 这边最容易出问题的是 Update 之后没等够时间就去发消息,配置还没热加载完,等十几秒再试通常就好了。
以后要换别的模型,同一把 Key 只改 provider 下的模型id即可,baseUrl和apiKey都不用动。比如把id换成另一个模型标识,agents.defaults.model.primary同步改成bailian/新模型id,Save + Update 就完成切换。这就是「同一把 Key 换供应商/换模型」在 OpenClaw 里的实际形态——provider 是个壳,里面装什么模型由id决定。
5. 本篇常见错排查
报 401 或鉴权失败:先检查apiKey有没有粘贴时带首尾空格,Web UI 的输入框里这种情况很常见。其次确认 Key 是在 TaoToken 控制台创建的、状态正常。如果 curl 直连也 401,那就是 Key 本身的问题,跟 OpenClaw 无关。
报 404 或路径不对:八成是baseUrl写成了https://taotoken.net/api/v1或者带了别的后缀。正确写法就是https://taotoken.net/api,不带/v1。OpenClaw 会在这个地址后面按openai-completions的约定拼路径,你多写一层反而错。
聊天没回复但也不报错:先看 SSH 端口转发那个终端是不是还开着,-N -L的会话断了 Web UI 就连不上网关。再看 Save 之后有没有点 Update,只 Save 不 Update 配置不生效。最后确认agents.defaults.model.primary的 provider 名和models.providers下的键名一致,都是bailian,写错一个字母就找不到模型。
模型 id 不匹配:primary里写的是bailian/qwen3-max-2026-01-23,models数组里的id也必须是qwen3-max-2026-01-23,两边要完全一致。如果你从别处抄来的 id 带了日期后缀差异,以实际通道支持的为准。
端口转发卡住但浏览器打不开:ssh -N -L卡住是正常的,但浏览器要打开的是openclaw dashboard输出的那个链接,不是127.0.0.1:18789裸地址。链接里通常带 token 或路径,直接访问裸端口会失败。
6. 后续换模型与接入文档
把百炼通道的baseUrl改到 TaoToken 之后,OpenClaw 的 agent 侧体验和原来一致,区别只是 Key 的来源和通道地址。如果你后面要接别的模型,记住三件事:baseUrl保持https://taotoken.net/api,api保持openai-completions,只改models数组里的id和agents.defaults.model.primary的对应值。
需要管理 Key 或看用量,进控制台:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite。Key 的创建和轮换在 API Keys 页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite。接入参数和字段说明看文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite。如果你只是想先在网页里验证某个模型通不通,用模型对话页最快:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite。长期跑编码类 agent、需要稳定额度的,可以看 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite。
我自己的习惯是,换模型之前先用 curl 打一发确认通道和 Key 没问题,再去动 OpenClaw 的配置,这样出问题时能快速定位是通道侧还是 OpenClaw 侧。端口转发那个终端我一般单独开一个窗口挂着,不跟其他 SSH 会话混在一起,断了也好认。