API 拒掉模型时:同档上一版自动再试一次
默认模型或别名一解析,Anthropic API 却说「这个模型不让用」——以前常见后果是这一轮直接挂掉,下一轮还挂。CLI 2.1.286 修了这条路径:被拒绝时,会按同档(same tier)的上一版模型自动再试一次,减少「每轮都失败」的卡死感。
它解决的是短暂不可用 / 解析到停用或无权模型时的韧性,不是让你长期跑错模型而不自知。
行为怎么理解
触发大致是:
- 你的默认模型、
/model选择,或某个别名解析到具体模型 ID。 - Anthropic API 拒绝该模型(无权、下线、区域/组织策略等,以 API 返回为准)。
- Claude Code 在同档内选上一版模型再请求一次,而不是立刻让整轮失败。
「同档」可以粗记为:Sonnet 档仍在 Sonnet 线、Opus 档仍在 Opus 线——不是随便跳到完全不同级别。具体映射以当前 CLI 为准。
同版本还有相关改进:
- 拒绝重试与
--fallback-model在「备用模型不能跑 fast」时,会改以标准速度跑,并在交互会话给一次性提示。 - 模型回退通知、autocompact 抖动错误会说明:回退是否把上下文从 1M 降到 200K。
典型场景
- 别名仍指向旧 ID:组织侧已停某版本,本地别名还没改。
- 默认刚切到新 Sonnet / Opus:个别账号或区域短暂未开通。
- 托管白名单与默认不同步:表面写了默认,实际 API 不让用——重试上一版可先撑住会话,但仍应修配置。
若你刻意要「失败就停、绝不静默换模型」,升级后留意通知文案;长期仍应把默认与白名单对齐,而不是依赖重试。
和相近能力怎么区分
| 能力 | 关系 |
|---|---|
--fallback-model | 你显式指定的备用模型;本文是「被拒 → 同档上一版」的内置一次重试 |
| availableModelsMatch / deniedModels | 团队策略层拦模型;API 拒绝是服务端拦 |
| Sonnet 5.5 默认 / Opus 5.5 | 讲默认与定价;本文讲默认被拒时的恢复路径 |
| Auto mode 重试类文章 | 多指权限 / 安全检查;这里是模型选择失败后的重试 |
不要把「同档上一版」理解成无限轮询:changelog 写的是 retries once——试一次,不是死循环换模型。
升级后建议动作
claude --version确认 ≥ 2.1.286。- 用
/status、/model看清当前默认与别名实际解析到谁。 - 若会话提示发生了模型回退或上下文从 1M→200K,记下并改配置,别假装一切正常。
- 团队有
availableModels/deniedModels时,让白名单与真实可用模型一致,减少依赖隐式重试。 - CI /
--print场景同样受益,但失败日志仍应监控,避免「默默跑在旧模型上」拖垮质量预期。
小结
- 2.1.286:默认或别名解析的模型被 API 拒绝时,同档上一版自动再试一次。
- 目的是避免整轮连环失败;不是替代正确的模型与白名单配置。
- 与
--fallback-model、托管模型管控互补;注意 1M→200K 一类上下文降级提示。
升级后若曾遇到「模型不可用整轮挂」,再复现一次,确认会回退并给出可读提示。