Batch APICost OptimizationLLM API

Пакетный API для LLM: миллионы токенов за полцены (2026)

1 мин чтения

У вас есть задача, которая каждую ночь выполняет 5,000 запросов, занимает два часа, и никто не смотрит на результат до утра. И вы платите за неё по тарифам реального времени — потому что где-то по пути «API» превратилось в «синхронный API», а пакетный endpoint со скидкой 50% так и не попал в архитектуру.

Это самая распространённая утечка в LLM-бюджетах 2026 года: работа, терпимая к задержкам, оплачивается по тарифам реального времени. Все крупные провайдеры уже снижают цену на асинхронные нагрузки примерно на 50% — рынок пакетных LLM API стандартизировался на половине цены: пакетный API от OpenAI с окном завершения ~24 часа, Message Batches от Anthropic с окном ~1 час, пакетный тариф Gemini и DeepSeek, встроивший ту же идею в пиковые и внепиковые расценки. Деньги лежат на столе, и этот гайд — о том, как их забрать: что такое пакетный API, матрица провайдеров, рабочий процесс, который можно скопировать, правило выбора между пакетным режимом и реальным временем, а также комбинированная математика, складывающая экономию от пакетной обработки с кэшированием и маршрутизацией.

Что такое пакетный API

Ключевой вывод: пакет = отправил сейчас, забрал позже, заплатил вдвое меньше — все крупные провайдеры пришли к единой модели.

Механизм везде одинаков: вы отправляете файл с запросами (JSONL), провайдер ставит его в очередь, обрабатывает по мере появления свободных мощностей, а вы забираете результаты, когда пакет завершится. Никакого стриминга и интерактивной задержки — скидка и есть компенсация за гибкость.

Матрица провайдеров на 2026 год:

ПровайдерСкидкаОкно завершенияПримечания
OpenAI~50%~24 часаэталонная реализация
Anthropic~50%~1 чассамое короткое окно из четырёх
Gemini~50%гибкий тарифпакет соответствует тарифу Flex inference
DeepSeekвнепиковые расценкипиковые/внепиковые окната же идея, только по часам; действует с августа 2026 года

Сравнение провайдеров отслеживает детали; паттерн везде одинаков — если можете подождать, платите вдвое меньше.

Почему пакетная обработка реально экономит деньги

Ключевой вывод: скидка 50% на самую крупную строку счёта — это ценовое решение, а не оптимизация.

Математика здесь намеренно скучная. Допустим, ваш ежемесячный счёт — $1,000, и 60% из них приходится на работу, терпимую к задержкам (evals, индексация, обогащение данных, ночная генерация). Переводим эти $600 на пакетную обработку: экономия $300 в месяц, $3,600 в год — при нулевом изменении качества. Выходные токены идентичны; разница только в том, когда они приходят.

Две оговорки, чтобы математика оставалась честной:

  1. Скидка действует на уровне провайдера, а не платформы. Унифицированный endpoint выставляет счёт по тарифам нижележащего провайдера — пакетные ставки проходят как пакетные ставки. Наш гайд по оптимизации расходов разбирает весь набор рычагов; пакетная обработка — рычаг с наименьшими инженерными затратами.
  2. Пакет — это не бесплатно. Это полцены. Вторая половина всё равно выигрывает от кэширования и маршрутизации — об этой комбинированной математике ниже, в пятом разделе.

Как построить пакетный рабочий процесс

Ключевой вывод: рабочий процесс состоит из четырёх частей — отправка, идемпотентность, сбор результатов, восстановление — и именно восстановление пропускают все.

Скелет, универсальный по форме: формат запроса описан в документации chat completions endpoint:

import json
from openai import OpenAI

client = OpenAI()  # point at your provider or unified endpoint

# 1. Build the JSONL request file
with open("batch.jsonl", "w") as f:
    for i, task in enumerate(tasks):
        f.write(json.dumps({
            "custom_id": f"task-{i}",          # idempotency key — never omit
            "method": "POST",
            "url": "/v1/chat/completions",
            "body": {"model": "gpt-4o-mini", "messages": task["messages"]},
        }) + "\n")

# 2. Submit once — the custom_id makes retries safe
batch = client.batches.create(input_file=upload(batch_path), endpoint="/v1/chat/completions")

# 3. Poll or webhook until complete, then map results back by custom_id
# 4. Recover: failed rows get re-queued into the NEXT batch, not re-run inline

Четыре правила, которые делают этот рабочий процесс production-grade:

  1. custom_id — это ваш контракт. Идемпотентность делает повторные попытки безопасными; без неё сетевой сбой при отправке дублирует работу и удваивает счёт.
  2. Собирайте результаты по ID, а не по порядку. Результаты пакета приходят в произвольном порядке; сопоставляйте custom_id со своими записями, иначе дважды напишете неправильный join.
  3. На масштабе webhook-уведомления побеждают polling. Callback о завершении заменяет цикл «проверять каждые 5 минут»; справочник кодов ошибок подскажет, какие сбои можно повторять.
  4. Восстановление — это очередь, а не костыль. Упавшие строки возвращаются в следующий цикл пакета. Команды, которые повторно запускают сбои inline, узнают о rate limits пакетного режима самым жёстким способом.

Как выбрать: пакетный режим или реальное время

Ключевой вывод: решение сводится к одному вопросу — может ли эта работа подождать? — с двумя явными исключениями, где ответ всегда «нет».

Правило принятия решения, без экивоков:

  • Работа может подождать час? Пакетируйте.
  • Может подождать день? Пакетируйте у провайдера с самым подходящим окном.
  • Пользователь ждёт? Никогда не пакетируйте.
  • Это агентный цикл? Никогда не пакетируйте.

Второе исключение заслуживает отдельного внимания: агентные циклы по объёму токенов выглядят как кандидаты на пакетную обработку, но их запросы причинно связаны — каждый вызов зависит от предыдущего — а значит, они интерактивны по своей природе. Архитектуры голосовых агентов и чат-ботов поддержки из этой серии интерактивны по той же причине. Пакетная обработка предназначена для параллелизуемой работы с дедлайном, а таких задач меньше, чем кажется большинству команд, — и тем ценнее эти 50% там, где они применимы.

Как складывать экономию: пакет × кэширование × маршрутизация

Ключевой вывод: пакет, кэширование и маршрутизация перемножаются — пакетная задача, переиспользующая кэшированные префиксы на бюджетной модели, стоит ничтожную долю наивной версии.

Три рычага не пересекаются — именно поэтому они складываются:

  1. Пакетная обработка — 50% от базовой ставки для работы, терпимой к задержкам.
  2. Кэширование промптов — кэшированные входные префиксы по цене ~0.1×, а пакетные задачи — идеальный кейс для кэширования: одни и те же шаблоны выполняются тысячи раз, поэтому байт-стабильные префиксы попадают в кэш почти всегда. Механика — в гайде по кэшированию; синергия с пакетной обработкой и есть множитель.
  3. Маршрутизация — выбор модели для пакета — это решение о маршрутизации: evals на фронтирной модели, потому что вы измеряете фронтир; обогащение на бюджетной модели, потому что результат никто не читает. Механика маршрутизации описана в документации по производственной оптимизации.

Разбор на примере: ночная задача по обогащению на 10M токенов. Базовая ставка на модели среднего уровня: $30. С пакетной обработкой: $15. Та же задача со стабильными префиксами, попадающими в кэш по 0.1× на входе (допустим, 80% токенов кэшируются): примерно $4-6. Та же задача, то же качество вывода — одна конфигурация маршрутизации и один стабильный шаблон промпта. Быстрый старт соберёт пайплайн за минуты; множитель — вот что даёт сложный процент.

Частые ошибки, раздувающие счёт

Ключевой вывод: четыре способа обнулить скидку — каждый из них незаметно превращает 50% обратно в 100%.

  1. Прогон evals по упавшим строкам. Запускайте evals только по завершённым строкам пакета; упавшие строки — это проблема качества данных, и их включение даёт фальшивую оценку, под которую вы начнёте оптимизироваться. Дисциплина evals в стиле CI из гайда по тестированию этой серии показывает нужный паттерн.
  2. Просрочка результатов. У результатов пакета есть окна хранения; задача, завершившаяся, пока вы в отпуске, и истёкшая до сбора, — это работа по полной цене без результата. Привязывайте сбор к событию завершения, а не к своему календарю.
  3. Игнорирование пакетных rate limits. Квоты пакетного режима отдельны от квот реального времени — команды, считающие лимиты одинаковыми, обнаруживают свой собственный потолок посреди пакета.
  4. Пропуск идемпотентности. Нет custom_id — нет безопасного ретрая и пути восстановления: четыре самых дорогих символа, которые можно опустить.

FAQ

Сколько реально экономят пакетные API?

Около 50% на пакетных тарифах OpenAI, Anthropic и Gemini, а схема пиковых/внепиковых часов у DeepSeek — часовой аналог. Экономия считается за токен, поэтому она масштабируется вместе с вашим объёмом работы, терпимой к задержкам, — самой крупной строкой счёта в большинстве бюджетов.

Сколько времени занимает выполнение пакета?

Окно OpenAI — ~24 часа, Anthropic — ~1 час, Gemini привязан к своему тарифу Flex, а внепиковые окна DeepSeek определяются часами. Выбирайте провайдера, чьё окно вписывается в ваш дедлайн; скидка одинакова.

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

Да — evals это каноническая пакетная нагрузка. Запускайте их только по завершённым строкам, держите шаблон промпта байт-стабильным для попаданий в кэш и ставьте CI в зависимость от результата завершённого пакета.

Совместим ли пакетный режим с кэшированием промптов?

Исключительно хорошо — пакетные задачи повторяют одни и те же шаблоны тысячи раз, а это идеальный профиль для кэширования. Стабильные префиксы + пакет = складывающиеся скидки из этого гайда.

Какие нагрузки никогда нельзя отправлять в пакет?

Всё, чего ждёт пользователь, и всё причинно связанное — агентные циклы и интерактивный голос/чат интерактивны по своей природе. Решение о пакетной обработке сводится к вопросу «может ли это подождать», а не «достаточно ли это большое».

Передают ли унифицированные endpoints пакетные скидки?

Да — пакетные ставки это ставки провайдера, и endpoint выставляет счёт по тарифам провайдера со скидкой без изменений. Задача endpoint — один ключ и одна панель управления; эти 50% принадлежат провайдеру и проходят насквозь.

Итоги

Ландшафт пакетных LLM API в 2026 году поразительно стандартизирован: примерно 50% скидки у каждого крупного провайдера, а единственное реальное различие — окна завершения. Стратегия механическая: найдите долю нагрузки, терпимую к задержкам, переведите её в пакетный режим, держите префиксы стабильными, подбирайте модель под задачу — и комбинация пакетной обработки, кэширования и маршрутизации стабильно даёт 60-80% экономии относительно наивного счёта. Скидка лежит на столе; вопрос только в том, поднимет ли её ваша архитектура.

Возьмите терпимые к задержкам 60% вашего счёта и сократите их вдвое. Получите API-ключ TokSpan — $5 в подарок на ваш первый пакет — и пусть стоимость за задачу покажет вам экономию.