Skip to main content
请求超时多半是你的客户端或中间代理等得太短,而模型还在生成。客户端断开不会取消已经发给上游的请求,生成完成后照常扣费,所以要一次把 timeout 设够,而不是设一个小值再靠重试。
超时后立即重试,可能付两次钱却一个结果都拿不到。
  • 断开前发出的那次请求通常仍会完成并扣费。
  • SDK 自带的自动重试会在超时后再发一次同样的请求。
  • 重试前先在调用日志查看上一次请求的状态和扣费。

按场景设置 timeout

推理模型会先长时间思考再输出,一次请求可能持续几分钟,例如:
  • gpt-6-sol、gpt-5.6-sol
  • gpt-5.5-pro、o3-pro
  • gemini-3.1-pro-preview

长输出优先用流式

非流式请求要等整段内容生成完才一次性返回,你的读超时要和整段生成时间竞速。改用流式(stream=True)后,内容边生成边返回:
  • 首个数据很快到达,之后持续有事件返回;
  • 读超时只需覆盖两次事件之间的间隔,通常设 90–120 秒;
  • 总耗时不会变短,但不再因为等整段结果而断开。
坚持用非流式时,把 timeout 设到 300–600 秒,并接受生成越久越容易中途断开。

关掉长请求的自动重试

OpenAI 官方 Python SDK 默认在超时等错误后自动重试 2 次。图片和推理请求建议把 max_retries 设为 0,由业务代码决定是否重试:

已经调大 timeout 仍然超时

按顺序检查:
1

确认新的 timeout 真的生效

有些框架在 HTTP 客户端外面还包了一层超时。打印实际生效的配置,确认改的是被使用的那个参数。
2

检查链路上的每一层

任何一层的超时短于生成时间,都会先断开连接。逐一放宽:
  • 自建反向代理,例如 Nginx 的 proxy_read_timeout 默认 60 秒;
  • 云负载均衡的空闲连接超时;
  • Serverless 函数的最长执行时间;
  • 任务队列 worker 的单任务超时。
3

区分超时和限流

连接中断、读取超时是等待时间不够;429 是速率或容量限制,与耗时无关。429 先做有限次数的退避重试,长期出现时联系支持团队。
4

用调用日志确认实际耗时

在调用日志查看这次请求的用时和是否扣费,按实际耗时再留出余量。

常见问题

超时断开的请求还会扣费吗?

会,只要上游已经完成生成。断开发生在你的客户端,服务端和上游不会因此停止;返回 429 或 503、没有进入生成的请求通常不扣费。实际扣费以调用日志为准,退款与余额调整按用户协议处理。

断开后能凭 ID 取回图片吗?

不能。图片接口是同步的,老张API默认不保存生成结果,断开后这次结果就拿不到了。需要异步体验时,在自己的后端包一层任务队列,做法见图片生成 API 有异步任务 ID 吗。

timeout 设得很大有副作用吗?

不影响计费,扣费只看实际用量或调用次数,与等待时间无关。需要注意的是长连接会占用 worker 或连接池,高并发时建议把图片和推理请求放进独立的任务队列。

相关文档