AI-инжиниринг
Batch API: обрабатываем тысячи документов за полцены
Цели урока
- Понять разницу real-time vs batch режимов и когда каждый уместен
- Реализовать batch pipeline через OpenAI Batch API: JSONL, polling, результаты
- Оценить Anthropic Batch API честно: возможности и известные ограничения 2026
- Построить production-ready pipeline с retry, мониторингом, partial failures
100 000 документов нужно классифицировать. В real-time это невозможно и дорого. Batch API делает это за ночь и в 2 раза дешевле - паттерн, который знает каждый production AI-инженер.
- OpenAI Batch API: 50% скидка, SLA 24h (большинство за 1-6h), поддерживает gpt-4o, gpt-4o-mini, embeddings
- Anthropic Batch API: 50% скидка, до 10000 запросов/batch - documented reliability issues апрель 2026
- Типичные batch задачи: ночная индексация документов, bulk классификация отзывов, SEO-оптимизация, bulk embeddings generation
- 35-48% сокращение месячных LLM расходов при переводе 40-60% трафика на batch (measured в production)
Предварительные знания
- Интеграция с LLM API: запросы, ответы, формат сообщений, обработка ошибок
- Понимание токенов и стоимости: цена за input/output токены, из чего складывается счёт
- Базовая работа с асинхронным кодом: polling, очереди, фоновые задачи
Batch API: асинхронная обработка по половинной цене
До 2024 года массовая обработка данных через LLM была дорогой: каждый из сотен тысяч документов отправлялся синхронным запросом по полной цене, даже если результат был нужен только к утру. В 2024 году OpenAI запустила Batch API - асинхронный режим, в котором запросы собираются в один JSONL-файл, обрабатываются провайдером в течение окна 24 часа и возвращаются файлом результатов со скидкой 50% на input и output токены. Экономика проста: 24-часовой SLA позволяет провайдеру группировать задачи и использовать свободные GPU-мощности в непиковые часы - та же модель, те же веса, но лучшая утилизация железа. Это превратило целый класс задач (ночная индексация, bulk-классификация, генерация эмбеддингов, отчёты) из дорогих в почти бесплатные по сравнению с real-time. Позже аналогичный режим со скидкой 50% и лимитом до 10000 запросов на batch появился у Anthropic (Message Batches API). Ключевая инженерная деталь: каждый запрос несёт custom_id, потому что порядок результатов не гарантирован, и только по нему можно сопоставить ответ с исходным документом.
Синхронный vs асинхронный AI: два режима работы
100 000 документов нужно классифицировать. В real-time это невозможно и дорого. Batch API делает это за ночь и в 2 раза дешевле - паттерн, который знает каждый production AI-инженер.
Два режима работы с LLM API определяют разную архитектуру и разную стоимость:
| Критерий | Синхронный | Batch |
|---|---|---|
| Latency | 1-10 секунд | 1-24 часа |
| Цена (GPT-4o) | USD 2.50/1M input tokens | USD 1.25/1M input tokens |
| User experience | Интерактивный | Фоновый процесс |
| Failure handling | Retry немедленно | Retry по расписанию |
| Масштаб | Десятки/сотни в минуту | Миллионы в день |
| Когда применять | User-facing, <1s latency важна | >1000 запросов, латентность не критична |
Реальный ROI batch processing в production:
Исследования показывают: 35-48% сокращение месячных расходов на LLM API при переводе 40-60% трафика на batch режим. Типичные batch-eligible задачи: ночная индексация документов, bulk классификация, генерация отчётов, SEO-оптимизация контента.
Batch API стоит 50% от real-time цены потому что:
OpenAI Batch API: механика и практика
OpenAI Batch API: JSONL файл с запросами -> upload -> batch creation -> polling -> download results. SLA 24 часа, большинство батчей завершается за 1-6 часов.
| Параметр | OpenAI Batch API | Значение |
|---|---|---|
| Скидка | 50% | GPT-4o: USD 2.50 -> USD 1.25 per 1M input |
| SLA | 24 часа | Большинство завершается за 1-6h |
| Макс. файл | 200 MB / 50K запросов | Один JSONL файл |
| Форматы | chat completions, embeddings | Не все endpoints |
| Отмена | Возможна | До начала обработки |
OpenAI Batch API - наиболее зрелый и надёжный на рынке. Документация полная, статусы понятные, ошибки прозрачные. Для новых проектов batch processing стоит начинать с OpenAI.
В OpenAI Batch API для чего нужен custom_id в каждом запросе?
Anthropic Batch API: возможности и честные ограничения
Anthropic Message Batches API: те же 50% скидки, до 10000 запросов в одном batch. API работает, но имеет задокументированные проблемы надёжности (апрель 2026).
Задокументированные проблемы Anthropic Batch API (апрель 2026): непрозрачные ошибки без деталей (errored_request_count растёт без объяснений), отсутствие per-item прогресса в процессе обработки, невозможность отменить уже запущенный batch, редкие случаи когда весь batch молча завершается с 0 результатами. Для критических задач: мониторинг + fallback на real-time.
| Параметр | OpenAI Batch | Anthropic Batch |
|---|---|---|
| Скидка | 50% | 50% |
| Макс. запросов | 50K / файл (200MB) | 10K / batch |
| Формат ввода | JSONL файл | JSON массив в теле |
| Прогресс | Счётчики completed/failed | Только processing_status |
| Отмена | Да | Нет |
| Надёжность (2026) | Высокая | Средняя (known issues) |
| Когда выбирать | Большие объёмы, надёжность важна | Claude-специфичные задачи, <10K запросов |
Несмотря на ограничения, Anthropic Batch API экономически оправдан для задач, где нужен именно Claude: long-context анализ (200K контекст), следование сложным инструкциям, code review. Скидка 50% делает claude-sonnet-4-5 batch сопоставимым по цене с gpt-4o-mini real-time.
При каком условии стоит предпочесть OpenAI Batch API вместо Anthropic Batch API?
Pipeline для batch processing: retry, monitoring, partial failures
Production batch pipeline должен обрабатывать частичные сбои, отслеживать прогресс и корректно восстанавливаться. Наивный подход - потерять 5% результатов без уведомления.
| Проблема | Симптом | Решение |
|---|---|---|
| Partial failure | 5-10% запросов возвращают error | Отфильтровать failed, retry через отдельный batch |
| Batch expired | Batch не завершился за 24h | Разбить на меньшие части, проверить валидность JSONL |
| Нет прогресса (Anthropic) | processing_status не меняется часами | Таймаут 26h + fallback на real-time |
| Потеря job state | Сервер перезапустился - где batch? | Сохранять batchId в DB до submission |
| Cost spike | Batch больше чем ожидалось | Лимит max tokens + мониторинг через cost alerts |
Почему нужно сохранять batchId в базе данных сразу после submission?
Batch API - это просто очередь запросов, качество ответов хуже
Используется та же модель с теми же весами. Разница только в scheduling: провайдер обрабатывает в удобное время
GPT-4o в batch - это тот же GPT-4o. Anthropic batch - тот же claude-sonnet. Никакой деградации качества нет. Скидка - за гибкость по времени доставки.
Один большой batch лучше нескольких маленьких
Большие batches рискованнее: один bitfield failure может заблокировать всё. Оптимально - 1K-5K запросов, параллельные batches
Partial failures в batch не дают возможность retry проблемных частей без повторной обработки всего. Малые batches позволяют быстрый retry и лучший мониторинг прогресса.
Итоги
- Batch API: 50% скидка за 24-часовой SLA - один из самых простых способов сократить AI расходы
- OpenAI Batch: JSONL файл, polling статуса, прозрачные счётчики - зрелый и надёжный
- Anthropic Batch: те же скидки, но max 10K/batch и known reliability issues (2026)
- Обязательно: сохранять batchId в DB, обрабатывать partial failures, retry стратегия
- Цена: GPT-4o USD 2.50 -> USD 1.25 per 1M input tokens в batch режиме
Вопросы для размышления
- Какие задачи в текущей системе выполняются real-time, но могли бы быть отложены на несколько часов без ущерба для пользователей?
- Как отлаживать Anthropic Batch API при непрозрачных ошибках - какую информацию логировать и как строить fallback?
- При каком объёме запросов экономия от batch окупает сложность pipeline (retry, monitoring, DB для job state)?
Что дальше
Тысячи текстовых документов обработаны. Следующий frontier - голосовые агенты в production: latency, VAD, платформы.
- Voice Agents в Production — Следующий урок: Vapi, LiveKit, Retell - голос который не обрывается
- Cost Management — Batch API как часть общей стратегии оптимизации расходов
- Caching — Кеширование дополняет batch: одинаковые запросы не платим дважды