模型故障转移(Model failover)
OpenClaw 分两个阶段处理故障:
- 当前提供商内的认证配置文件轮换(Auth profile rotation)。
- **模型故障转移(Model fallback)**到 agents.defaults.model.fallbacks 中的下一个模型。
本文档解释运行时规则和支持它们的数据。
认证存储(Auth storage)(密钥 + OAuth)
OpenClaw 对 API 密钥和 OAuth 令牌都使用认证配置文件(auth profiles)。
- 秘密存储在 ~/.openclaw/agents/<agentId>/agent/auth-profiles.json 中(遗留:~/.openclaw/agent/auth-profiles.json)。
- 配置 auth.profiles / auth.order 是元数据 + 路由仅(没有秘密)。
- 遗留仅导入 OAuth 文件:~/.openclaw/credentials/oauth.json(首次使用时导入到 auth-profiles.json 中)。
更多详情:/concepts/oauth
凭据类型:
- type: "api_key" → { provider, key }
- type: "oauth" → { provider, access, refresh, expires, email? }(+ 某些提供商的 projectId/enterpriseUrl)
配置文件 ID(Profile IDs)
OAuth 登录创建不同的配置文件,以便多个账户可以共存。
- 默认:当没有电子邮件可用时为 provider:default。
- 带有电子邮件的 OAuth:provider:<email>(例如 google-antigravity:[email protected])。
配置文件存储在 ~/.openclaw/agents/<agentId>/agent/auth-profiles.json 的 profiles 下。
轮换顺序(Rotation order)
当提供商有多个配置文件时,OpenClaw 这样选择顺序:
- 显式配置:auth.order[provider](如果设置)。
- 配置的配置文件:按提供商过滤的 auth.profiles。
- 存储的配置文件:auth-profiles.json 中提供商的条目。
如果没有配置显式顺序,OpenClaw 使用轮询顺序:
- 主键: 配置文件类型(OAuth 优先于 API 密钥)。
- 次键: usageStats.lastUsed(最旧的优先,在每种类型内)。
- 冷却/禁用的配置文件 移到末尾,按最快到期排序。
会话粘性(Session stickiness)(缓存友好)
OpenClaw 为每个会话固定选择的认证配置文件,以保持提供商缓存温暖。 它不会在每个请求上轮换。固定的配置文件会被重复使用,直到:
- 会话被重置(/new / /reset)
- 压缩完成(压缩计数递增)
- 配置文件处于冷却/禁用状态
通过 /model …@<profileId> 手动选择为该会话设置用户覆盖,并且在新会话开始之前不会自动轮换。
自动固定的配置文件(由会话路由器选择)被视为偏好:它们首先尝试,但 OpenClaw 可能在速率限制/超时时轮换到另一个配置文件。 用户固定的配置文件锁定到该配置文件;如果它失败并且配置了模型故障转移,OpenClaw 会移动到下一个模型而不是切换配置文件。
为什么 OAuth 可能"看起来丢失"
如果您对同一提供商同时拥有 OAuth 配置文件和 API 密钥配置文件,轮询可以在消息之间切换它们,除非固定。要强制单个配置文件:
- 使用 auth.order[provider] = ["provider:profileId"] 固定,或
- 通过 /model … 使用每会话覆盖,配合配置文件覆盖(当您的 UI/聊天平台支持时)。
冷却(Cooldowns)
当配置文件由于认证/速率限制错误(或看起来像速率限制的超时)而失败时,OpenClaw 将其标记为冷却并移至下一个配置文件。格式/无效请求错误(例如 Cloud Code Assist 工具调用 ID 验证失败)被视为值得故障转移的,并使用相同的冷却。
冷却使用指数退避:
- 1 分钟
- 5 分钟
- 25 分钟
- 1 小时(上限)
状态存储在 auth-profiles.json 的 usageStats 下:
{
"usageStats": {
"provider:profile": {
"lastUsed": 1736160000000,
"cooldownUntil": 1736160600000,
"errorCount": 2
}
}
}
计费禁用(Billing disables)
计费/信用失败(例如"信用不足" / "信用余额过低")被视为值得故障转移的,但它们通常不是瞬态的。OpenClaw 不是短冷却,而是将配置文件标记为禁用(使用更长的退避)并轮换到下一个配置文件/提供商。
状态存储在 auth-profiles.json 中:
{
"usageStats": {
"provider:profile": {
"disabledUntil": 1736178000000,
"disabledReason": "billing"
}
}
}
默认值:
- 计费退避从 5 小时 开始,每次计费失败加倍,上限为 24 小时。
- 如果配置文件在 24 小时 内没有失败,退避计数器会重置(可配置)。
模型故障转移(Model fallback)
如果提供商的所有配置文件都失败,OpenClaw 会移动到 agents.defaults.model.fallbacks 中的下一个模型。这适用于认证失败、速率限制和耗尽配置文件轮换的超时(其他错误不推进故障转移)。
当运行以模型覆盖(钩子或 CLI)开始时,故障转移在尝试任何配置的故障转移后仍然在 agents.defaults.model.primary 结束。
相关配置
有关以下内容,请参见 网关配置(Gateway configuration):
- auth.profiles / auth.order
- auth.cooldowns.billingBackoffHours / auth.cooldowns.billingBackoffHoursByProvider
- auth.cooldowns.billingMaxHours / auth.cooldowns.failureWindowHours
- agents.defaults.model.primary / agents.defaults.model.fallbacks
- agents.defaults.imageModel 路由
有关更广泛的模型选择和故障转移概述,请参见 模型(Models)。