Если ответ нейросети нужен не «прямо сейчас», а «сегодня-завтра», у крупных провайдеров есть для этого отдельный режим: Batch API. Сделка выглядит так: вы соглашаетесь на асинхронность — задачи уходят пакетом и возвращаются в срок до суток, — а взамен получаете скидку 50% на входные и выходные токены для поддерживаемых моделей и операций. Для конвейерных задач это самый прямой способ уменьшить счёт. Разбираем, как это устроено у OpenAI, Anthropic и Google, чем придётся пожертвовать кроме скорости и когда батч действительно оправдан.
Как работает Batch API
Вместо того чтобы слать запросы по одному и ждать ответ, вы готовите файл со списком задач — обычный JSONL, где каждая строка отдельный запрос с уникальным идентификатором custom_id. Файл загружается, создаётся задание (job), провайдер обрабатывает его в фоне, когда есть свободные мощности, а по готовности вы скачиваете файлы с результатами.
Задания рассчитаны на обработку в течение суток; многие завершаются быстрее, но скорость зависит от объёма задания и нагрузки провайдера, а часть запросов может и не успеть: у OpenAI при истечении окна готовые ответы сохраняются, невыполненные — отменяются. Поэтому статус задания и результаты каждого запроса стоит проверять явно.
Скидка действует и на вход, и на выход. Лимиты щедрее синхронных, но устроены в два этажа: ограничен и размер одного задания, и общая очередь. У OpenAI, например, в одно задание входит до 50 000 запросов и 200 МБ входного файла, а глубина очереди зависит от модели и уровня доступа. Синхронный API таких послаблений не даёт — про его жёсткие лимиты у нас есть отдельная статья про ошибку 429.
Три провайдера, одна сделка
- OpenAI — Batch API. JSONL-файл через Files API, управление заданиями отдельными эндпоинтами. До 50 000 запросов и 200 МБ на задание; глубина очереди зависит от модели и тарифного уровня. Скидка 50%.
- Anthropic — Message Batches. До 100 000 запросов или 256 МБ на задание. Скидка 50% может сочетаться с экономией кэширования промптов — но попадание в кэш не гарантировано и проверяется по метрикам использования.
- Google — Gemini Batch API. Тот же принцип для поддерживаемых моделей Gemini, включая пакетную генерацию изображений соответствующими моделями.
Ставки у провайдеров различаются — актуальные цены удобно сверять в нашем сравнении API: Gemini, Claude и OpenAI.
Пример: от задач до файла с ответами
Минимальный JSONL для OpenAI — две разные задачи, пересказ и классификация:
{"custom_id": "summary-001", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-5.4-mini-2026-03-17", "messages": [{"role": "user", "content": "Сделай краткий пересказ статьи: …"}]}}
{"custom_id": "category-002", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gpt-5.4-mini-2026-03-17", "messages": [{"role": "user", "content": "Отнеси обращение к одной из категорий: …"}]}}
Имя модели подставляйте актуальное из каталога: у свежих моделей бывают нюансы с batch-алиасами — если обычное имя не принимается, помогает датированный снапшот, как в примере.
Дальше четыре шага: загрузить JSONL через Files API с назначением batch; создать задание (POST /v1/batches), указав файл; периодически проверять статус задания (validating → in_progress → completed/failed/expired); забрать два файла — output с успешными ответами и error с ошибками отдельных запросов. Если входной файл не пройдёт валидацию, задание не запустится целиком.
Порядок строк в результатах не обязан совпадать с входным — соответствие восстанавливается по custom_id. Он же — основа для повторов, но идемпотентность он сам не обеспечивает: приложение должно учитывать уже полученные ответы, чтобы не платить за дубли. Механика не сложнее первого запроса к API; у Anthropic и Google — та же логика с другой упаковкой (массив requests / файл или встроенный список) и своей структурой результатов.
Где батч окупается лучше всего
Классика — всё, что считается «фоном»: массовая классификация и разметка, краткие пересказы архивов документов, генерация описаний для каталога, переводы, ночные прогоны тестов. Общий признак один: результата никто не ждёт на экране, а объём измеряется сотнями и тысячами запросов.
Прикинуть выгоду помогает простая формула: (входные + выходные токены) × ставка × 0,5 = цена батча. Условный пример на 10 000 пересказов по 3 000 входных и 500 выходных токенов при ставках $0,75 и $6 за миллион токенов (условно, на октябрь 2026): синхронно — около $52, в батче — около $26. Цены меняются — перед собственным расчётом сверьте актуальный прайс.
Экономию можно попытаться усилить: у провайдеров с кэшированием промптов одинаковый префикс задач (системный промпт, инструкция, шаблон) даёт шанс на кэш-попадания — вероятность зависит от параллельности обработки и настроек, а реальный выигрыш виден по метрикам использования. Предварительный подсчёт токенов поможет оценить счёт до запуска, а не после.
Когда батч не подходит
Правило выбора короткое: ответ нужен сейчас — прямой вызов; задача независимая и фоновая, сутки ожидания и разбор частичных результатов приемлемы — Batch. Величина выгоды зависит от объёма и стоимости запросов и от трудозатрат на интеграцию.
Не подходят батчу все интерактивные сценарии: чат, где ответ нужен в секундах; задачи, зависящие от «сейчас», — курсы, остатки на складе, новости; цепочки, где следующий запрос строится из предыдущего ответа. И не стоит городить батч ради десятка запросов в день: посчитайте, окупит ли скидка дополнительную логику загрузки, ожидания и разбора результатов.
Практические мелочи
- одна логическая задача — один батч: так проще разбирать результаты и считать стоимость;
- проверяйте оба уровня: статус задания и построчные результаты — успешные ответы в output-файле, ошибки отдельных запросов в error-файле; упавшие строки перезапускаются отдельно, после разбора причины;
- не рассчитывайте на порядок строк: сопоставляйте по
custom_idи перед повтором учитывайте уже полученные ответы; - опрашивайте статус задания по расписанию — это дешевле ручной проверки и вписывается в тот же фоновый конвейер;
- держите префикс промпта стабильным в пределах батча: это повышает шансы кэш-попаданий там, где кэширование доступно.
Вывод
При одной и той же модели и сопоставимых параметрах пакетный режим снижает тариф для поддерживаемых запросов вдвое — но меняет не только скорость: другой способ запуска, ожидания, получения и перепроверки результатов, а значит, и код интеграции. Для ночных и фоновых конвейеров это обычно лучшая первая оптимизация бюджета; интерактивным сценариям он не подходит.
Частые вопросы
Задания рассчитаны на завершение в течение суток, многие возвращаются быстрее — но скорость зависит от объёма и нагрузки. Часть запросов может не успеть: у OpenAI при истечении окна готовые ответы сохраняются, невыполненные отменяются. Поэтому проверяйте и статус задания, и каждый результат.
Могут сочетаться, но это не гарантия. Попадание в кэш зависит от одинаковых префиксов, настроек и параллельности обработки; у Google кэш в пакетных запросах тарифицируется по стандартным ставкам кэширования. Реальную экономию смотрите по метрикам использования.
Возможны два уровня сбоя. Если входной файл не прошёл проверку — не запустится всё задание. Если сбой в отдельных запросах — успешные ответы соберутся в output-файле, ошибки — в error-файле, и задание завершится с частичным результатом; упавшие строки после разбора причины перезапускаются отдельным маленьким батчом.
Источники
- 1.OpenAI — Batch API Guidehttps://developers.openai.com/api/docs/guides/batch
- 2.Anthropic — Message Batcheshttps://platform.claude.com/docs/en/build-with-claude/batch-processing
- 3.Google — Gemini Batch APIhttps://ai.google.dev/gemini-api/docs/batch-api



