首页/AI/大模型部署与运维速查/客户端重试:范围与预算

客户端重试:范围与预算

重试只针对可重试错误(429/502/503 与连接失败),用指数退避;重试总次数与总时长都要设预算,避免放大故障;流式中断重试要防重复输出。

客户端重试的范围与预算

重试只针对可重试的错误:429、502、503 与连接失败;参数错误这类问题重试多少次都不会成功。重试要用指数退避,并设定总次数与总时长的预算,否则重试本身会放大故障。流式请求中断后重试,还要注意重复输出的问题。

基本信息

可重试429、502、503、连接失败
不可重试参数与鉴权类错误
退避策略指数退避加随机抖动
预算次数上限加总时长上限
流式注意防止重复输出

典型使用场景

  • 网关切换实例时客户端的自动恢复
  • 过载期间的平滑退避
  • 批量任务的重试策略设计
  • 避免重试把已经过载的服务再压一遍
  • 把可重试与不可重试的错误码整理成一页说明交给客户端团队
  • 把重试参数写进客户端默认配置,避免各团队各写一套

SDK 用法

SDK 用法
from openai import OpenAI

client = OpenAI(base_url="http://<网关>/v1", api_key="<KEY>",
                max_retries=2, timeout=600.0)
# 官方 SDK 对部分错误会自动退避重试,可按需覆盖
# 业务侧建议携带请求幂等键,便于重试与人工重发时去重

分错误类型处理

错误是否重试说明
429是,先退避按提示等待
502/503是,可换实例排除坏实例
400/401否重试不会成功
超时谨慎可能已扣费且已生成
业务侧建议携带请求幂等键:重试与人工重发都能据此去重,这是避免重复计费最省事的做法。
重试预算要覆盖整条链路:客户端重试乘上网关重试,实际请求量可能放大好几倍,必须限制总次数。
重试要区分场景:交互请求重试太久会让用户一直等,应该设更短的超时;批量任务可以放宽。
把重试次数与最终失败率放在一起监控:重试率上升往往是上游问题的早期信号。

易错点

  • 对超时做无脑重试:重复生成、重复计费,还会加重已经过载的服务
  • 重试次数不做预算:客户端与网关各自重试,请求量成倍放大
  • 流式请求中断后直接整体重放:用户看到重复内容,体验反而更差
  • 对参数错误也重试:浪费配额与时间,真正的错误信息被淹没
  • 对没有幂等保证的接口做重试:可能造成重复下单、重复计费这类严重后果

数据来源与参考

  • OpenAI Python SDK 文档(github.com/openai/openai-python)
  • Google SRE 手册:处理过载(sre.google/sre-book)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌