1. 为什么我决定把 OpenClaw 接上统一模型通道
OpenClaw 是一个跑在你自己电脑上的开源 AI Agent,能接微信、飞书、Telegram、Discord 等十几个聊天入口,收到消息后调用大模型思考,再真的去操作文件、跑脚本、发邮件、浏览网页。它和网页版 ChatGPT 最大的区别是:它住在你的机器里,能访问你授权的本地文件,还能长程运行、远程遥控。ClawHub 上已经有几千个社区 Skill,装一个就能多一项能力,甚至 Agent 可以给自己写 Skill 再自己装上。
但真正动手配过的人都知道,OpenClaw 的坑不在装依赖,而在模型接入这一层。默认配置里往往要你分别填 OpenAI、Anthropic、Google 的 Key,每个 Provider 一套字段、一套模型名、一套计费方式。你想换模型,就得改配置、重启、再测一遍 Skill 能不能跑通。对于想跑「一人独角兽」最小闭环的单人开发者来说,这种碎片化的接入方式非常消耗精力。
我试过把 OpenClaw 的模型出口统一到一个兼容 OpenAI 协议的通道上,config.toml 只维护一份 base_url 和 api_key,Skill 调用时不再关心背后是哪个厂商。这篇就把这套骨架、settings.json 的关键字段,以及一次完整的 Skill 验证动作写清楚,你可以直接复制改。
2. TaoToken 在 OpenClaw 里的角色:统一 Key 与 API 通道
TaoToken 在这里扮演的是「模型能力统一入口」。它提供兼容 OpenAI 风格的 API 地址,你只需要一个 Key,就能在 OpenClaw 里调用多种模型,不用为每个 Provider 单独维护配置。对 OpenClaw 这种需要频繁切换模型、跑不同 Skill 的场景来说,统一通道能省掉大量重复配置。
具体来说,OpenClaw 的模型调用层读的是 config.toml 里的 provider 段和 settings.json 里的运行时参数。我们把 provider 的 base_url 指向 TaoToken 的 API 地址,api_key 填你在控制台生成的 Key,模型名按 TaoToken 文档里支持的写。这样 OpenClaw 发出的请求会先到 TaoToken,再由它路由到对应模型,返回结果格式和 OpenAI 一致,Skill 侧无感知。
需要提前准备的东西只有三样:一个 TaoToken 账号、一个 API Key、以及本机已经装好的 OpenClaw。Key 在控制台的 API Keys 页面生成,建议单独建一个给 OpenClaw 用,方便后续按项目排查用量。接入文档里有完整的字段说明和可用模型列表,配之前扫一眼能少走弯路。
注意:API Key 只存在本地配置文件里,不要提交到 Git,也不要在聊天记录里明文发。OpenClaw 的配置文件默认在用户目录下,权限设成仅本人可读。
3. 可复制的 config.toml 骨架与 settings.json 关键字段
下面这份 config.toml 是我实测能跑通的最小骨架。核心思路是只保留一个 provider 段,把 base_url 指向 TaoToken 的 API 地址,模型名用占位符,你按文档替换成实际想用的即可。
# ~/.openclaw/config.toml [agent] name = "my-claw" workspace = "/Users/you/claw-workspace" log_level = "info" [provider.taotoken] type = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoTokenKey" default_model = "你的默认模型名" timeout_seconds = 120 max_retries = 2 [skills] dir = "/Users/you/claw-workspace/skills" auto_load = true [channels.telegram] enabled = false [channels.feishu] enabled = false几个字段说明。type必须是openai-compatible,这样 OpenClaw 才会用 OpenAI 的请求格式发出去。base_url结尾不要带/v1,OpenClaw 会自己拼路径,带了反而会 404。timeout_seconds建议给到 120,Agent 跑长任务时模型响应可能偏慢,太短会误判超时。max_retries设 2 就够,重试太多会把一次失败放大成多次计费。
settings.json 管的是运行时行为,和 config.toml 分工不同。config.toml 定义「连哪个模型」,settings.json 定义「怎么用这个模型」。
{ "runtime": { "model": "你的默认模型名", "temperature": 0.3, "max_tokens": 4096, "stream": true }, "skill": { "confirm_before_exec": true, "allowed_paths": ["/Users/you/claw-workspace"], "denied_commands": ["rm -rf", "curl | sh"] }, "memory": { "enabled": true, "max_turns": 20 } }temperature给 0.3 是因为 Agent 任务偏执行,不需要太多发散。confirm_before_exec建议先开着,等 Skill 稳定了再关,避免 Agent 误操作文件。allowed_paths一定要写死,别给整个用户目录,这是安全底线。denied_commands是最后一道闸,把危险命令挡在执行前。
提示:改完 config.toml 和 settings.json 后,OpenClaw 需要重启才会重新加载。如果你用的是后台常驻模式,先停掉进程再启动,别指望热重载。
4. 从 ClawHub 拉取 Skill 并完成一次调用验证
配置写好后,下一步是拉一个 Skill 进来,验证整条链路真的通了。我选一个最简单的文件读取类 Skill 做验证,因为它不依赖外部服务,出错时容易定位是模型层还是 Skill 层的问题。
第一步,从 ClawHub 拉取 Skill。OpenClaw 自带 skill 子命令,直接指定 Skill 名即可。
openclaw skill install file-reader装完后确认目录里出现了对应文件夹:
ls ~/claw-workspace/skills/ # 应该能看到 file-reader/第二步,启动 OpenClaw 并观察启动日志里 provider 是否加载成功。
openclaw start --foreground启动日志里会打印 provider 名称和 base_url。如果看到provider taotoken loaded且 base_url 是https://taotoken.net/api,说明配置读对了。如果报unknown provider type,回去检查 config.toml 里type是不是写成了openai-compatible。
第三步,发一条触发 Skill 的消息。在 OpenClaw 的交互终端里输入:
读取 ~/claw-workspace/README.md 的前 10 行,告诉我里面写了什么这条消息会走完整链路:OpenClaw 把消息和 Skill 描述一起发给模型,模型判断该调用 file-reader,返回调用参数,OpenClaw 执行读取,再把结果回给模型,模型组织成自然语言回复你。
成功时你会看到类似这样的输出:
[skill] file-reader invoked: path=~/claw-workspace/README.md, lines=10 [model] response received (taotoken) 这是 README 的前 10 行内容:...看到[model] response received (taotoken)这一行,就说明模型请求确实走了 TaoToken 通道,Skill 调用也正常返回。到这一步,「一人独角兽」的最小闭环就跑通了:消息进来、模型思考、Skill 执行、结果返回。
如果你想让 Agent 长期跑任务,比如定时检查文件、自动整理日程,可以考虑用 Coding Plan 这类按周期计费的方式,比按次调用更适合常驻场景。模型对话入口适合临时验证某个模型在 Skill 任务上的表现,接入文档则在你需要加新 Provider 或调参数时查。
5. 本篇常见错误排查
配 OpenClaw 接 TaoToken 时,报错基本集中在几个地方。下面按我踩过的顺序列出来,你对着日志找就行。
报错一:401 Unauthorized。九成是 api_key 填错或前后有空格。检查 config.toml 里api_key那一行,确认没有多余引号嵌套。如果你把 Key 放在环境变量里再引用,确认 OpenClaw 启动时那个变量确实存在。
报错二:404 Not Found。通常是 base_url 写成了https://taotoken.net/api/v1。OpenClaw 的 openai-compatible 实现会自己拼/v1/chat/completions,你多写一层就变成/api/v1/v1/...。把 base_url 改回https://taotoken.net/api即可。
报错三:model not found。模型名拼错,或者你用的模型不在当前 Key 的可用范围内。去接入文档里核对模型名,注意大小写和连字符。default_model 和 settings.json 里的 model 要一致,不一致时以 settings.json 为准,容易让人误以为配置没生效。
报错四:Skill 装了但模型不调用。先确认auto_load = true,再确认 Skill 目录路径没写错。如果 Skill 描述写得太模糊,模型可能判断不出该不该调用。可以在消息里明确说「用 file-reader 读取」,强制触发一次,确认 Skill 本身没问题。
报错五:请求超时。长任务时模型响应慢,把timeout_seconds调到 180 再试。如果还是超时,看是不是 max_tokens 设太大导致生成时间过长,先降到 2048 验证。
报错六:Agent 执行了不该执行的命令。立刻检查 settings.json 里的denied_commands和allowed_paths。这两个字段是硬约束,但写法要对,路径要用绝对路径,命令匹配是前缀匹配。改完重启,别在运行中改。
注意:排查时先把 log_level 调到 debug,能看到完整的请求和响应体。定位完再调回 info,不然日志会涨得很快。
6. 把统一通道固化下来,让 Skill 自己长
跑通一次验证之后,真正省事的地方在于:以后你从 ClawHub 装任何新 Skill,都不用再动模型配置。Skill 只管声明自己要什么能力,模型调用统一走 TaoToken 通道,换模型只改 settings.json 里一个字段。这种结构对单人开发者特别友好,因为你不需要维护多套 Provider 配置,也不会因为某个厂商改接口而全线崩。
我自己的做法是把 config.toml 和 settings.json 放进一个私有仓库,换机器时 clone 下来改一下路径和 Key 就能用。Skill 目录单独放,不跟配置混在一起,方便备份和迁移。如果你要跑常驻任务,记得给 OpenClaw 配一个进程守护,崩了能自动拉起来,不然半夜任务断了你也不知道。
下一步可以试试让 Agent 自己写一个 Skill 再装上,这是 OpenClaw 最有意思的能力。写之前先把confirm_before_exec开着,确认新 Skill 行为符合预期再放权。模型能力这边,需要临时对比不同模型在 Skill 任务上的表现时,用模型对话快速试;要长期跑编码类 Agent,Coding Plan 的周期计费更划算;加新 Provider 或调参数时翻接入文档。Key 在控制台的 API Keys 页面管理,建议按用途分多个 Key,出问题时能快速定位是哪个环节的调用。