第2课:Provider  Models — OpenClaw 的引擎室:把 openclaw.json 改到 TaoToken 1. 为什么 OpenClaw 需要 Provider 层从 openclaw.json 看模型接入的统一适配OpenClaw 的 Provider 与 Models 配置层说白了就是整个 Agent 的引擎室。你写的每一句 prompt、每一次工具调用最终都要经过这一层翻译成某个模型厂商能听懂的 HTTP 请求。如果你只用一个模型可能感觉不到它的存在但当你同时接 DeepSeek、通义千问、Claude、本地 Ollama 的时候Provider 层就是那个帮你把不同方言统一成普通话的中间人。我先把问题摆出来。OpenAI 的接口长这样{ messages: [...], model: gpt-4o }endpoint 是/v1/chat/completions。DeepSeek 兼容 OpenAI 格式但 baseUrl 和模型 ID 完全不同。通义千问的 compatible-mode 也是 OpenAI 格式但路径带/compatible-mode/v1。Anthropic Claude 是另一套system独立字段的格式。Google Gemini 又是另一套。本地 Ollama 虽然也提供/v1/chat/completions但可能压根不需要 apiKey。如果没有 Provider 层你的 Agent 代码里就得写一堆 if-else 来判断现在调的是哪家。OpenClaw 的做法是抽象出 Provider 层Agent 层只认统一的调用接口Provider 层负责适配不同 API 格式。你在openclaw.json里写的api: openai-completions就是在告诉 OpenClaw这个 Provider 用的是 OpenAI 兼容格式你按那套规则去拼请求就行。这一层抽象带来的直接好处是换模型不用改 Agent 代码。你只需要在openclaw.json里加一个 provider 块或者在 agent 配置里改一行providerId/modelId整个切换就完成了。这也是为什么第 2 课要单独讲 Provider 和 Models——它是你后面所有课程的地基。现在把视角拉到实际场景。假设你手头有一个 demo-agent默认走 DeepSeek 官方 API。某天 DeepSeek 官方接口响应变慢你想临时切到通义千问上的 DeepSeek V4 Flash因为那个通道上下文窗口 100 万 token、价格还更低。如果没有 Provider 层你得改代码、重新部署。有了 Provider 层你只需要在openclaw.json里把 provider 指向 TaoToken 的统一通道模型 ID 保持不变重启 Gateway 就完事。TaoToken 在这里扮演的角色是一个统一 Key/API 通道。它把多个模型提供方聚合到同一个 baseUrl 下你拿一个 Key 就能访问不同厂商的模型。对于 OpenClaw 来说它就是一个标准的 OpenAI 兼容 Provider。你不需要为每个厂商单独配 Key、单独记 baseUrl只需要在openclaw.json的 providers 里加一个 taotoken 块然后在 models 列表里声明你要用哪些模型 ID。这一课的目标很明确把openclaw.json里的 Provider 和 Models 配置改到 TaoToken 通道写出可复制的配置片段加上 fallbacks 兜底最后用一次实际调用验证生效。你跟着做十分钟内能跑通。2. TaoToken 前置准备拿到统一 Key 与确认 baseUrl在改openclaw.json之前你需要先拿到 TaoToken 的 API Key并确认 baseUrl。这一步很快但 Key 的存放位置和引用方式会影响后面的配置写法所以单独拎出来讲。先访问 TaoToken 官网注册并登录https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。登录后进入控制台找到 API Keys 页面。deep link 是 https://taotoken.net/console/api-keys 你也可以从官网导航进去。在 API Keys 页面创建一个新 Key复制出来。这个 Key 就是你后面填进openclaw.json的凭证。注意一点Key 不要直接硬编码在openclaw.json里提交到 Git。推荐用环境变量引用。OpenClaw 的配置支持${VAR_NAME}语法你可以在 shell 里 export也可以在.env文件里写。我一般用环境变量因为这样配置文件可以安全地分享给团队。TaoToken 的 API baseUrl 是 https://taotoken.net/api 。这个地址不加任何 UTM 参数直接作为baseUrl填进配置。它的接口格式是 OpenAI 兼容的所以api: openai-completions这一行不用改。模型 ID 方面TaoToken 通道下你可以用各家模型的原始 ID。比如 DeepSeek 的deepseek-chat、deepseek-reasoner通义千问的qwen3.7-plus、qwen3.6-flash以及deepseek-v4-flash这类。具体可用列表以控制台或接入文档为准文档地址是 https://taotoken.net/doc 。你在openclaw.json的 models 数组里声明哪些 IDOpenClaw 就认哪些。这里有一个容易踩的坑模型 ID 的写法。在 OpenClaw 里引用模型时格式是providerId/modelId。比如 provider 叫taotoken模型 ID 是deepseek-chat那引用就是taotoken/deepseek-chat。如果你在 agent 配置里写成deepseek/deepseek-chat但 providers 里没有叫deepseek的块就会报找不到 provider。所以命名要一致。另外TaoToken 的 Key 权限和额度在控制台里可以查看。如果你发现请求返回 401先去控制台确认 Key 是否启用、额度是否充足。这一步花两分钟确认能省掉后面半小时的排障。准备好 Key 和 baseUrl 之后就可以动手改openclaw.json了。下一节给出完整配置片段。3. 可复制配置把 openclaw.json 的 Provider 指向 TaoToken这一节是核心操作。我给出一个完整的openclaw.json配置片段你可以直接复制把 Key 换成自己的然后保存。配置分三块models 层的 providers 定义、models 列表声明、agents 层的模型引用与 fallbacks。先看 providers 部分。在openclaw.json的models对象里有一个providers字段。我们把 TaoToken 作为一个 provider 加进去{ models: { mode: merge, providers: { taotoken: { baseUrl: https://taotoken.net/api, api: openai-completions, apiKey: ${TAOTOKEN_API_KEY}, models: [ { id: deepseek-v4-flash, name: DeepSeek V4 Flash, reasoning: true, input: [text], contextWindow: 1000000, maxTokens: 65536, cost: { input: 0.5, output: 0.5, cacheRead: 0.05, cacheWrite: 0 }, compat: { supportsUsageInStreaming: true }, api: openai-completions }, { id: qwen3.6-flash, name: Qwen3.6 Flash, reasoning: false, input: [text], contextWindow: 1000000, maxTokens: 8192, cost: { input: 0.3, output: 0.6, cacheRead: 0.03, cacheWrite: 0 }, api: openai-completions }, { id: deepseek-chat, name: DeepSeek Chat, reasoning: false, input: [text], contextWindow: 131072, maxTokens: 8192, cost: { input: 0.28, output: 0.42, cacheRead: 0.028, cacheWrite: 0 }, api: openai-completions } ] } } } }这里mode设为merge意思是全局模型列表和 agent 自身配置合并使用。如果你设成overrideagent 自己的配置会完全覆盖全局各模型独立。我建议先用merge因为这样你在 agent 层可以只写差异部分。apiKey用${TAOTOKEN_API_KEY}引用环境变量。你需要在 shell 里执行export TAOTOKEN_API_KEY你的TaoToken Key或者在项目根目录建一个.env文件写入TAOTOKEN_API_KEY你的KeyOpenClaw 启动时会自动加载。接下来是 agents 层的配置。假设你的 agent 叫demo-agent在openclaw.json的agents字段里配置默认模型和 fallbacks{ agents: { defaults: { model: { primary: taotoken/deepseek-v4-flash, fallbacks: [ taotoken/qwen3.6-flash, taotoken/deepseek-chat ] } } } }注意primary和fallbacks里的模型引用格式都是providerId/modelId。taotoken是上面 providers 里定义的 keydeepseek-v4-flash是 models 数组里的 id。这样 OpenClaw 就知道主模型走 TaoToken 通道的 DeepSeek V4 Flash失败时依次回退到 Qwen3.6 Flash 和 DeepSeek Chat。如果你有多个 agent可以在各自的 agent 配置里覆盖model字段。比如某个 agent 专门做代码生成你可以把它的 primary 设成taotoken/deepseek-reasonerfallbacks 设成taotoken/deepseek-chat。这样不同 agent 用不同模型策略互不影响。配置写完后重启 OpenClaw Gateway 让配置生效。重启命令取决于你的部署方式如果是本地 CLI通常是openclaw gateway restart或直接 kill 后重新启动。重启后OpenClaw 会读取openclaw.json把 TaoToken 注册为一个可用 Provider。这里提醒一个细节models数组里的cost字段是用于统计的不影响实际计费。实际计费以 TaoToken 控制台为准。你填的数值可以按官方价格填也可以留空但填了之后 OpenClaw 的用量统计会更准确。配置片段就这些。下一节我们实际发一条请求验证 Provider 和 Models 是否生效。4. 验证请求用 CLI 发一条消息确认模型生效配置改完、Gateway 重启之后别急着写代码。先用 OpenClaw 的 CLI 发一条消息确认模型真的走的是 TaoToken 通道。这一步能帮你快速定位配置问题。打开终端执行openclaw agent --agent demo-agent --message 你的模型是谁请用一句话回答。如果你没有demo-agent可以用默认 agentopenclaw agent --message 你的模型是谁请用一句话回答。预期结果是Agent 返回一条回复内容里会提到它使用的模型。如果配置正确它应该回答自己是 DeepSeek V4 Flash 或类似的模型名。如果它回答的是别的模型说明 primary 没生效可能配置没加载或者引用写错了。更严谨的验证方式是看 Gateway 的日志。OpenClaw 在发起请求时会打印 provider、model、baseUrl 等信息。你可以在 Gateway 的日志输出里找类似这样的行[provider] taotoken - https://taotoken.net/api [model] primarytaotoken/deepseek-v4-flash [request] POST /v1/chat/completions modeldeepseek-v4-flash看到taotoken和https://taotoken.net/api就说明 Provider 指向正确。看到modeldeepseek-v4-flash说明模型 ID 传递正确。如果你想进一步确认 fallbacks 生效可以临时把 primary 改成一个不存在的模型 ID比如taotoken/nonexistent-model然后重启 Gateway 再发消息。如果 fallbacks 配置正确Agent 应该自动回退到taotoken/qwen3.6-flash并正常返回。验证完记得把 primary 改回来。还有一种验证方式是用 curl 直接打 TaoToken 的接口确认 Key 和 baseUrl 可用curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: deepseek-v4-flash, messages: [{role: user, content: ping}], max_tokens: 10 }如果返回正常的 JSON 响应说明 Key 和通道没问题。如果返回 401检查 Key 是否正确、是否启用。如果返回 404检查 baseUrl 是否写成了https://taotoken.net/api而不是带/v1的路径——OpenClaw 会自动拼/v1/chat/completions所以 baseUrl 不要带/v1。验证通过后你的 Provider 和 Models 配置就算生效了。后面写业务代码时Agent 会自动走 TaoToken 通道你不需要在代码里再指定 baseUrl 或 Key。5. 常见报错排查401、local proxy failed、reading choices、OAuth配置过程中最容易遇到几类报错。我按实际踩过的坑逐个说你对照日志排查。第一类401 Unauthorized。日志里通常显示401或invalid api key。原因通常是TAOTOKEN_API_KEY环境变量没设置或者设置的值不对。检查方式在终端执行echo $TAOTOKEN_API_KEY看是否有输出。如果没有说明环境变量没 export 成功。如果你用的是.env文件确认 OpenClaw 启动时加载了该文件。另一个可能是 Key 在控制台被禁用或额度耗尽去 https://taotoken.net/console/api-keys 确认状态。第二类local proxy failed或connection refused。这类报错说明 OpenClaw 尝试连接 baseUrl 时失败了。检查openclaw.json里的baseUrl是否写成https://taotoken.net/api。如果你写成了https://taotoken.net/api/v1OpenClaw 会拼成/v1/v1/chat/completions导致 404 或连接异常。另外确认你的网络能正常访问该地址可以用 curl 测一下。第三类reading choices或cannot read property choices of undefined。这个报错说明请求发出去了但返回的 JSON 结构不符合 OpenAI 格式OpenClaw 解析choices字段时失败。常见原因是模型 ID 写错了TaoToken 返回了一个错误对象而不是正常的 completion 响应。检查models数组里的id是否和控制台里的模型 ID 一致。另一个可能是api字段没设成openai-completions导致解析逻辑不对。第四类OAuth 相关报错比如OAuth token expired或refresh token failed。如果你之前配过其他 Provider 的 OAuth 认证切换 TaoToken 后可能残留旧配置。检查openclaw.json里是否有旧的oauth字段或auth字段删掉它们。TaoToken 用的是 API Key 认证不需要 OAuth。第五类模型找不到报model not found或unknown model。检查 agent 配置里的primary和fallbacks引用格式是否为taotoken/模型ID。如果写成deepseek/deepseek-chat但 providers 里没有deepseek这个 key就会报找不到 provider。另外确认models数组里确实声明了该模型 ID。第六类fallbacks 不生效。如果 primary 失败后没有回退检查fallbacks数组是否写在model对象里而不是写在 agent 顶层。正确写法是model.primary和model.fallbacks。另外确认 fallbacks 里的模型也在 providers 的 models 数组里声明过。排查时建议先看 Gateway 日志的最后 20 行通常报错信息会直接指出问题所在。如果日志不够详细可以把 OpenClaw 的日志级别调到 debug重新发一次请求。6. 下一步用模型对话验证通道长期编码走 Coding Plan配置生效后你可以用模型对话页面快速验证 TaoToken 通道下的各个模型是否可用。访问 https://taotoken.net/models 或从控制台进入模型对话选一个模型 ID发一条测试消息。这能帮你确认哪些模型在当前 Key 下可用、响应速度如何。如果你打算长期用 OpenClaw 做编码或 Agent 任务建议了解一下 Coding Plan。它适合需要稳定调用、批量任务的场景。入口在 https://taotoken.net/coding-plan 你可以对比一下按量调用和套餐的差异选适合自己的方式。接入文档在 https://taotoken.net/doc 里面有完整的 API 说明和模型列表。遇到配置问题时先翻文档再对照本文的排查章节。API Keys 管理页面是 https://taotoken.net/console/api-keys Key 的创建、禁用、额度查看都在那里。这一课的核心就是openclaw.json里的 Provider 和 Models 配置。你把 TaoToken 作为一个 OpenAI 兼容 Provider 加进去用taotoken/模型ID的格式引用配上 fallbacks 兜底整个引擎室就搭好了。下一课讲 Channel 配置那是 Agent 和外界交互的通道到时候见。