:把 settings 改到 TaoToken)
1. WSL2 里 OpenClaw 多模型配置到底难在哪如果你在 Windows 上跑 OpenClaw大概率会选 WSL2 Ubuntu 这套组合Windows 负责桌面和浏览器Ubuntu 负责跑服务、装依赖、连模型。听起来很顺但真正动手时多模型配置往往卡在几个很具体的地方。OpenClaw 本身是一个支持多模型路由的 Agent 框架它能同时挂载本地 Ollama 模型和云端模型再按任务类型切换。问题在于WSL2 的网络模型和纯 Linux 不一样localhost 在 Windows 和 Ubuntu 之间不是同一台机器Ollama 默认只监听 127.0.0.1云端 API 又需要稳定的出口。很多人第一次配完openclaw models list只显示一半模型或者调用时报local proxy failed其实不是模型坏了而是地址和监听范围没对齐。这篇教程面向三类人刚在 WSL2 装好 Ubuntu、准备把 OpenClaw 跑起来的新手已经能跑单模型、想加本地 Ollama 做离线兜底的人以及想把多个云端模型统一到一个 Key/API 通道、减少重复配置的开发者。核心检索词就是 OpenClaw 多模型配置场景锁定 WSL2 Ubuntu。我会按真实落地顺序走先确认 WSL2 和 systemd 状态再装 Ollama 并让它对 WSL2 内网可见然后用统一通道接入云端模型最后给出可复制的 settings 片段、环境变量写法和连通性验证命令。每一步都附上我实际遇到过的报错和排查方向你可以直接照着敲。需要先说明一个前提OpenClaw 的配置分两层一层是~/.openclaw/openclaw.json这类主配置另一层是环境变量覆盖。多模型能不能一次跑通取决于这两层有没有冲突。下面所有命令都在 Ubuntu 终端里执行Windows 侧只负责打开 WSL2。2. TaoToken 统一 Key/API 通道的前置准备多模型配置最烦的不是模型本身而是每个厂商一套 Key、一套 baseUrl、一套模型 ID 命名规则。DeepSeek 用deepseek-chat硅基流动用Qwen/Qwen2.5-7B-Instruct阿里千问又是qwen-plus配到第五个厂商时人已经麻了。我的做法是本地 Ollama 保留云端模型统一走一个兼容 OpenAI 协议的通道这样 OpenClaw 里只需要维护一份 baseUrl 和一份 Key模型 ID 按通道支持的名称填即可。TaoToken 就是这样一个统一入口官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。前置准备分三步。第一步确认 WSL2 和 systemd。OpenClaw 的 gateway 依赖 systemd 做用户级服务管理如果/etc/wsl.conf里没开 systemdsystemctl --user会直接报找不到服务。检查命令cat /etc/wsl.conf如果输出里没有[boot]和systemdtrue就补上[boot] systemdtrue保存后在 Windows PowerShell 执行wsl --shutdown再重新进 Ubuntu。验证systemctl --user status能正常输出状态就说明 systemd 可用。第二步确认 OpenClaw 版本。多模型配置的 JSON 结构在 2026.3.x 之后才稳定老版本字段名不一样openclaw --version低于 2026.3.x 的建议先升级。第三步拿到统一通道的 Key。访问 https://taotoken.net/api-keys 创建一个 API Key复制保存。这个 Key 后面会写进环境变量不要直接硬编码进仓库。环境变量建议写在~/.bashrc或~/.profile里WSL2 每次启动都会加载export TAOTOKEN_API_KEYsk-你的统一通道Key export TAOTOKEN_BASE_URLhttps://taotoken.net/api改完执行source ~/.bashrc生效。这样做的意义是OpenClaw 的 settings 里可以引用环境变量Key 轮换时只改一处不用翻遍配置文件。注意不要把 Key 提交到 Git。WSL2 里如果开了 Windows 盘符挂载配置文件可能落在/mnt/c下更容易被同步工具带走建议配置统一放~/.openclaw/。到这里前置就绪。下一步进入 Ollama 本地模型的安装和监听配置这是 WSL2 场景最容易出问题的一环。3. 可复制的 settings 配置Ollama 本地 统一通道云端这一节是全文核心直接给可复制的配置片段。OpenClaw 的主配置在~/.openclaw/openclaw.json多模型配置写在models.providers下。我把它拆成两块本地 Ollama 和统一通道。先装 Ollama。在 Ubuntu 里执行curl -fsSL https://ollama.com/install.sh | sh装完启动服务。WSL2 里推荐用 systemd 管理避免每次手动ollama serve sudo systemctl enable ollama sudo systemctl start ollama验证监听curl -s http://localhost:11434/api/tags | python3 -m json.tool关键点来了WSL2 默认的 localhost 转发在多数场景下够用但如果你在 Windows 侧也要访问 Ollama或者 OpenClaw 跑在容器里就需要让 Ollama 监听0.0.0.0。修改 systemd 配置sudo systemctl edit ollama加入[Service] EnvironmentOLLAMA_HOST0.0.0.0:11434然后sudo systemctl restart ollama。这样 WSL2 内网和 Windows 侧都能连上。拉取本地模型ollama pull qwen2.5:7b ollama pull qwen2.5:1.5b ollama pull deepseek-r1:7b ollama list现在写 OpenClaw 的 settings。打开~/.openclaw/openclaw.json在models.providers下加入两个 provider{ models: { mode: merge, providers: { ollama: { baseUrl: http://localhost:11434/v1, apiKey: ollama, api: openai-completions, models: [ { id: qwen2.5:7b, name: 本地 Qwen2.5 7B }, { id: qwen2.5:1.5b, name: 本地 Qwen2.5 1.5B }, { id: deepseek-r1:7b, name: 本地 DeepSeek R1 7B } ] }, taotoken: { baseUrl: https://taotoken.net/api, apiKey: ${TAOTOKEN_API_KEY}, api: openai-completions, models: [ { id: deepseek-chat, name: 统一通道 DeepSeek Chat }, { id: deepseek-reasoner, name: 统一通道 DeepSeek Reasoner }, { id: qwen-plus, name: 统一通道 千问 Plus }, { id: glm-4-flash, name: 统一通道 GLM-4 Flash } ] } } } }这里apiKey用了${TAOTOKEN_API_KEY}引用环境变量OpenClaw 启动时会自动替换。models.mode设为merge表示新配置和已有配置合并而不是覆盖。如果你更习惯用 TOML 风格或 settings 片段管理也可以把 provider 单独抽成文件再用openclaw config set导入openclaw config set models.providers.taotoken --json { baseUrl: https://taotoken.net/api, apiKey: $TAOTOKEN_API_KEY, api: openai-completions, models: [ {id: deepseek-chat, name: 统一通道 DeepSeek Chat}, {id: qwen-plus, name: 统一通道 千问 Plus} ] }配置写完后重启 gatewaysystemctl --user restart openclaw-gateway三件套对照表方便你核对项目本地 Ollama统一通道Base URLhttp://localhost:11434/v1https://taotoken.net/apiKeyollama占位环境变量 TAOTOKEN_API_KEYModel IDqwen2.5:7bdeepseek-chat / qwen-plusModel ID 必须和通道支持的名称一致写错会直接 404。配置完成后不要急着切默认模型先做连通性验证。4. 验证请求与成功结果从 models list 到真实调用配置写完不代表能用必须逐层验证。我习惯从底层往上查先确认 Ollama 通再确认统一通道通最后确认 OpenClaw 能路由。第一层Ollama 直连测试curl -s http://localhost:11434/v1/chat/completions \ -H Content-Type: application/json \ -d { model: qwen2.5:7b, messages: [{role: user, content: 用一句话介绍你自己}] } | python3 -m json.tool返回里有choices[0].message.content就说明本地模型正常。第二层统一通道测试curl -s https://taotoken.net/api/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: deepseek-chat, messages: [{role: user, content: 11等于几}] } | python3 -m json.tool如果返回 401说明 Key 没读到或写错返回 404说明模型 ID 不对。第三层OpenClaw 配置读取openclaw config get models.providers | python3 -c import sys, json data json.load(sys.stdin) for provider, cfg in data.items(): print(f{provider}:) for m in cfg.get(models, []): print(f - {m[\id\]}) 正常输出应该同时列出 ollama 和 taotoken 两组模型。第四层真实 Agent 调用。先设默认模型为本地openclaw config set agents.defaults.model.primary ollama/qwen2.5:7b systemctl --user restart openclaw-gateway openclaw agent --session-id test --message 你好请用一句话介绍自己再临时切到统一通道不修改配置OPENCLAW_MODEL_PRIMARYtaotoken/deepseek-chat \ openclaw agent --session-id test --message 你好请用一句话介绍自己如果两次都能拿到回复说明多模型路由已经跑通。实测下来最容易出问题的是环境变量没被 systemd 继承——systemctl --user启动的服务不会自动读~/.bashrc。解决办法是在~/.config/systemd/user/openclaw-gateway.service里加EnvironmentFile%h/.openclaw/env把 Key 写进那个文件。成功结果长这样openclaw agent返回一段模型回复openclaw models list能看到两个 provider 下的全部模型切换默认模型后重启服务调用走的是新模型。到这一步WSL2 Ubuntu 下的 OpenClaw 多模型配置就算落地了。5. 本篇常见错排查401、local proxy failed、reading choices多模型配置的报错集中在几类我按真实遇到的顺序列出来对照排查。401 Unauthorized。出现在统一通道调用时原因通常是环境变量没生效。先确认echo $TAOTOKEN_API_KEY如果为空说明~/.bashrc没 source 或 systemd 没继承。检查 gateway 服务文件systemctl --user cat openclaw-gateway看有没有EnvironmentFile。没有就补上把 Key 写进~/.openclaw/env权限设chmod 600。local proxy failed。这个报错多出现在 WSL2 网络模式切换后。WSL2 默认 NAT 模式localhost 转发正常如果开了 mirrored 模式localhost解析可能指向 Windows 侧。排查cat /etc/wsl.conf看有没有networkingModemirrored。有的话Ollama 的 baseUrl 建议改成 WSL2 的实际 IPhostname -I | awk {print $1}把http://localhost:11434/v1换成http://WSL2_IP:11434/v1并确保 Ollama 监听0.0.0.0。reading choices 报错。通常是响应体不是标准 OpenAI 格式或者模型返回了错误 JSON。先用 curl 直连确认返回结构再检查 OpenClaw 的api字段是不是openai-completions。如果通道返回的是流式格式而配置写成了非流式也会解析失败。OAuth 相关报错。如果你同时装了 Claude Code 或 Codex 类工具它们的 OAuth 缓存可能和 OpenClaw 的凭据目录冲突。检查~/.openclaw/和~/.config/下有没有重复的凭据文件必要时分开目录。模型列表只显示一部分。这是正常现象openclaw models list有时只显示默认或已认证的模型。验证某个模型是否可用直接临时切换调用OPENCLAW_MODEL_PRIMARYtaotoken/qwen-plus \ openclaw agent --session-id test --message 测试能返回就说明配置没问题。CC Switch / Cline MCP / Codex auth.json 场景。如果你用这些工具做多模型切换三件套必须写全Base URL、Key、Model ID。以 Codex 的auth.json为例缺任何一项都会导致鉴权失败。Cline 的 MCP 配置里baseUrl和apiKey要对应同一个通道模型 ID 不能混用不同厂商的命名。排查顺序建议固定先openclaw doctor它会自动检测配置和网络再 curl 直连最后看 gateway 日志journalctl --user -u openclaw-gateway -n 50日志里通常有明确的错误码和请求地址比猜快得多。6. 多模型切换与长期使用建议配置跑通后日常使用就是切换和兜底。默认模型建议设成统一通道里响应稳定的那个本地 Ollama 作为离线兜底。永久切换openclaw config set agents.defaults.model.primary taotoken/deepseek-chat systemctl --user restart openclaw-gateway临时切换OPENCLAW_MODEL_PRIMARYollama/qwen2.5:7b \ openclaw agent --session-id test --message 你的问题如果你长期做编码或 Agent 任务可以考虑用 Coding Plan 把常用模型和额度固定下来减少每次切模型的成本https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。模型对话调试入口在 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。最后给一个实用技巧把常用模型 ID 写进 shell 别名切换时不用记全名。alias oc-localOPENCLAW_MODEL_PRIMARYollama/qwen2.5:7b openclaw agent --session-id test alias oc-cloudOPENCLAW_MODEL_PRIMARYtaotoken/deepseek-chat openclaw agent --session-id test遇到问题的第一个命令永远是openclaw doctor它会告诉你配置、网络、凭据哪一层断了。多模型配置的本质不是堆模型而是让每一层地址和凭据都对得上剩下的就是按需切换。