Перейти к основному содержанию
Чаще всего таймаут возникает потому, что клиент или промежуточный прокси перестаёт ждать, пока модель ещё генерирует ответ. Закрытие соединения не отменяет запрос, который уже дошёл до апстрим-провайдера, поэтому он оплачивается по завершении генерации. Лучше сразу задать достаточно длинный таймаут, чем короткий таймаут с повторами.
Повтор сразу после таймаута может обойтись вдвое дороже и всё равно ничего не вернуть.
  • Оборванный вами запрос обычно завершается и оплачивается.
  • Встроенные повторы SDK отправляют тот же запрос заново после таймаута.
  • Перед повтором проверьте статус и стоимость прежнего запроса в журнале вызовов.

Рекомендуемые таймауты

Рассуждающие модели думают перед ответом, и один запрос может идти несколько минут. Примеры:
  • gpt-6-sol и gpt-5.6-sol
  • gpt-5.4-pro и o3-pro (gpt-5.5-pro выведена из эксплуатации в октябре 2026)
  • gemini-3.1-pro-preview

Потоковая передача для длинных ответов

Запрос без потоковой передачи возвращается только после генерации всего ответа, так что таймаут чтения соревнуется с полным временем генерации. При потоковой передаче (stream=True) вывод приходит по мере генерации:
  • первые данные приходят быстро, затем события идут непрерывно;
  • таймаут чтения должен покрывать лишь паузу между событиями, обычно хватает 90–120 секунд;
  • общее время остаётся прежним, но соединение больше не обрывается в ожидании полного ответа.
Если вы остаётесь на запросах без потоковой передачи, задайте таймаут 300–600 секунд и учитывайте, что длинные генерации будут падать чаще.

Отключение автоматических повторов для долгих запросов

Официальный OpenAI Python SDK по умолчанию делает два повтора после таймаута и некоторых других ошибок. Для запросов к изображениям и рассуждающим моделям установите max_retries равным 0 и пусть решение о повторе принимает ваш код:

Таймаут не исчез после увеличения

Проверьте по порядку:
1

Убедитесь, что новый таймаут действует

Некоторые фреймворки оборачивают HTTP-клиент собственным таймаутом. Выведите фактические настройки и убедитесь, что вы изменили именно используемый.
2

Проверьте все звенья цепочки

Любое звено с таймаутом короче генерации закроет соединение первым. Увеличьте каждое:
  • обратный прокси, который вы запускаете, например Nginx, у которого proxy_read_timeout по умолчанию 60 секунд;
  • таймаут простоя балансировщика нагрузки в вашем облаке;
  • максимальное время выполнения вашей serverless-функции;
  • таймаут задачи у вашего воркера очереди.
3

Отличите таймауты от лимитов

Оборванное соединение или таймаут чтения означают, что вы ждали недостаточно долго. 429 — это лимит скорости или ёмкости, он не зависит от длительности. Повторяйте 429 несколько раз с задержкой и пишите в поддержку, если ошибка не исчезает.
4

Посмотрите реальную длительность в журнале вызовов

Откройте журнал вызовов, найдите длительность и стоимость запроса и задайте таймаут выше этого значения с запасом.

Частые вопросы

Оплачивается ли запрос, если у клиента сработал таймаут?

Да, если апстрим-провайдер закончил генерацию. Разрыв происходит на вашей стороне, а шлюз и провайдер продолжают работу. Ответы апстрима не со статусом 200, например 429 или 503, не оплачиваются. Фактическую стоимость показывает журнал вызовов, а возвраты и корректировки баланса регулируют Условия использования.

Можно ли получить изображение по ID после обрыва соединения?

Нет. Эндпоинты изображений синхронные, а LaoZhang API по умолчанию не хранит сгенерированные результаты, поэтому потерянный результат вернуть нельзя. Если нужна асинхронность, поставьте очередь задач в своём бэкенде, как описано в материале Возвращают ли API изображений ID задачи?

Есть ли побочные эффекты у очень длинного таймаута?

На оплату он не влияет: она зависит только от расхода или числа вызовов, а не от времени ожидания. Долгие соединения занимают воркер или слот в пуле, поэтому при большой нагрузке выносите запросы к изображениям и рассуждающим моделям в отдельную очередь заданий.

Связанные материалы