分别设置连接超时和整体超时
连接超时用于限制建立网络连接的等待时间,整体超时覆盖服务端生成和响应传输。流式请求还应处理长时间无新事件、客户端取消和代理层超时。
超时值应基于真实模型和任务分布制定。不要为避免偶发失败把超时无限放大,否则请求会长期占用连接、线程和并发额度。
只重试可能短暂恢复的错误
网络中断、部分 429 和部分 5xx 可以有限重试;401、404、参数校验错误或明确的额度不足通常应立即停止。重试使用指数退避和随机抖动,避免大量客户端同时再次请求。
读取服务端 Retry-After 时仍要设置最大等待时间。每次调用应限制总尝试次数和总耗时,而不是只限制单次请求。
from openai import OpenAI
client = OpenAI(
api_key="YOUR_MODB_API_KEY",
base_url="https://modbapi.com/v1",
timeout=30.0,
max_retries=2,
)控制并发并考虑幂等性
在业务入口设置队列或信号量,限制同时运行的长请求。收到 429 时降低发送速度,比立即增加重试更有效。
客户端超时不代表服务端一定停止处理。会触发外部工具、写操作或批量任务的请求必须设计幂等键与状态查询,防止重试造成重复执行。
常见问题
关于AI API 超时、重试与并发控制的常见问题
401 错误应该自动重试吗?
不应该。先修复密钥、鉴权头或权限配置,重复发送不会自动恢复。
429 应该等待多久?
优先遵循 Retry-After,并设置最大等待和尝试次数;持续 429 时应降低并发或检查额度。
流式响应中断后可以从中间继续吗?
多数对话请求不能直接续传,应根据业务保存上下文并谨慎重新发起。