OpenClaw 的 6+1 架构里,LLM 层是最容易被低估的一格。Pi Agent 在前头把记忆、用户请求和 Prompt 组装成一次推理调用,Gateway 在后头管鉴权、管上下文、管路由,中间这一格接谁,整条链路的手感就跟着变。想让它接一条不用分头维护各家地址的通道,TaoToken 是不少开发者会选的做法:打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建 Key,把模型 Base URL 填成 https://taotoken.net/api,Pi Agent 的推理请求就收敛到同一个出口。这次改动只落在 LLM 层,Gateway 的路由表、Channel 的消息格式、远端节点那批 WebSocket 长连接,一行都不用碰。
原文把 OpenClaw 从 Channel 一路拆到 Studio,拆到 LLM 那一格时只留下一句「本地 Qwen 或云端 Claude」,云端那半边的 Key 从哪来、地址填什么,没往下写。这篇补的就是这一层:一条能复制的接入路径,加一套跑通之后能自己核对的检查方法。整个过程不需要重读一遍源码,只要认准三个字段——base_url、api_key、model。
1. 6+1 架构里,为什么只动 LLM 层就够
1.1 Channel、Gateway、Pi Agent 各自守着的边界
Channel 是耳朵和嘴。它寄生在微信、Telegram、钉钉这类 IM 里,把收到的消息统一转成内部 JSON,再交给 Gateway。Gateway 是心脏,维护与远端节点的 WebSocket 长连接,管着结构化记忆——临时对话落 SQLite,检索知识进 Vector DB,用户上传的文档进文件柜——再决定一条指令是分发出去还是留在本机执行。Pi Agent 是大脑的业务层,按 ReAct 模式把记忆、请求和 Prompt 拼成一次调用,递给 LLM。
这三层的接口是稳定的。LLM 那一格只负责逻辑推演,换成谁,上面三层看到的都是一次普通的推理返回,不需要知道后面连的是哪家。所以接入配置的改动面,天然就被限制在这一格里面。
1.2 分头维护厂商地址,问题会先在 Pi Agent 上露头
本地 Qwen 和云端模型同时开着的时候,麻烦不在模型本身,在地址和凭据。本地要一个 endpoint,云端要一个 endpoint;今天换模型,明天调参数,配置文件里就长出第二套、第三套字段。Pi Agent 每加一条推理路径,Gateway 的配置就要跟着动一次。
把 Base URL 统一到 https://taotoken.net/api 之后,OpenClaw 侧只剩一组凭据。换模型时改的是模型 ID 那个字段,不是地址。Gateway 的路由逻辑照旧跑,变的是它下游那个 LLM 客户端指向的出口。这就像给一栋楼改总进线:各层的配电箱不用重拉,只是电从哪来变了。
1.3 这次不碰的三个敏感区
原文提到 Pi Agent 内部的 Factory 机制,会根据工具命中频率自动提权;也提到 Gateway 和 Local Node 目前跑在同一个 Node.js 进程里,社区的方向是引入 Sidecar 把执行挪进独立容器。这两块都属于推理链路之外的治理和执行域,跟本次接入没有关系。
另外,远端节点上跑的个性化 Skill、本地节点上的通用 Skill,靠的是 Gateway 的 Skill 路由表,不是模型地址。凡是涉及「谁去执行」的逻辑,这轮配置都不需要重新审视。
2. 动手前先把 Key 和两个地址分清楚
2.1 在控制台建一把 YOUR_API_KEY
先打开 TaoToken,注册登录之后进控制台,创建一把 API Key。复制出来丢进密码管理器,别直接粘在聊天记录里。本文所有示例中它都写成 YOUR_API_KEY,这个占位符的作用是提醒你:真 Key 不要提交进 Git,也不要写进会同步到公共仓库的 dotfile。
如果你同时要给 Codex、Claude Code 之类的工具用同一把 Key,也建议在这里统一创建、统一管理,后面轮换的时候只改一处,不会漏掉某个角落里的旧配置。
2.2 落地页管注册,接口地址管推理
这里有两个地址,很容易混:
| 用途 | 地址 | 说明 |
|---|---|---|
| 注册、建 Key、看模型广场、查用量 | https://taotoken.net/?utm_source=taotoken_aicg_blog_end | 给人点的,浏览器打开 |
| 填进 OpenClaw 的 Base URL | https://taotoken.net/api | 给程序调的,末尾不带 /v1 |
常见错误是把第一个地址填进 base_url 字段,结果 Pi Agent 拿回来的是一段 HTML,然后在解析阶段报一个跟网络毫无关系的错。记住一句:浏览器里点的是落地页,配置文件里写的是 https://taotoken.net/api。
3. OpenClaw 模型配置里,base_url 那一行怎么改
3.1 环境变量写法:三个键就够
如果你的 OpenClaw 是用环境变量注入模型参数的,改的就是下面这三个值。键名以你本地版本自带的示例为准,核心是让 base_url 指向统一入口,而不是沿用某个厂商的官方域名。
# OpenClaw 启动前注入,或写进 .env 再 source OPENCLAW_LLM_BASE_URL=https://taotoken.net/api OPENCLAW_LLM_API_KEY=YOUR_API_KEY OPENCLAW_LLM_MODEL=YOUR_MODEL_ID改完之后确认一件事:Gateway 进程启动时能读到这三行。systemd、pm2、docker compose 各有各的注入方式,只要别出现「配置文件改了但进程读到的是旧环境变量」这种情况就行。
3.2 配置文件写法:字段名对照本地版本
如果你用的是配置文件而不是环境变量,结构大致是模型层下面挂一组连接参数。下面这段是字段示意,键名请对照你本地 OpenClaw 版本的示例配置,别原样照抄一个不属于你那个版本的 schema。
{ "llm": { "provider": "openai-compatible", "base_url": "https://taotoken.net/api", "api_key": "YOUR_API_KEY", "model": "YOUR_MODEL_ID" } }值得强调的是 base_url 的写法:到 /api 为止。多一个 /v1,或者反过来少写一段路径,都会让请求落到不存在的端点上。Provider 字段选兼容 OpenAI 协议的那一类即可,OpenClaw 对这类协议的支持是最通用的。
3.3 模型 ID 从模型广场取,不要凭记忆写
YOUR_MODEL_ID 这个位置该填什么,以 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 模型广场当时列出的 ID 为准。不要凭印象拼一个带日期后缀的名字,也不要拿别处抄来的字符串直接填进去——模型名对不上时,服务端返回的通常是一句语焉不详的报错,排查起来比网络问题还费时间。
建议的做法是:先在模型对话页面上用同一把 Key 发一条测试消息,确认这个模型 ID 确实可用,再把它写进 OpenClaw 的配置。这样能提前把「Key 的问题」和「模型名的问题」分开,省掉一轮来回试。
4. Gateway 路由照旧:这些部分确认不动
4.1 Channel 与结构化记忆
Channel 层的职责是把 IM 消息转成内部 JSON,这件事跟模型走哪条通道无关。记忆的存放位置也不变:临时对话还在 SQLite,检索知识还在 Vector DB,文档还在文件柜。Gateway 判断一条指令该本地执行还是转发远端,靠的是 Skill 路由表,不是模型端点。
配置改完之后,你可以随手发一条普通对话验证一下:如果 Channel 收到了回复,说明 JSON 转换、Gateway 鉴权、Pi Agent 组装、LLM 推理、回推消息这一整条链路是通的。
4.2 Skill 路由表与远端节点
远端节点那批 WebSocket 长连接同样不受影响。手机上发一句「帮我截一张办公室那台机器的屏幕」,走的还是 Gateway 查路由表、下发指令、远端执行、图片回传这一套。中间唯一变化的是:Pi Agent 判断该调用 screenshot 工具的那次推理,请求发往了统一入口。
注意这个边界:OpenClaw 能执行的是它自己那套 Skill 体系里的动作,模型地址改的是推理环节,不会让任何工具突然获得新权限。
4.3 Studio 里对一次请求链路
Studio 是治理和可观测那一层,平时看的是 Agent 状态、日志流、文件变动和函数耗时。改完配置之后,这里是第一个能看出差异的地方:如果 LLM 调用开始报错,日志里会先出现连接层的异常,而不是工具执行层的异常。
反过来也成立:如果 Studio 里显示工具调用正常、只是模型回复慢,那说明配置是通的,问题在别处,不要急着回去改 base_url。
5. Pi Agent 不通的时候,按这四类报错排
5.1 401 与 403:Key 没生效
这一类最常见的原因是 Key 没被进程读到。检查顺序是:配置文件或 .env 里是否确实写了 YOUR_API_KEY 对应的真值、启动用户是否有权限读这个文件、容器场景下环境变量是否透传进去。还有一种情况是 Key 建好之后被删除或轮换过,本地还留着旧值。
5.2 404:地址尾部多写了 /v1,或者填成了落地页
如果响应是 404 或路径不存在的提示,先看 base_url 那一行。正确写法是 https://taotoken.net/api,末尾不带 /v1;同时确认没有把浏览器用的落地页地址填进去。这两种错误的表现很像,但日志里请求路径会暴露答案。
5.3 模型名不匹配:用的是列表里没有的 ID
模型 ID 拼错、或者用了别处抄来但当前不可用的名称,会表现为请求被拒。回去对照模型广场的当前列表,改用同一把 Key 在模型对话里先验证一次。
5.4 改完没重启:旧进程还握着老地址
配置改完不重启,Gateway 里的 LLM 客户端还会用启动时读到的旧值。这是最容易被忽略的一类,尤其是在用守护进程管理工具的情况下。重启之后,再去 Studio 看新的请求记录。
6. 跑通之后,去控制台对一下这次调用
配置生效、Pi Agent 能正常回话之后,回 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=openclaw_usage 看一眼用量,确认这次 OpenClaw 的调用确实记在了你这把 Key 下面。如果能对上,说明鉴权和路由都是通的,接下来就可以放心让它跑自动化任务了。
想先手动试几个模型,可以直接开 模型对话,用同一把 Key 发消息;如果 OpenClaw 要长期挂着跑,去 Coding Plan 看看额度档位是否合适;Key 的轮换和新建都在 控制台 API Keys 里完成。配好之后别急着加新工具,先让它在原有 Skill 上稳定跑两天,再考虑扩场景。