CRS 内置了一套智能账号路由系统,在 Claude 账号遇到上游错误时 自动暂停路由、切换到其他账号,确保拼车服务的整体稳定性。
为什么需要冷却机制?
Claude 账号在高频使用或触发限制时,上游会返回以下错误:
| 错误类型 | HTTP 状态码 | 含义 |
|---|---|---|
| 过载 | 503 | Claude 服务器过载,该账号暂时不可用 |
| 服务错误 | 5xx | 上游服务异常 |
| 过载特殊 | overload | 账号被标记为过载状态 |
| 认证失败 | 401/403 | Token 过期或权限问题 |
| 超时 | timeout | 请求超时,账号响应异常 |
遇到这些错误时,如果继续路由请求到同一个账号,会导致连锁失败。 冷却机制会临时将该账号从路由池中移除,等待恢复。
全局 TTL 参数配置
在 CRS 的 .env 文件中可以设置全局冷却时长:
bash
# 编辑 ~/claude-relay-service/.env(脚本部署)
# 或 Docker 的 .env 文件
# 503 错误冷却时长(秒),默认 60 秒
UPSTREAM_ERROR_503_TTL_SECONDS=60
# 其他 5xx 错误冷却时长,默认 30 秒
UPSTREAM_ERROR_5XX_TTL_SECONDS=30
# 过载错误冷却时长,默认 120 秒
UPSTREAM_ERROR_OVERLOAD_TTL_SECONDS=120
# 认证错误冷却时长,默认 300 秒(5 分钟)
UPSTREAM_ERROR_AUTH_TTL_SECONDS=300
# 超时冷却时长,默认 30 秒
UPSTREAM_ERROR_TIMEOUT_TTL_SECONDS=30修改后重启 CRS 服务生效:
bash
crs restart # 脚本部署
# 或
docker-compose restart # Docker 部署账号级冷却覆盖
对特定账号可以覆盖全局配置,在管理面板「编辑 Claude OAuth 账号」中设置:
| 设置项 | 说明 |
|---|---|
| 禁用该账号临时冷却 | 勾选后该账号永远不进入冷却,出错立即重试 |
| 503 冷却秒数 | 留空=跟随全局;填 0=禁用该账号的 503 冷却 |
| 5xx 冷却秒数 | 留空=跟随全局;填 0=禁用该账号的 5xx 冷却 |
使用场景:
- 你有一个「专属稳定账号」,不想被冷却 → 勾选「禁用临时冷却」
- 某个账号 503 很频繁但很快恢复 → 把 503 冷却设为
10(秒)
冷却优先级规则
多种配置并存时,优先级从高到低:
1. 账号级「禁用临时冷却」(最高优先级)
↓
2. 账号级自定义 503/5xx 冷却秒数
↓
3. 代码调用时传入的自定义 TTL(API 调用时传参)
↓
4. 全局环境变量默认值(最低优先级)
管理面板:查看账号路由状态
管理面板的「Claude 账户」列表会显示每个账号的路由状态:
账号状态说明:
✅ 正常路由中
当前可以接收请求
⚠️ 临时暂停(冷却中)
不可路由原因:503 过载
错误类型:overload | HTTP 状态:503
冷却总时长:60s | 剩余:42s
预计恢复:14:32:18
❌ 长期不可用
Token 已过期,需要重新授权
手动重置账号状态
如果账号处于冷却状态但你确认已经恢复, 可以在管理面板点击「重置状态」立即清除冷却,恢复参与路由。
bash
# 也可通过 API 重置(管理员 Token)
curl -X POST http://服务器IP:3000/api/admin/accounts/{accountId}/reset -H "Authorization: Bearer 管理员Token"多账号最佳配置策略
3 账号拼车推荐配置:
bash
# .env 推荐设置
UPSTREAM_ERROR_503_TTL_SECONDS=45 # 45 秒后重试 503 账号
UPSTREAM_ERROR_5XX_TTL_SECONDS=20
UPSTREAM_ERROR_OVERLOAD_TTL_SECONDS=90
UPSTREAM_ERROR_AUTH_TTL_SECONDS=600 # 认证失败冷却更久(需手动处理)
UPSTREAM_ERROR_TIMEOUT_TTL_SECONDS=15账号配置建议:
- 主力账号:正常配置,不禁用冷却(保护账号)
- 备用账号:503 冷却设为
10(快速恢复接替) - 专属账号(VIP 用途):禁用冷却,优先路由
来源:CRS GitHub 项目 - github.com/Wei-Shaw/claude-relay-service