模型调用失败的重试与降级

设计一套模型调用的重试、熔断、降级链路:主模型超时切备用模型,全挂时走本地缓存兜底。

更新于 4天前

适用场景

  • 主用 DeepSeek、备用 Claude 的双模型架构需要一套切换规则
  • 高峰期模型接口频繁超时,要避免请求雪崩
  • 要给运维一份能一眼看懂的降级开关说明
PROMPT
后端同时接了 DeepSeek 和 Claude 两个模型,最近高峰期主模型频繁 5 秒超时,需要一套不会把请求全堆死的重试与降级方案时用这个。

【需求】
给一个 Java Spring Boot 服务的模型调用层设计容错方案:
1. 重试:只对超时和 5xx 重试,最多 2 次,间隔按 200ms、600ms 递增,4xx 一律不重试;
2. 熔断:主模型连续 20 次失败或失败率超过 50%(统计窗口 1 分钟)就打开熔断,5 分钟后半开试探;
3. 降级:熔断打开期间自动切备用模型,备用模型也失败则返回上一次的同类型结果缓存并标记 stale=true;
4. 幂等:同一个 requestId 重试不重复计费,需要在调用前落一张请求表。
请给出类结构、关键代码片段(可以用伪代码但要能直接翻译成 Java)、配置项清单。

【输出要求】
1. 分「链路图(文字版)/ 类设计 / 关键代码 / 配置项 / 监控指标」五节;
2. 配置项写成 YAML,含默认值与可调范围;
3. 明确说明哪一步会产生额外成本(重试带来的重复 token 计费);
4. 最后给 4 条要打到日志里的字段,便于事后复盘。

---
标签
重试 降级 后端架构