跳到主要内容
注册

让 OpenClaw 的模型调用走 Router One

OpenClaw(国内常叫「小龙虾」)是开源的自托管 AI 助手:它的 Gateway 守护进程跑在你自己的电脑上,在你常用的聊天应用里回复你,比如 Discord、iMessage、Slack、Teams、Telegram、WhatsApp,也可以在浏览器里的 Control UI 对话。它通过 provider 调用模型,任何 OpenAI 兼容端点都能注册成自定义 provider。这样注册 Router One 之后,OpenClaw 的每一轮模型调用——不管是你发的消息、工具结果返回后的续写,还是定时触发的心跳——都落在一把可以设 maxSpend 上限的 Key 上,每个请求的 tokens、费用和状态都记录在控制台 → 日志。路由方式是按指定模型路由、同模型故障转移:请求由你指定的模型处理;某条线路出现 429、5xx 或超时时,会换到同一模型的另一条线路重试;持续报上游错误的线路会被自动排到最后,恢复后再回到正常顺序。下文讲 onboarding 命令和它现在必须带的 --accept-risk、onboarding 写入了什么、哪种协议对应哪个端点,以及无人值守时的费用从哪里来。按 OpenClaw 2026.9.6 核对(2026-09-27)。

在受支持的 Node.js 上安装 OpenClaw,并建一把有上限的 Key

OpenClaw 2026.9.6 自 2026-09-23 起是 npm latest 标签对应的版本,要求 Node.js 24.16+ 或 26.1+,推荐 Node 26;其他运行时(包括 Node 22 和 Node 25)都会被它提示为不受支持。官方安装脚本会自带受支持的 Node:macOS、Linux 和 WSL2 用 curl -fsSL https://openclaw.ai/install.sh | bash,Windows PowerShell 用 iwr -useb https://openclaw.ai/install.ps1 | iex。全新安装时,脚本结束后会打开交互式 onboarding 向导,里面同样可以选择自定义 provider,效果与下面的命令一致。如果 Node 由你自己管理,就用 npm 安装:OpenClaw 的 README 要求 npm 12 或 npm 11.16+ 加上 --allow-scripts=openclaw,npm 11.15 及更早版本不加。extended-stable 通道(2026.7.35)接受 Node 22.22.3+、24.15+ 或 25.9+,onboarding 参数的要求相同。然后为这台机器单独创建一把 Router One Key,并设置 maxSpend。OpenClaw 会在没人发消息时自己行动,Key 触到上限后,下一个请求会收到 HTTP 402,不会继续花钱,你的其他 Key 照常可用。Key 用量达到 maxSpend 的 80% 及触顶时,控制台还会发送站内通知。

terminal
# macOS / Linux / WSL2: the official installer provisions Node, then opens the onboarding wizard
curl -fsSL https://openclaw.ai/install.sh | bash
# Or, on Node 24.16+ / 26.1+ with npm 12 or npm 11.16+ (drop the flag on npm 11.15 or earlier):
npm install -g openclaw@latest --allow-scripts=openclaw
openclaw --version

把 OpenClaw 配置到 Router One base URL

先把 Key 导出为 CUSTOM_API_KEY,再运行下面的命令。--non-interactive 必须同时带 --accept-risk:缺了它,onboarding 会在写入任何配置之前报 Non-interactive setup requires explicit risk acknowledgement 并退出,因为这个参数表示你已知悉 OpenClaw 的安全提示——拥有完整系统权限的 agent 存在风险。--auth-choice custom-api-key 选择自定义 provider,省略 --custom-api-key 时从 CUSTOM_API_KEY 读取 Key。--custom-base-url 填 OpenAI 兼容的 base URL,恰好一个 /v1。--custom-model-id 填目录里的精确 ID;OpenClaw 在第一个斜杠处切分模型引用,所以带厂商前缀的 openai/gpt-5.6-sol 会变成 router-one/openai/gpt-5.6-sol,照样能解析。--custom-provider-id 把 provider 名固定为 router-one;不写的话,OpenClaw 会按主机名生成一个,比如 custom-api-router-one。--custom-compatibility openai 选择 OpenAI Chat Completions,每一轮都是发往 /v1/chat/completions 的 POST,这个端点服务目录里的全部对话模型。--install-daemon 把 Gateway 安装成后台服务(launchd、systemd,Windows 上是计划任务)。保存之前,onboarding 会用一个很小的请求检查模型:消息内容是 Hi,输出上限 16 个 token。它会到达 Router One,所以控制台 → 日志里出现这条记录,就说明 Key、地址和模型 ID 都没问题。在 PowerShell 里,改用 $env:CUSTOM_API_KEY 设置 Key,并把每行末尾的反斜杠换成反引号:

openclaw-onboard.sh
export CUSTOM_API_KEY=sk-your-router-one-key

openclaw onboard --non-interactive --accept-risk \
  --auth-choice custom-api-key \
  --custom-base-url https://api.router.one/v1 \
  --custom-model-id openai/gpt-5.6-sol \
  --custom-provider-id router-one \
  --custom-compatibility openai \
  --install-daemon

onboarding 往 ~/.openclaw/openclaw.json 里写了什么

onboarding 把 provider 存在 models.providers.router-one 下,并把它的模型设为默认,models.mode 保持 merge,OpenClaw 内置的 provider 仍然可用。从 OpenClaw 2026.9.4 起,自定义 provider 必须显式列出模型;用相同的 provider ID 和 base URL、换一个 --custom-model-id 再跑一次 onboarding,会把新模型追加进列表并设为主模型。它写入的值里有三项只是占位,需要手动改,因为 OpenClaw 没法从 Router One 读到:上下文窗口、输出上限和价格。OpenClaw 会自动把常见的视觉模型 ID 标记为支持图片输入;如果模型详情页列出了图片输入,而 OpenClaw 对这个 ID 没有这样标记,就加上 --custom-image-input。

onboarding 往 ~/.openclaw/openclaw.json 里写了什么
openclaw.json 中的键onboarding 写入的值接 Router One 时怎么改
models.providers.router-one.baseUrl 和 apihttps://api.router.one/v1 和 openai-completions两项都保留;api 跟随 --custom-compatibility(见下一节)
models.providers.router-one.apiKey明文 Key;用 --secret-input-mode ref 时是 { source: "env", id: "CUSTOM_API_KEY" }ref 模式下把 CUSTOM_API_KEY 写进 ~/.openclaw/.env:后台服务不会读取 ~/.zshrc 或 ~/.bashrc
models.providers.router-one.models[].idopenai/gpt-5.6-sol目录里的精确 ID;每个要用的模型一条
models[].contextWindow128000填模型详情页上的上下文窗口(整数),例如 openai/gpt-5.6-sol 填 1050000,anthropic/claude-sonnet-5 填 1048576;OpenClaw 按它安排历史长度和上下文压缩
models[].maxTokens4096OpenClaw 每一轮请求的输出上限,按你的用途自己定,不要照搬目录里的数字。OpenClaw 默认把它作为 max_completion_tokens 发送,而 Router One 的 Chat Completions 参考文档写的输出上限字段是 max_tokens,所以如果你依赖这个上限,再在该模型条目上把 compat.maxTokensField 设为 "max_tokens"
models[].costinput、output、cacheRead、cacheWrite 全为 0价格全为 0 时,OpenClaw 的 Usage 页一直显示 $0;实际扣费看控制台 → 日志
agents.defaults.model.primaryrouter-one/openai/gpt-5.6-solprovider/模型 形式的引用;用 openclaw models set 修改

按端点选择 --custom-compatibility:openai、openai-responses 还是 anthropic

这个参数决定 OpenClaw 调用 Router One 的哪个端点,而每个端点服务的目录模型不一样。它按 provider 条目固定,所以要同时用两种协议,就用两个 provider ID 各跑一次 onboarding,比如 router-one 和 router-one-anthropic。用同一个 router-one 配一个不同的 base URL 并不会覆盖原条目,OpenClaw 会把新条目存成 router-one-2。选 anthropic 时,OpenClaw 2026.9.6 无论填 https://api.router.one 还是 https://api.router.one/v1 都能访问到 /v1/messages;建议填主机根地址,这也是 Router One 文档给出的 Anthropic 兼容 base URL。走 openai-completions 时,自定义端点被视为非官方端点,OpenClaw 会用 system 角色而不是 developer 角色发送系统提示词。onboarding 的检查请求也随协议变化:Chat Completions 上是 Hi 加 max_tokens 16,Responses 上是 input 为 Hi、max_output_tokens 16,Messages 上是 max_tokens 1。

按端点选择 --custom-compatibility:openai、openai-responses 还是 anthropic
--custom-compatibilityopenclaw.json 中的 api · base URLRouter One 端点能服务的目录模型
openai(默认)openai-completions · https://api.router.one/v1POST /v1/chat/completions全部对话模型,例如 anthropic/claude-sonnet-5、openai/gpt-5.6-sol、openai/gpt-6-sol、google/gemini-3.7-flash、deepseek-v4.1-flash、grok-4.7
openai-responsesopenai-responses · https://api.router.one/v1POST /v1/responses只服务 GPT 系列、DeepSeek ID 与 Grok 对话模型;Claude 系列 ID 会在任何模型运行前收到 HTTP 400 model '<id>' must be called via …,onboarding 的检查也会因此失败;Gemini 的 ID 在这里同样不提供
anthropicanthropic-messages · https://api.router.onePOST /v1/messagesClaude 系列模型与 DeepSeek ID,例如 anthropic/claude-sonnet-5、aws/claude-sonnet-5、deepseek-v4.1-flash

无人值守时的费用从哪来:心跳、唤醒与回退

OpenClaw 的设计就是会自己行动,所以控制台 → 日志里可能出现没人输入过的请求。最大的来源是心跳(heartbeat):主会话的定时轮次,默认每 30 分钟一次,会过一遍一份简短的检查清单,必要时给你发消息。定时心跳需要开启自动化(cron.enabled),并且要有可以汇报的主人:commands.ownerAllowFrom 的第一项,或某个渠道的 allowFrom。找不到可用的主人私信路由时,每次轮询都会在模型运行前以 reason=no-route 跳过,所以计费的心跳通常从你接入聊天渠道或指定主人之后才开始,而不是 onboarding 一完成就有。控制方法:把 agents.defaults.heartbeat.every 调长,或设为 0m 停掉周期心跳;用 activeHours 限定时间段;设置 isolatedSession: true,让每次心跳不带会话历史,再加 lightContext: true 跳过工作区的引导文件。按心跳文档的估算,独立会话能把每次心跳从约 100K tokens 降到 2–5K。0m 不会停掉事件触发的唤醒:后台命令执行完时,OpenClaw 可能再跑一轮来汇报结果,除非把 tools.exec.notifyOnExit 设为 false。另外还有两个来源值得知道。OpenClaw 自己的模型回退(fallbacks)可能把失败的一轮转到你配置的其他模型、provider 或 Key 上,这不属于 Router One 的同模型重试,所以回退要有意识地配置。记忆搜索需要一个 embeddings 服务,而 Router One 不提供(没有 /v1/embeddings),所以要么另配一个,要么接受只按关键词检索的结果。

核对第一轮对话,并切换模型

先运行 openclaw gateway status 确认守护进程在运行,再用 openclaw dashboard 打开 Control UI 发一条消息;openclaw models status 会显示实际生效的默认模型和凭据概况。每条消息在控制台 → 日志里至少对应一个请求,记在你创建的那把 Key 名下,带模型、tokens、费用、状态和总耗时;产生过输出的流式回复还会显示首字延迟(TTFT)。工具调用会在同一轮里追加后续请求,所以一轮对话可能对应好几个请求。只在当前对话里换模型,发送 /model router-one/<精确 ID> -s;要改默认模型,运行 openclaw models set router-one/<精确 ID>。由于自定义 provider 需要显式的模型列表,先把这个 ID 加进 models.providers.router-one.models,或者用它重新跑一次 onboarding。优先选模型详情页列出了工具调用的 ID,因为 OpenClaw 的工具依赖它;其他 ID 先测试一次工具调用。

OpenClaw 该填哪个模型 ID?

从 /models 页复制精确的模型 ID,保留大小写、连字符和版本后缀,不要用展示名称代替。打开该模型的详情页,核对支持的 API 端点、上下文窗口和工具调用等能力,再与 OpenClaw 当前选择的 provider 和功能对应。模型出现在目录里,不等于当前客户端能调用它的所有功能。建议为每个客户端或应用单独建 API Key,并设置 maxSpend 消费上限。

OpenClaw 用的是哪种 API 协议?

OpenAI 兼容描述的是接口格式,不能据此推断 Chat Completions(/v1/chat/completions)、Responses(/v1/responses)和 Anthropic Messages(/v1/messages)可以互换。先核对工具当前版本、provider 配置和实际请求路径,再查模型详情与 API 兼容性事实页。一次普通对话成功,也不能证明服务端工具、历史状态或文件编辑功能都受支持。

在请求日志里核对 OpenClaw 的调用

先在 OpenClaw 发出一次简单文本请求,再到控制台 → 日志按时间、模型和 request_id 找到这条记录,核对 Token、花费、总耗时和状态码。成功后再分别验证流式输出、工具调用和多轮历史。失败时保留实际请求路径、完整错误消息及 request_id;没有对应日志时,先查客户端配置和网络,不能仅凭客户端报错认定是网关或上游故障。

常见问题

openclaw onboard 报 Non-interactive setup requires explicit risk acknowledgement,是哪里变了?

--non-interactive 现在必须配合 --accept-risk,两个当前的发布通道都这样要求:npm latest 标签(2026.9.6)和 extended-stable(2026.7.35)。这个参数表示你已知悉 OpenClaw 的安全提示:拥有完整系统权限的 agent 存在风险(docs.openclaw.ai/security)。onboarding 在改动任何配置之前就会检查它,所以在原命令里加上 --accept-risk 重跑即可。在这个参数出现之前写的教程(包括本指南的旧版本)都没有它。它不代表批准插件权限:如果安装过程需要外部插件,onboarding 仍会停下来做权限审查,先预装插件再重跑即可。

小龙虾(OpenClaw)怎么接第三方 OpenAI 兼容 API?

用自定义 provider。非交互方式就是上面那条命令:--auth-choice custom-api-key 选自定义 provider,--custom-base-url 填 https://api.router.one/v1,--custom-model-id 填 /models 页上的精确 ID(例如 openai/gpt-5.6-sol),--custom-compatibility openai 表示走 OpenAI Chat Completions,再加 --non-interactive --accept-risk。也可以直接运行 openclaw onboard,在交互式向导里选择自定义 provider,填同样三项。配好后配置写在 ~/.openclaw/openclaw.json 的 models.providers.router-one 下,改模型、改上下文窗口都在那里。Router One 在中国大陆可直连,无需代理。

没人跟 OpenClaw 聊天,为什么 Router One 的花费还在涨?

多半是心跳:OpenClaw 有了主人路由(接入了聊天渠道,或设置了 commands.ownerAllowFrom)之后,默认每 30 分钟跑一轮主会话,每一轮都是一个计费请求,不开 isolatedSession 时还会带上会话历史。在控制台 → 日志里,它们表现为 OpenClaw 那把 Key 名下间隔固定的请求。把 agents.defaults.heartbeat.every 调长或设为 0m,加上 activeHours,或者开启 isolatedSession 和 lightContext,细节见上文。无论哪种情况,Key 上的 maxSpend 上限都会兜住总花费。

OpenClaw 的 Usage 显示 $0,以哪个数字为准?

以控制台 → 日志为准。onboarding 给自定义模型写入的 input、output、cacheRead、cacheWrite 价格都是 0,所以不管用多少,OpenClaw 的 Usage 页都显示 $0。Router One 按模型的当前单价给每个请求计费,并逐请求记录费用。你可以把模型详情页上的单价填进 models[].cost,让 OpenClaw 的估算有意义,但账单要看日志,以及按 Key 排列花费的用量页。

想让 Claude 走 /v1/messages 而不是 Chat Completions,怎么配?

再加一个 provider:--custom-compatibility anthropic,--custom-base-url 填主机根地址 https://api.router.one,换一个新的 --custom-provider-id(比如 router-one-anthropic),模型填 Claude 系列或 DeepSeek 的 ID,比如 anthropic/claude-sonnet-5。OpenClaw 会改用 anthropic-messages 传输,请求发往 /v1/messages;检查请求带的是 x-api-key 请求头,Router One 把它当作与 Bearer 等效。对这种非官方端点,OpenClaw 不会附加它默认的 anthropic-beta 请求头;确实需要某个时,在 models.providers.<id>.headers 里显式设置。GPT、Gemini、Grok 的 ID 继续留在 Chat Completions 那个 provider 上,/v1/messages 不服务它们。

OpenClaw 能通过 Router One 用 Responses API 吗?

可以,限 GPT 系列、DeepSeek ID 与 Grok 对话模型:用 --custom-compatibility openai-responses 和其中一个 ID(例如 openai/gpt-6-sol 或 grok-4.7)注册一个 provider,OpenClaw 的请求就会发往 /v1/responses。在这个 provider 上用 Claude 系列 ID,会在任何模型运行前收到 HTTP 400 must be called via …,Gemini 的 ID 在这里同样不提供,所以两者都留在默认的 openai 兼容方式上。

Key 存在哪里?为什么我 export 了 Key,守护进程却读不到?

默认情况下,onboarding 把 Key 以明文写进 ~/.openclaw/openclaw.json 的 models.providers.router-one.apiKey,后台服务不依赖任何环境变量就能拿到。用了 --secret-input-mode ref 时,写入的是对 CUSTOM_API_KEY 的引用,而由 launchd、systemd 或 Windows 计划任务启动的服务不会继承你在 ~/.zshrc 或 ~/.bashrc 里 export 的变量。把 CUSTOM_API_KEY=sk-… 写进 ~/.openclaw/.env(OpenClaw 文档推荐用它存放 provider Key),再重启 Gateway。工作区文件夹里的 .env 不会被用来读取 provider 凭据。

记忆搜索只能按关键词匹配,是 Router One 的问题吗?

间接相关。OpenClaw 的记忆搜索需要 embeddings 服务,默认用 OpenAI 的;embeddings 配置失败时会退回只按关键词排序。Router One 提供对话、图像和视频端点,但没有 /v1/embeddings,不能充当这个服务。在 memory.search.provider 里另配一个 embeddings 服务;如果关键词检索就够用,也可以把 provider 设为 none。

怎么防止 OpenClaw 花超预算?

给 OpenClaw 单独一把 Router One Key 并设置 maxSpend。Key 触到上限后,下一个请求会收到 HTTP 402,OpenClaw 用这把 Key 的付费调用就停了,你的其他 Key 照常可用;Key 用量达到 maxSpend 的 80% 及触顶时,控制台会发送站内通知。控制台 → 日志可以按这把 Key 筛选,控制台 → 用量按花费给各把 Key 排序,调高上限之前,先看清心跳和对话各花了多少。

OpenClaw 能通过网关用哪些模型?

选用当前目录中同时支持 OpenClaw 所用端点和所需功能的模型。精确 ID、当前单价与能力以 /models 及模型详情为准;不要仅按 GPT、Claude 等系列名判断兼容性。客户端能列出模型,只说明它从自身配置或 GET /v1/models 读到了这个 ID,仍需验证实际调用。

能列出模型,但调用报 400 或 404,怎么办?

先记录实际请求路径和错误消息,再核对精确模型 ID。400 可能是参数、工具类型或模型与端点不匹配;404 可能是请求路径或资源不存在,不能直接判定模型下线。若错误提示 must be called via,按它指明的端点调整客户端 provider,或换用支持当前端点的模型。不要在所有工具里统一增删 /v1 或 /chat/completions。

中国大陆能直连吗?

能。网关在大陆可直连、无需 VPN,配置与全球环境完全一致。

报 401/402/403/429 怎么排查?

先到控制台 → 日志核对这条请求及错误消息。401 查 Key 是否传入和有效;402 查钱包余额与 maxSpend;403 查 Key 权限和访问限制;429 查请求频率、token 限额及上游限流,按错误来源处理。保留 request_id,再按错误码速查页逐项排查。