Claude Certified Architect · Модуль 4 · Урок 4.5
Стратегии пакетной обработки (Batch API)
Суть
Batch API: экономия 50%, но окно до 24 часов, без гарантии задержки (SLA) и без многоходового вызова инструментов. Расчёт частоты подачи: требуемая частота = дедлайн SLA − максимальное время обработки пакета (24ч).
Когда не подходит и восстановление
Batch непригоден для любого блокирующего процесса с SLA менее 24 часов. При сбоях используйте custom_id: переотправляйте только упавшие документы, а не весь пакет (иначе перерасход в десятки раз).
// Каждый запрос помечен уникальным custom_id.
results := client.Batches.Results(batchID)
var failedIDs []string
for _, r := range results {
if r.Result.Type == "errored" {
failedIDs = append(failedIDs, r.CustomID)
}
}
// Переотправляем ТОЛЬКО упавшие документы, не весь пакет.
var resubmit []BatchRequest
for _, cid := range failedIDs {
resubmit = append(resubmit, requestsByID[cid])
}
client.Batches.Create(resubmit)Anti-patterns
| Ловушка | Почему не работает | Верный паттерн |
|---|---|---|
| Batch для блокирующей pre-merge проверки, которую ждут | До 24ч — разработчики не могут ждать неограниченно | Синхронный API для блокирующего; batch — для неблокирующего |
| Batch для агентного извлечения с вызовом инструментов по ходу | Batch не поддерживает многоходовой вызов инструментов | Синхронный API для tool-calling; batch — для одноходового |
| Переотправлять весь пакет при сбое нескольких документов | Переобработка успешных — перерасход в 50 раз | По custom_id переотправлять только упавшие |
Exam traps
| Ловушка | Почему не работает | Верный паттерн |
|---|---|---|
| Batch для блокирующих процессов | Нарушает гарантии задержки | Синхронный API |
| Batch для многоходового вызова инструментов | Не поддерживается | Синхронный API |
| Полная переотправка пакета при частичном сбое | Неэффективно по стоимости | custom_id для точечной переотправки |
Практическое задание (T5)
- Подать пакет из 50 документов с уникальным
custom_idна каждый; проверить сопоставление результатов. - Включить 3 негабаритных документа сверх лимита контекста; реализовать переотправку с дроблением только для них.
- Рассчитать частоту подачи для SLA 30 часов при окне пакета 24ч (ответ: каждые 6 часов).
- Прогнать выборку из 10 документов до пакета на 50; найти и починить пробелы; измерить рост успеха с первого раза.
- Составить матрицу решения: какие 3 вопроса определяют batch vs синхронный API.
Проверка знаний
Извлечение структурированных данных
Система обработки документов с SLA 36 часов; документы поступают непрерывно; команда хочет Batch API (обработка до 24 часов). Как часто подавать пакеты?
Верный ответ: C
C верно. Расчёт: 36ч SLA минус 24ч максимальной обработки = окно подачи 12ч. Подача каждые 12ч гарантирует, что позже всех пришедший документ подан в пределах 12ч и обработан за 24ч — итого ≤36ч. A — при подаче раз в 24ч поздний документ ждёт до 24ч + 24ч обработки = 48ч. B — та же ошибка. D неверно — 36ч достижимо при верной частоте.
Агент разрешения обращений поддержки
Конвейер обрабатывает 10 000 тикетов/день при SLA 36 часов; сквозная задержка пакета 24 часа; пакет запускается ежедневно в полночь. Тикет приходит в 23:58. Сколько буфера остаётся после завершения обработки до дедлайна SLA?
Верный ответ: C
C верно. Тикет в 23:58 (T=0) → дедлайн SLA T+36ч. Пакет в полночь (T+2 мин), обработка 24ч завершается ~00:02 через двое суток. От завершения до дедлайна остаётся ≈12 часов буфера. A считает весь SLA буфером, игнорируя 24ч обработки. B путает саму задержку обработки с буфером. D верно лишь если бы пакет шёл после закрытия SLA.
Агент разрешения обращений поддержки
Один пакетный запрос на 10 000 дневных тикетов; иногда весь пакет падает из-за единственного некорректного тикета, требуя полного перезапуска. Что сделать?
Верный ответ: B
B верно. Меньшие пакеты прямо ограничивают радиус поражения: сбой одного тикета в пакете на 100 затрагивает 99, а не 9 999. A усугубляет — повторяет проблему в масштабе. C дополняет, но новые сбои проскользнут. D обрабатывает сбой постфактум, не предотвращая падение пакета.