
🚩 2026 年「术哥无界」系列实战文档 X 篇原创计划 第 62 篇,OpenClaw 最佳实战「2026」系列第 32 篇 大家好,欢迎来到 术哥无界 | ShugeX | 运维有术。 我是术哥,一名专注于 AI 编程、AI 智能体、Agent Skills、MCP、云原生、AIOps、Milvus 向量数据库的技术实践者与开源布道者!
Talk is cheap, let's explore。无界探索,有术而行。

图 1:OpenClaw 双层容错机制全景
用 AI 编程工具的人,基本都遇到过这种情况:正写到关键代码,突然报 429 Too Many Requests:配额用完了。
这时候你有几个选择:手动换成另一个 API Key;或者切到别的服务商;再或者,干脆等着。
但 OpenClaw 不一样。它把这些操作全自动化了。
OpenClaw 用了两层容错机制:第一层在同一服务商内切换账户,第二层跨服务商切换模型。整个过程不需要人工介入,你的工作流不会被打断。
这篇文章就来拆解这套机制是怎么设计的。
AI 服务不稳定这件事,用过的人都知道。
不是服务商的技术不行,是客观因素太多:API 配额用尽、服务器维护、突发的流量高峰、还有各种奇怪的 OAuth token 过期问题。
传统做法是手动处理:配额用完了换个 Key,服务商挂了切到备用的。但这有几个问题:
第一,反应慢。等你发现问题,可能已经过去了十几分钟。
第二,信息不对称。你不知道哪个账户还有配额,哪个账户在冷却期,只能挨个试。
第三,会话状态丢失。切换服务商意味着重新开始对话,之前的上下文可能要重新解释一遍。
OpenClaw 的思路是:把这些问题下沉到框架层面解决。用户只管用,故障处理交给系统。

图 2:OpenClaw Provider 插件架构
先说说 Provider 是什么。
OpenClaw 用 provider/model 格式引用模型,比如 anthropic/claude-opus-4-6、openai/gpt-5.4。这个格式不只是命名约定,背后是一套插件化架构。
Provider 插件不是简单的 API 封装,它可以深度介入整个调用流程:
认证层:控制用户怎么登录,包括交互式 OAuth 流程和非交互式 token 刷新。
目录层:维护可用模型列表,支持动态发现新模型。
运行时层:在请求发出前拦截,添加自定义参数、请求头,甚至改写请求体。
缓存层:决定哪些模型支持 prompt cache,以及缓存的有效期。
这套设计让 OpenClaw 能快速适配新服务商。官方文档列出的钩子函数有十几个,从 formatApiKey 到 wrapStreamFn,基本覆盖了 API 调用的全生命周期。
OpenClaw 开箱支持 12+ 个 Provider:
Provider | 认证方式 | 特点 |
|---|---|---|
openai | API Key | WebSocket 预热、优先处理 |
anthropic | API Key / setup-token | Claude 系列模型 |
API Key / OAuth | Gemini 系列 | |
opencode | API Key | Zen runtime / Go runtime |
openrouter | API Key | 多模型聚合网关 |
ollama | 无需认证 | 本地模型服务 |
vllm | 自定义 | 自托管推理引擎 |
sglang | 自定义 | 高性能自托管 |
如果你的服务商不在列表里,可以通过配置文件自定义。比如本地跑了一个 LM Studio:
{
models: {
providers: {
lmstudio: {
baseUrl: "http://localhost:1234/v1",
apiKey: "LMSTUDIO_KEY",
api: "openai-completions",
models: [
{
id: "minimax-m2.5-gs32",
name: "MiniMax M2.5",
contextWindow: 200000,
maxTokens: 8192,
},
],
},
},
},
}
关键是 api: "openai-completions" 这个字段,OpenClaw 会按 OpenAI 兼容协议来调用。

图 3:API Key 轮换的 4 级优先级
如果你有多个 API Key,OpenClaw 会自动帮你轮换。
OpenClaw 按这个顺序找可用的 Key:
优先级 1: OPENCLAW_LIVE_<PROVIDER>_KEY (实时覆盖,最高优先)
优先级 2: <PROVIDER>_API_KEYS (逗号/分号分隔列表)
优先级 3: <PROVIDER>_API_KEY (主密钥)
优先级 4: <PROVIDER>_API_KEY_* (编号列表,如 _1, _2, _3)
举个例子,OpenAI 的配置:
# 多 Key 配置
export OPENAI_API_KEYS="sk-xxx,sk-yyy,sk-zzz"
# 或者用编号形式
export OPENAI_API_KEY_1="sk-xxx"
export OPENAI_API_KEY_2="sk-yyy"
export OPENAI_API_KEY_3="sk-zzz"
这里有个关键点:不是所有错误都触发轮换。
只有速率限制相关的错误才会:
rate_limit、quota、resource exhausted其他错误(比如模型参数错误、内容审核拦截)会直接失败,不会浪费其他 Key 的配额。
这个设计挺合理的。如果你的请求本身就是错的,换 100 个 Key 也没用。

图 4:双层容错的完整流程(Profile 轮换 + Model Fallback)
API Key 轮换只是第一层。OpenClaw 的完整容错是分两个阶段的:
请求失败
↓
阶段 1: Auth Profile 轮换(同一 Provider 内切换认证配置)
↓ 所有 Profile 都失败
阶段 2: Model Fallback(切换到 fallbacks 中的下一个模型)
Profile 是认证配置的单位。API Key 类型的 Profile 存的是密钥,OAuth 类型的存的是 access token、refresh token 和过期时间。
存储位置在 ~/.openclaw/agents/<agentId>/agent/auth-profiles.json。
Profile ID 的格式:
provider:defaultprovider:email,如 google:user@gmail.com当 Provider 有多个 Profile 时,选择顺序是这样的:
1. 显式配置: auth.order[provider]
2. 配置的 Profile: auth.profiles 中声明的
3. 存储的 Profile: auth-profiles.json 中的条目
轮换规则(Round-Robin):
这是 OpenClaw 设计的一个亮点。
每个会话固定使用一个 Auth Profile,不会每次请求都轮换。为什么?因为服务商通常有缓存机制,用同一个账户连续请求,缓存命中率更高,延迟更低。
固定 Profile 在这些情况下才会重置:
/new 或 /reset用户也可以手动指定 Profile:/model opencode/claude-opus-4-6@openai:work@company.com。
Profile 失败后会进入冷却期,不会立刻重试。
指数退避策略:
第 1 次失败: 冷却 1 分钟
第 2 次失败: 冷却 5 分钟
第 3 次失败: 冷却 25 分钟
第 4 次失败: 冷却 1 小时(上限)
触发冷却的错误类型:
如果错误是计费相关的,比如 "insufficient credits"、"credit balance too low",处理方式不一样。
这不是瞬时问题,短时间内重试也没用。所以 OpenClaw 用更长的退避周期:
起始: 5 小时
每次失败: 翻倍
上限: 24 小时
重置: 24 小时内无失败,退避计数器归零
状态存在 auth-profiles.json 里:
{
"usageStats": {
"provider:profile": {
"disabledUntil": 1736178000000,
"disabledReason": "billing"
}
}
}
当 Provider 的所有 Profile 都失败后,进入第二阶段:Model Fallback。
配置示例:
{
agents: {
defaults: {
model: {
primary: "anthropic/claude-opus-4-6",
fallbacks: [
"openai/gpt-5.4",
"google/gemini-3.1-pro-preview"
]
}
}
}
}
触发 Fallback 的错误:
其他错误不会触发 Fallback,会直接失败。这个逻辑和 API Key 轮换一致——不是所有错误都值得重试。
场景:企业有多个 OpenAI 账户,想最大化并发能力和配额。
# .bashrc 或 .zshrc
export OPENAI_API_KEY_1="sk-proj-xxx"
export OPENAI_API_KEY_2="sk-proj-yyy"
export OPENAI_API_KEY_3="sk-proj-zzz"
效果:一个账户配额用尽,自动切到下一个。用户无感知。
场景:Anthropic 宕机,想自动切到 OpenAI。
{
agents: {
defaults: {
model: {
primary: "anthropic/claude-opus-4-6",
fallbacks: [
"openai/gpt-5.4",
"google/gemini-3.1-pro"
]
}
}
}
}
效果:Anthropic 全挂,自动切到 OpenAI,再挂切到 Google。
场景:企业账户用 OAuth,个人账户用 API Key,OAuth 优先。
{
auth: {
order: {
"openai": [
"openai:user@company.com", // 企业 OAuth
"openai:default" // 个人 API Key
]
}
}
}
效果:优先用企业账户,企业账户配额用尽或进入冷却期,自动回退到个人账户。
{
// 认证配置
auth: {
// 轮换顺序
order: {
"openai": ["openai:work@company.com", "openai:default"],
"anthropic": ["anthropic:default"]
},
// 冷却参数
cooldowns: {
billingBackoffHours: 5, // 计费失败起始退避
billingMaxHours: 24, // 计费失败退避上限
failureWindowHours: 24 // 退避重置窗口
}
},
// 模型配置
agents: {
defaults: {
model: {
primary: "anthropic/claude-opus-4-6",
fallbacks: [
"openai/gpt-5.4",
"google/gemini-3.1-pro"
]
}
}
},
// 自定义 Provider
models: {
providers: {
ollama: {
baseUrl: "http://localhost:11434/v1",
api: "openai-completions",
models: [
{
id: "llama3.3",
name: "Llama 3.3",
contextWindow: 128000,
}
]
}
}
}
}
# 查看可用模型
openclaw models list
# 设置默认模型
openclaw models set anthropic/claude-opus-4-6
# OAuth 登录
openclaw models auth login --provider google-gemini-cli --set-default
# 切换 Profile
openclaw models set openai/gpt-5.4@openai:work@company.com
OpenClaw 的 Failover 机制,核心思想是把容错做成开箱即用的能力。
双层设计的好处:
会话粘性保证缓存效率,冷却机制避免无效重试,计费禁用处理长期问题。这些细节组合起来,才是真正可用的高可用方案。
适合谁用:
不适合谁:
如果你正在用 OpenClaw,建议把 fallbacks 配上。不用白不用,出了问题能救命。
相关资源
官方文档 - Model Providers:https://docs.openclaw.ai/concepts/model-providers
官方文档 - Model Failover:https://docs.openclaw.ai/concepts/model-failover
好啦,谢谢你观看我的文章,如果喜欢可以点赞转发给需要的朋友,我们下一期再见!敬请期待!