1. OpenClaw Gateway 接入 QQ 的真实场景与统一 Key 需求
OpenClaw 是一个开源、本地优先、模型无关的 AI 智能体执行网关,你可以把它理解成一个「消息调度中枢」:QQ、飞书、网页端发来的消息先进入 Gateway,由它决定调用哪个模型、执行哪些本地技能,再把结果原路返回。它本身不绑定任何一家模型厂商,模型调用走的是 OpenAI 兼容协议,这就给「统一 Key 管理」留出了空间。
我这次要解决的场景很具体:在一台 Linux 云服务器上跑 OpenClaw Gateway,把 QQ 机器人接进来,同时让所有模型调用都走 TaoToken 的统一 Key。为什么不用官方直连?因为 OpenClaw 里会配置多个模型(对话、生图、搜索摘要),如果每个都单独申请 Key、单独记额度,维护成本很高;而统一 Key 的好处是——一个 Base URL、一个 Key、一个 Model ID 列表,切换模型只改一个字段,排查问题时也只需要看一处日志。
适合谁跟做:已经装好 Node.js 22+、能在终端里跑命令、想让 QQ 机器人具备多模型能力的开发者。如果你还没装 OpenClaw,本文的配置片段同样适用于任何 OpenAI 兼容客户端,因为核心就是 Base URL + Key + Model ID 三件套。
先说清楚链路:QQ 开放平台把用户消息推送到你配置的回调地址,OpenClaw Gateway 收到后按openclaw.json里的模型配置发起请求,请求打到 TaoToken 的 API 端点,模型返回内容再由 Gateway 回传给 QQ。整条链路里,唯一需要你手动维护的凭证就是 TaoToken 的 Key。
我实测下来,最容易卡住的不是模型调用,而是 QQ 插件加载和 Gateway 重启这两步。下面按「前置准备 → 配置片段 → 验证 → 排障」的顺序展开,每一步都给可复制的命令和参数。
2. TaoToken 统一 Key 前置准备与 OpenClaw 环境确认
在动 OpenClaw 配置之前,先把两件事做完:拿到 TaoToken 的 Key,确认 OpenClaw 的版本和插件目录。
2.1 获取 TaoToken API Key
访问 TaoToken 控制台创建 API Key,路径是 console 页面下的 api-keys 管理。创建后你会得到一串以sk-开头的密钥,这就是后面所有模型调用的唯一凭证。注意两点:一是 Key 只在创建时完整显示一次,复制后妥善保存;二是不同模型共用同一个 Key,不需要为每个模型单独申请。
TaoToken 的 API 端点是https://taotoken.net/api,这是 OpenAI 兼容协议的入口,OpenClaw 里填 Base URL 时用这个地址(注意不要带任何查询参数)。模型对话功能可以在模型对话页面直接验证 Key 是否可用,接入文档在 doc 页面有完整的参数说明。
2.2 确认 OpenClaw 与 Node.js 版本
OpenClaw 要求 Node.js 22 及以上。先确认版本:
node -v # 期望输出 v22.x.x 或更高如果版本不够,用 nvm 切换:
nvm install 22 nvm use 22 nvm alias default 22然后确认 OpenClaw 已安装并能识别 Gateway:
openclaw --version openclaw gateway statusgateway status会告诉你网关是否在运行。如果显示未启动,用openclaw gateway start拉起。这里有个细节:OpenClaw 的配置文件默认在~/.openclaw/openclaw.json,插件目录在~/.openclaw/plugins,后面改配置和装 QQ 插件都围绕这两个路径。
2.3 确认 QQ 机器人插件依赖
QQ 接入依赖腾讯官方的@tencent-connect/openclaw-qqbot插件。先看全局 npm 目录里有没有:
npm list -g @tencent-connect/openclaw-qqbot如果没有输出或报错,说明没装,后面第 3 节会给安装命令。这里先记下全局 node_modules 的路径,因为 OpenClaw 加载本地插件时需要绝对路径:
npm root -g # 例如输出 /www/server/nvm/versions/node/v22.22.2/lib/node_modules把这个路径记下来,插件安装后完整路径就是<npm root -g>/@tencent-connect/openclaw-qqbot。
2.4 为什么用统一 Key 而不是多 Key
OpenClaw 的模型配置支持多个 provider,每个 provider 有自己的 baseUrl 和 apiKey。如果对话用一家、生图用另一家,配置里就会出现多组凭证。统一 Key 的做法是:所有 provider 的 baseUrl 都指向https://taotoken.net/api,apiKey 都填同一个 TaoToken Key,只是 model 字段不同。这样切换模型时只改 model,不动凭证;额度、限流、日志也集中在一处看。
对于长期跑 Agent 任务的场景,建议配合 Coding Plan 使用,因为 Agent 会频繁发起多轮请求,统一计费比分散申请更可控。如果你只是想先验证模型能不能通,用模型对话页面手动发一条消息最快。
3. 可复制的 OpenClaw Gateway 与 QQ 回调配置片段
这一节是全文的核心,所有片段都可以直接复制。配置分三块:OpenClaw 的模型配置、QQ 插件安装、QQ 开放平台侧的回调参数。
3.1 openclaw.json 模型配置片段
打开~/.openclaw/openclaw.json,找到models或providers字段(不同版本字段名略有差异,以你本地文件为准)。把模型 provider 改成下面这样:
{ "providers": { "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "models": [ { "id": "claude-sonnet-4-5", "name": "Claude Sonnet 4.5", "contextWindow": 200000 }, { "id": "gpt-4o-mini", "name": "GPT-4o mini", "contextWindow": 128000 } ] } }, "defaultModel": "claude-sonnet-4-5" }三个关键字段对照:
| 字段 | 值 | 说明 |
|---|---|---|
| baseUrl | https://taotoken.net/api | OpenAI 兼容入口,不带查询参数 |
| apiKey | sk-开头 | TaoToken 控制台创建的统一 Key |
| model id | 如 claude-sonnet-4-5 | 按需替换,需与平台支持的模型 ID 一致 |
注意baseUrl结尾不要加/v1,OpenClaw 会自己拼接路径;如果你本地版本要求带/v1,以openclaw gateway status的报错为准调整。改完配置后必须重启网关:
openclaw gateway restart3.2 安装并加载 QQ 机器人插件
先装插件,如果npm install报网络或权限错误,加-g全局安装:
npm install -g @tencent-connect/openclaw-qqbot装完后用绝对路径加载到 OpenClaw:
openclaw plugins install /www/server/nvm/versions/node/v22.22.2/lib/node_modules/@tencent-connect/openclaw-qqbot把路径替换成你npm root -g的实际输出。加载后确认:
openclaw plugins list列表里出现openclaw-qqbot就说明插件已识别。如果没出现,检查路径是否指向插件根目录(含package.json的那一层)。
3.3 QQ 开放平台回调参数
进入 QQ 开放平台机器人列表,扫码后创建机器人。创建完成后,平台会给你三个关键参数:AppID、AppSecret、Token。这三个值要填进 OpenClaw 的 QQ 插件配置里,通常插件会引导你依次输入,或者写入~/.openclaw/plugins/openclaw-qqbot/config.json:
{ "appId": "你的AppID", "appSecret": "你的AppSecret", "token": "你的Token", "sandbox": false }回调地址(Webhook)填你服务器的公网地址加插件默认路径,例如https://你的域名/qqbot/callback。如果 Gateway 前面有反向代理,确保代理把该路径转发到 OpenClaw 监听的端口。QQ 侧要求回调地址可公网访问且支持 HTTPS,本地开发可以用内网穿透工具临时映射,但生产环境建议直接部署在有证书的服务器上。
3.4 三件套一致性检查
配置完成后,确认三件套在 OpenClaw 和 QQ 插件里是一致的:
- Base URL:
https://taotoken.net/api(模型调用) - Key:
sk-开头的 TaoToken Key(模型调用) - Model ID:
claude-sonnet-4-5或你选定的模型(模型调用)
QQ 侧的 AppID/AppSecret/Token 是另一套凭证,只用于 QQ 平台鉴权,不要和 TaoToken Key 混用。两套凭证各管一段链路,排查时要分清是哪一段出的问题。
4. 验证一条消息从 QQ 到模型再返回
配置写完不算完,必须跑通一条完整消息。验证分两步:先在 Gateway 本地验证模型调用,再从 QQ 侧发真实消息。
4.1 本地验证模型调用
在终端里直接用 OpenClaw 的 TUI 发一条消息,绕过 QQ 插件,先确认模型链路通:
openclaw chat "用一句话介绍你自己"如果返回了模型输出,说明 Base URL、Key、Model ID 三件套正确。如果报 401,说明 Key 无效或没生效;如果报 model not found,说明 Model ID 写错了。这一步通过后再测 QQ。
4.2 从 QQ 发消息验证全链路
在 QQ 里给机器人发一条消息,比如「现在几点」或「帮我列一下当前目录」。观察三个地方:
第一,OpenClaw Gateway 日志里应该出现收到 QQ 消息的记录:
openclaw gateway logs --follow第二,日志里紧接着应该有向taotoken.net/api发起请求的记录,包含 model 字段。
第三,QQ 里收到模型返回的回复。
如果日志显示收到 QQ 消息但没有模型请求,说明插件加载了但配置没生效,检查openclaw plugins list和插件 config.json。如果日志显示模型请求发出但报错,看错误码定位是 Key 问题还是模型 ID 问题。
4.3 成功结果的判断标准
一条消息完整跑通的标志是:QQ 发出 → Gateway 日志出现 inbound → 日志出现 outbound 到 taotoken.net/api → QQ 收到回复。四个环节缺一不可。我实测时第一次卡在第三步,日志显示请求发出但返回reading 'choices'错误,后来发现是模型 ID 写成了平台不支持的名称,换成claude-sonnet-4-5后正常。
验证通过后,你可以给机器人设置身份和职责,比如「你是我的运维助手,只回答服务器相关问题」,这些在 OpenClaw 的 agent 配置里改。长期跑任务的话,建议把默认模型设成上下文窗口大的那个,避免多轮对话被截断。
5. 本篇常见错误排查:401、local proxy failed、reading choices
这一节按真实报错对照排查。以下错误都是我或身边朋友实际遇到过的,按出现频率排序。
5.1 401 Unauthorized
现象:本地openclaw chat或 QQ 消息返回 401。
原因通常是三类:Key 复制时带了空格或换行;Key 已过期或被删除;配置改了但没重启 Gateway。
排查步骤:先确认 Key 字符串首尾无空白,再在模型对话页面手动发一条消息验证 Key 本身可用。如果页面能通但 OpenClaw 不通,说明是配置没生效,执行openclaw gateway restart后重试。还有一种情况是 baseUrl 写成了带/v1的地址导致路径重复,改成https://taotoken.net/api即可。
5.2 local proxy failed
现象:Gateway 日志出现local proxy failed或连接被拒绝。
这个错误通常和网络出口有关。先确认服务器能访问taotoken.net:
curl -I https://taotoken.net/api如果 curl 不通,说明服务器网络策略或 DNS 有问题,检查安全组出站规则和/etc/resolv.conf。如果 curl 通但 OpenClaw 报 proxy failed,检查 OpenClaw 配置里有没有残留的 proxy 字段,把它删掉,让请求直连。注意不要在配置里填任何本地代理地址,OpenClaw 直连 API 端点即可。
5.3 reading 'choices' 报错
现象:日志显示Cannot read properties of undefined (reading 'choices')。
这是典型的响应结构不符合预期。原因一般是模型 ID 写错,平台返回了错误对象而不是标准的 choices 数组。排查:确认 model id 与平台支持的名称完全一致,大小写敏感。另一个可能是 baseUrl 指向了非 OpenAI 兼容端点,导致返回格式不对。把 baseUrl 固定为https://taotoken.net/api,model 换成文档里列出的名称。
5.4 OAuth 相关报错
现象:出现 OAuth token 失效或授权失败。
OpenClaw 某些版本会用 OAuth 方式管理部分凭证。如果你混用了 OAuth 和 API Key 两种方式,可能冲突。排查:确认模型 provider 用的是 apiKey 字段而不是 oauth 字段;如果之前配过 OAuth,清掉相关缓存后重启。对于 TaoToken 统一 Key 方案,全程用 apiKey 即可,不需要 OAuth。
5.5 QQ 插件加载失败
现象:openclaw plugins install报路径不存在,或plugins list里没有 qqbot。
先确认npm root -g输出的路径下确实有@tencent-connect/openclaw-qqbot目录,且目录里有package.json。如果 npm 装到了本地而非全局,用-g重装。加载时路径要写到插件根目录,不要写到node_modules上一层。加载成功后必须重启 Gateway 才能生效。
5.6 配置改了不生效
OpenClaw 的配置在 Gateway 启动时读取,改完openclaw.json或插件 config.json 后,必须openclaw gateway restart。如果重启后仍不生效,检查是否有多个配置文件(比如项目目录下还有一份),以openclaw gateway status显示的配置路径为准。
6. 统一 Key 管理多模型的后续用法与接入入口
跑通 QQ 接入后,统一 Key 的价值才真正体现出来。你可以在openclaw.json里配多个模型,全部指向同一个 TaoToken Key,然后按任务类型切换:日常对话用轻量模型,复杂推理用大上下文模型,生图任务单独配一个模型 ID。切换时只改defaultModel字段,不用动凭证。
对于长期跑 Agent 的场景,建议用 Coding Plan 管理额度,因为 Agent 会发起大量多轮请求,统一计费比分散申请更清晰。如果你需要更细的 Key 权限控制,可以在 console 里创建多个 Key 分别用于不同环境,但 Base URL 和 Model ID 的对应关系保持不变。
接入过程中如果遇到本文没覆盖的报错,优先查接入文档,里面有完整的参数说明和错误码对照。验证模型是否可用,直接用模型对话页面发消息最快,不用每次都重启 Gateway。需要新建或轮换 Key 时,去 api-keys 页面操作,轮换后记得同步更新openclaw.json并重启网关。
最后给一个实用技巧:把openclaw gateway logs --follow常驻在一个终端窗口,QQ 侧发消息时实时看日志,能第一时间定位是 QQ 插件、Gateway 还是模型调用出的问题。三段链路分开看,排查效率会高很多。