Гайд · TNWS AI
Как запустить фоновый запрос OpenAI API и дождаться результата без таймаута
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
Читайте также
Как настроить streaming в OpenAI Responses API и правильно собрать ответ
Потоковая выдача OpenAI: stream:true, типы SSE-событий, text delta, завершение, tool calls и восстановление после обрыва.
Как подключить удалённый MCP-сервер к OpenAI API и проверить его инструменты
Remote MCP в Responses API: адрес сервера, список инструментов, approvals, проверка аргументов и защита от prompt injection.
Как подключить веб-поиск к OpenAI Responses API и получить проверяемые источники
Рабочий web_search в Responses API: вызов инструмента, доменные ограничения, чтение URL-цитат и проверка актуальности ответа.
Комментарии
Пока тихо. Скажите первое слово