Гайд · TNWS AI

Как запустить фоновый запрос OpenAI API и дождаться результата без таймаута

2 мин

Background mode Responses API: background:true, сохранение response ID, polling, терминальные статусы, отмена и защита от дублей.

Передайте background:true, сохраните response.id и проверяйте состояние отдельными запросами с увеличивающимся интервалом. Создание фонового response — это принятие задачи, а не готовый результат. Пользователь должен видеть статус, возможность отмены и честную ошибку при терминальном сбое.

Рабочий пример

const job = await client.responses.create({
  model: "gpt-5",
  background: true,
  input: "Сравни документы и верни таблицу противоречий"
});

let current = job;
for (let delay = 1000; !["completed","failed","cancelled"].includes(current.status);) {
  await new Promise(r => setTimeout(r, delay));
  current = await client.responses.retrieve(job.id);
  delay = Math.min(Math.round(delay * 1.6), 15000);
}

if (current.status !== "completed") throw new Error(current.status); console.log(current.output_text);


## Конкретные факты и поля

- ID нужно записать до ответа клиенту, иначе после перезапуска процесса задача потеряется для вашего интерфейса.
- Polling с постоянными 100 миллисекундами создаёт лишнюю нагрузку; интервал увеличивают до разумного потолка.
- Финальными считаются только документированные статусы. Сетевой таймаут при retrieve не означает провал самой задачи.
- Повторное создание после сбоя сети способно запустить дубль; храните собственный ключ операции.

## Как внедрить

1. Создайте запись job со статусом `creating` и idempotency key до обращения к API.
2. После получения response ID сохраните его и верните клиенту локальный job ID.
3. Опрос выполняйте worker-процессом, а интерфейс пусть читает статус из вашей базы.
4. На `completed` сохраните результат; на `failed` — тип ошибки; на `cancelled` — причину отмены.
5. Установите общий дедлайн и очистку зависших локальных записей.

## Как проверить результат

Остановите worker после создания и запустите снова: он должен продолжить наблюдение по сохранённому ID. Смоделируйте временный сетевой сбой при retrieve — новый response не должен создаваться. Проверьте также нажатие «Отмена» дважды.

## Ограничения

Background mode подходит длительным задачам, но не обещает конкретный срок. Возможность хранения и совместимость с режимами нулевого хранения данных проверяйте в актуальной документации. Для мгновенного чата обычный или streaming-запрос проще.

## Чего не делать

- Не держите один HTTP-запрос браузера открытым до завершения долгой задачи.
- Не создавайте новую задачу после каждого таймаута polling.
- Не показывайте статус `queued` как готовый результат.

FAQ

Можно ли копировать пример как есть?

Для прототипа — да. В production добавьте таймаут, обработку ошибок, лимиты, журнал request ID и защиту ключа.

Где хранить API-ключ?

В секретах серверной среды. Не в браузере, мобильном приложении, репозитории или тексте статьи.

Как проверить, что функция реально сработала?

Разбирать структурированные поля ответа и проводить контрольный тест, а не судить по убедительности текста.

Почему пример не фиксирует цену?

Тарифы и набор поддерживаемых моделей меняются; актуальные значения проверяются на официальной странице Pricing перед запуском.

Официальный источник

Документация OpenAI, проверена 11 сентября 2026 года: https://platform.openai.com/docs/guides/background

Читайте также

Комментарии

Пока тихо. Скажите первое слово