1. 为什么要在 OpenClaw 里接 TaoToken
如果你在 Windows 上用 PowerShell 折腾 OpenClaw,大概率会遇到一个很现实的问题:模型供应商的 Key 越配越多,DeepSeek 一个、Claude 一个、后面想加别的又是一个,openclaw.json里的providers越写越长,改一次错一次。更麻烦的是,每个供应商的baseUrl、鉴权头、模型 id 命名规则都不一样,调试的时候光是对齐这些字段就能耗掉半小时。
TaoToken 在这里扮演的角色,是把这些分散的模型通道收敛成一个统一的 Key 和一个统一的 API 入口。你只需要在openclaw.json里配置一个 provider,把baseUrl指向 TaoToken 的 API 地址,apiKey填 TaoToken 的 Key,然后在models数组里声明你想用的模型 id(比如 DeepSeek 系列),OpenClaw 就能通过这一条通道把请求发出去。对在 Windows 上做本地调试的开发者来说,好处很直接:环境变量只维护一个,配置文件只改一处,PowerShell 里验证连通性也只需要一条命令。
这篇面向的是已经在 Windows 上装好 OpenClaw、想用 PowerShell 快速把 TaoToken 通道接进去并验证 DeepSeek 调用链路的人。我会给出可复制的openclaw.json骨架、PowerShell 里设置环境变量的命令、一次真实的连通性验证动作,以及我踩过的几个坑。你不需要先理解 OpenClaw 的全部配置体系,跟着骨架填 Key 就能跑。
2. TaoToken 前置准备:Key 与 API 地址
在动openclaw.json之前,先把两样东西拿到手:TaoToken 的 API Key,以及确认 API 入口地址。Key 在控制台的 API Keys 页面创建,创建后立刻复制保存,页面关掉就看不到了。API 入口是https://taotoken.net/api,注意这个地址不带任何查询参数,直接作为baseUrl的基础。
这里有个容易混的点:官网是https://taotoken.net/,但配置里填的baseUrl要用 API 那个地址。OpenClaw 的 provider 配置里,baseUrl后面通常还会拼上/v1之类的路径,具体取决于你用的api类型。我实测下来,把baseUrl写成https://taotoken.net/api,api字段用openai-completions,OpenClaw 会按 OpenAI 兼容格式去拼/chat/completions,链路是通的。
如果你还没创建 Key,可以先去控制台建一个,命名建议带上用途,比如openclaw-win,方便以后在多个工具之间区分。创建入口在控制台的 API Keys 页面,模型对话的调试入口在模型对话页面,这两个后面验证时会用到。
注意:Key 只显示一次,复制后建议先粘到记事本里临时存一下,等
openclaw.json改完再删掉临时文件。不要直接把 Key 写进会提交到 Git 的配置文件里。
3. openclaw.json 骨架:单 provider 接入 TaoToken
OpenClaw 在 Windows 上的配置文件默认在用户目录下的.openclaw\openclaw.json。用 PowerShell 打开它:
notepad $env:USERPROFILE\.openclaw\openclaw.json下面是一份可以直接复制的骨架,核心是把providers里只留一个taotoken,baseUrl指向 TaoToken API,apiKey先用占位符,模型 id 按你要用的 DeepSeek 模型填:
{ "meta": { "lastTouchedVersion": "2026.3.8", "lastTouchedAt": "2026-03-11T02:42:14.751Z" }, "gateway": { "mode": "local", "port": 18789, "auth": { "mode": "token", "token": "换成你自己的网关token" } }, "models": { "mode": "merge", "providers": { "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoTokenKey", "api": "openai-completions", "models": [ { "id": "deepseek-chat", "name": "DeepSeek Chat" }, { "id": "deepseek-reasoner", "name": "DeepSeek Reasoner" } ] } } }, "agents": { "defaults": { "model": { "primary": "taotoken/deepseek-chat" } } }, "commands": { "native": "auto", "nativeSkills": "auto", "restart": true, "ownerDisplay": "raw" }, "hooks": { "internal": { "enabled": true, "entries": { "command-logger": { "enabled": true } } } } }几个字段说明一下。models.mode用merge表示在默认模型列表基础上合并你声明的 provider,不会把内置的覆盖掉。providers.taotoken.api用openai-completions,这是 OpenAI 兼容的补全接口格式,TaoToken 的 API 通道按这个格式对接。agents.defaults.model.primary写成taotoken/deepseek-chat,格式是provider名/模型id,这样默认 agent 就会走 TaoToken 通道调 DeepSeek。
gateway.auth.token是 OpenClaw 本地网关自己的鉴权 token,跟 TaoToken 的 Key 是两回事,可以保留安装时生成的,也可以自己换一个随机串。别把这两个搞混。
4. PowerShell 环境变量与 Key 读取方式
把 Key 硬编码在openclaw.json里能跑,但不适合长期用,尤其是你会在多台机器或多个项目之间切换。更稳的做法是用 PowerShell 设置用户级环境变量,然后在配置里引用。OpenClaw 支持在apiKey字段里读取环境变量,写法是${环境变量名}。
先设置环境变量,当前会话和持久化都做一遍:
# 当前 PowerShell 会话生效 $env:TAOTOKEN_API_KEY = "sk-你的TaoTokenKey" # 持久化到用户级环境变量,重启后仍有效 [Environment]::SetEnvironmentVariable("TAOTOKEN_API_KEY", "sk-你的TaoTokenKey", "User")设置完验证一下:
echo $env:TAOTOKEN_API_KEY应该输出你的 Key。然后回到openclaw.json,把apiKey改成引用:
"apiKey": "${TAOTOKEN_API_KEY}"这样配置文件里就不出现明文 Key 了。如果你在团队里共享配置骨架,这一招能避免 Key 泄露。注意环境变量名用大写加下划线,PowerShell 里读取时大小写不敏感,但为了跨平台一致,建议统一大写。
改完配置后,重启 OpenClaw 网关让配置生效:
openclaw gateway restart如果重启时报配置解析错误,先检查 JSON 有没有多余的逗号或引号不匹配。PowerShell 里可以用Get-Content加ConvertFrom-Json快速校验:
Get-Content $env:USERPROFILE\.openclaw\openclaw.json -Raw | ConvertFrom-Json没报错就说明 JSON 结构是合法的。
5. 验证请求:一次连通性动作
配置改完,接下来做一次真实的连通性验证。先确认网关在跑:
openclaw gateway status期望看到Runtime: running和RPC probe: ok。如果没跑起来,用openclaw gateway start启动。
然后用命令行发一条消息给默认 agent,走 TaoToken 通道调 DeepSeek:
openclaw agent --agent main --message "你好,请用一句话介绍你自己"如果链路正常,你会看到模型返回的文本。这一步能跑通,说明openclaw.json里的 provider 配置、环境变量读取、模型 id 映射都是对的。
想更直接地验证 TaoToken 通道本身,可以绕过 OpenClaw,用 PowerShell 直接打 API:
$headers = @{ "Authorization" = "Bearer $env:TAOTOKEN_API_KEY" "Content-Type" = "application/json" } $body = @{ model = "deepseek-chat" messages = @( @{ role = "user"; content = "ping" } ) } | ConvertTo-Json -Depth 5 Invoke-RestMethod -Uri "https://taotoken.net/api/v1/chat/completions" ` -Method Post -Headers $headers -Body $body返回里如果有choices字段和模型输出内容,说明 Key 和 API 入口都没问题。这一步排障时特别有用,能把问题定位在 OpenClaw 配置层还是通道层。
提示:
Invoke-RestMethod在 PowerShell 5.1 和 7.x 上行为略有差异,如果遇到编码问题,可以在命令前加[Console]::OutputEncoding = [System.Text.Encoding]::UTF8。
6. 本篇常见错排查
报错Unknown model: taotoken/deepseek-chat:多半是agents.defaults.model.primary里的 provider 名和providers下的键名不一致。检查providers里是不是叫taotoken,primary里也要用同一个名字。改完记得openclaw gateway restart。
报错401 Unauthorized:Key 没读到或读错了。先在 PowerShell 里echo $env:TAOTOKEN_API_KEY确认环境变量有值,再检查openclaw.json里写的是${TAOTOKEN_API_KEY}而不是别的名字。如果你是在设置环境变量之前就启动了网关,网关进程读不到新变量,重启一次。
报错Connection refused或超时:先确认baseUrl是https://taotoken.net/api,不要多写或少写路径。然后用上面那段Invoke-RestMethod直接打 API,如果直连也失败,问题在 Key 或网络层;如果直连成功但 OpenClaw 失败,问题在配置层。
JSON 解析失败:用ConvertFrom-Json校验,常见原因是尾随逗号、中文引号、或者复制时带了不可见字符。建议用notepad而不是 Word 编辑配置文件。
模型返回空内容:检查models数组里的id是否和 TaoToken 支持的模型 id 一致。DeepSeek 系列常用的是deepseek-chat和deepseek-reasoner,写错了不会报错但会返回空。
网关重启后配置没生效:OpenClaw 有些版本会缓存配置,restart不够就stop再start。另外确认你改的是$env:USERPROFILE\.openclaw\openclaw.json,而不是安装目录下的示例配置。
7. 接下来怎么走
配置跑通之后,日常调试基本就是改模型 id、加新模型、或者切换默认 agent 的 primary 模型。每次改完openclaw.json,用openclaw gateway restart加一条openclaw agent消息验证,形成固定动作,比在网页界面里点来点去快得多。
如果你要长期在 OpenClaw 里跑编码类任务或 Agent 工作流,建议把 Key 管理、模型切换、额度监控这几件事固定下来。TaoToken 的 Coding Plan 适合这种持续调用的场景,接入文档里有更细的字段说明和示例。验证模型本身是否可用,可以直接在模型对话页面里试;Key 的创建和管理在 API Keys 页面。把这几处入口存成书签,下次改配置时不用再翻文档。
最后留一个我自己的习惯:每次改openclaw.json之前先复制一份openclaw.json.bak,PowerShell 里一条命令的事,出问题直接回滚,比对着报错逐行找快得多。