首页/AI/提示词工程速查/重试与指数退避

重试与指数退避

调用失败重试要有策略:只重试可恢复错误,指数退避加随机抖动,设置总时限与次数上限;防止重试风暴放大后端故障。

提示词工程速查AI更新于 2026-10-13

重试退避是什么

调用模型或外部工具时会遇到瞬时故障:连接重置、服务端 5xx、限流 429。重试策略要回答三件事:哪些错误可以重试、每次等多久、最多试几次。通行做法是只重试可恢复错误,用指数退避加随机抖动打散重试时刻,并同时设置次数上限与总时长上限,防止重试风暴把后端故障放大。

基本信息

可重试连接超时、5xx、429
不可重试参数错误、内容策略拒绝、鉴权失败
退避公式delay = min(base × 2 的 attempt 次方, cap) 再加随机抖动
上限次数与总时长双上限,常见 3 次与 20 秒
前提被重试的操作要幂等或可安全重复

典型使用场景

  • 调用上游模型接口:遇到 429 与 5xx 自动退避重试,减少用户可见失败
  • 批量任务执行:单条失败进入重试队列,不阻塞整批
  • 工具调用链路:只对连接类错误重试,业务校验失败直接返回
  • 跨区域调用:区域抖动时重试后仍失败则切备用端点
  • 故障演练:把上游错误率拉高,观察重试是否放大了压力

退避与参数示例

退避与参数示例
可重试: 429、5xx、连接超时
不重试: 参数错误、内容策略拒绝

delay = min(base * 2**attempt, cap)     # 指数退避
delay += random(0, jitter)               # 抖动防同步重试
最多 3 次;单次调用总时长不超过 20s
超过上限: 记指标并返回可重试提示,不静默吞掉

错误类型与处置

错误是否重试处置方式
连接超时、连接重置重试退避后重试,注意总时长
429 限流重试优先按响应里的等待时间退避
5xx 服务端错误重试有限重试,配合熔断
4xx 参数与鉴权错误不重试直接返回并修正请求
内容策略拒绝不重试换策略而非重发同一请求
抖动不是可选装饰:不加抖动时大量客户端会在同一时刻重试,退避反而制造周期性尖峰。
重试计数要按上游与错误类型分开统计:所有错误混在一个重试率里,既看不出限流是否变严,也看不出某个接口是否在持续劣化。

易错点

  • 参数错误也重试,浪费配额并掩盖真正的请求构造问题
  • 重试无上限,上游故障时形成流量风暴,把局部故障放大成全面不可用
  • 对非幂等操作直接重试,出现重复扣费或重复写库
  • 只重试不统计,重试率长期偏高却没人发现上游已在劣化

数据来源与参考

  • AWS Builders' Library《Timeouts, retries, and backoff with jitter》;Google SRE 重试放大(retry amplification)概念
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌