跳转到内容

断路器与故障转移

Claudex 为每个提供商 profile 内置了断路器,当检测到故障时自动转移到备用提供商。

success
┌──────────────┐
│ │
▼ failure │
Closed ────────► Open
▲ │
│ timeout │
│ expired ▼
└─────────── HalfOpen
failure → back to Open
状态行为
Closed正常运行。请求正常通过。记录失败次数。
Open请求被阻止。触发故障转移到备用提供商。
HalfOpen恢复超时后,允许一个探针请求通过。成功则回到 Closed;失败则回到 Open。
参数
故障阈值连续 3 次失败
恢复超时30 秒

在 profile 中定义备用提供商以启用自动故障转移:

[[profiles]]
name = "grok"
provider_type = "OpenAICompatible"
base_url = "https://api.x.ai/v1"
api_key = "xai-..."
default_model = "grok-3-beta"
backup_providers = ["deepseek", "chatgpt"] # 故障转移链

grok 连续失败 3 次时:

  1. grok 的断路器打开
  2. 请求重试 deepseek
  3. 如果 deepseek 也失败,尝试 chatgpt
  4. 每个备用提供商有独立的断路器

对于 OAuth profile,HTTP 401 响应有特殊处理:

  1. 代理使当前 OAuth token 失效
  2. 尝试从凭证链重新加载 token
  3. 使用新 token 重试请求
  4. 仅在重试也失败时才计为断路器故障

这可以防止临时的 token 过期触发不必要的故障转移。

后台健康检查器每约 30 秒运行一次,向所有启用的 profile 发送轻量探针请求。健康状态在 TUI 仪表盘中以颜色显示:

  • 绿色:健康
  • 黄色:降级(近期有失败)
  • 红色:断路器已打开