Гайд · TNWS AI
Как запустить Asynchronous Batch API Cloudflare Workers AI
Batch API Workers AI: массив requests, queueRequest=true, лимит payload 10 MB, request_id, polling queued/running и сверка всех responses.
Что именно решаем
Материал отвечает на запрос «как запустить Batch API Cloudflare Workers AI». Фактическая часть сверена 12 сентября 2026 года с официальной документацией Cloudflare. Здесь нет обещаний о цене, квоте или постоянной доступности модели: эти параметры проверяют в своём аккаунте и актуальном Workers AI Models catalog перед запуском.
Применимость
Asynchronous Batch API (Beta) только для моделей, отмеченных как batch-compatible в актуальном каталоге. Сценарий подходит для массовой обработки без ожидания ответа пользователем.
Результат считается готовым не после первого HTTP 200, а после проверки формального ответа и контрольного бизнес-условия. Зафиксируйте дату теста, полный model ID, способ вызова — binding, native REST или OpenAI-compatible endpoint — и версии Wrangler/SDK. Это позволяет отличить изменение кода от обновления сервиса.
Проверенные параметры
- Для REST к inference endpoint добавляют query parameter
queueRequest=true. - Тело содержит массив
requests; каждому элементу можно задать уникальныйexternal_reference. - Общий payload должен быть меньше 10 MB.
- Первый ответ имеет status
queuedиrequest_id; тем же endpoint опрашивают результат, передаваяrequest_id.
Не переносите параметры между моделями автоматически. Text generation, embeddings, reranking и batch имеют разные формы входа и результата. Значения <ACCOUNT_ID>, <MODEL_ID> и <GATEWAY_ID> в шаблонах заменяют фактическими идентификаторами, а не догадками.
Контрольный пример
Вход: 100 обезличенных requests с external_reference ticket-0001…ticket-0100 и payload меньше 10 MB.
Ожидаемый результат: После queued/running появляется финальный ответ; каждый вход сопоставлен ровно с одной response по id или external_reference, сумма успехов и ошибок равна 100.
Сохраните очищенное тело запроса, HTTP-код, Cloudflare success, массив errors, request ID, model ID и время выполнения. API token, персональные данные и закрытые документы в тестовый артефакт не попадают. Для модельного ответа разделяйте технический PASS и смысловой PASS: корректный JSON может содержать неверный факт.
Настройка по шагам
- Создайте отдельный тестовый проект. Секрет передайте через
CLOUDFLARE_API_TOKEN; Account ID можно хранить как конфигурацию, но токен нельзя помещать во frontend, репозиторий или скриншот. - Откройте актуальную карточку модели и подтвердите требуемую функцию. Поддержка обычного inference не означает автоматически JSON Mode, function calling, batch или prompt caching.
- Выберите один интерфейс для первого теста. Для Worker binding имя в Wrangler должно совпадать с полем
env; для REST проверьте Account ID, endpoint и Bearer header; для OpenAI SDK — base URL. - Отключите автоматические retry на диагностическом запуске. Выполните минимальный пример и запишите исходную ошибку целиком после маскировки токена.
- Проверьте Cloudflare envelope и предметный контракт. Пустой result,
success=false, неполный массив или неверный тип поля — это FAIL даже при успешном транспорте. - Добавьте отрицательный тест: неверный тип, отсутствующее обязательное поле, неизвестный resource либо превышенный локальный лимит. Приложение должно отказать безопасно и не повторять неисправимый запрос.
- Прогоните 20–50 обезличенных случаев реального распределения: кириллицу, пустые строки, длинный вход, граничные числа и ожидаемые отказы. Только затем включайте concurrency, cache и retry.
Рабочий шаблон
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai/run/@cf/baai/bge-m3?queueRequest=true" \
+ -H "Authorization: Bearer $API_TOKEN" -H 'Content-Type: application/json' \
+ --json '{"requests":[{"query":"возврат оплаты","contexts":[{"text":"Возврат за 3 дня"}],"external_reference":"ticket-0001"}]}'
# сохранить request_id; poll тем же URL с {"request_id":"..."}
Шаблон показывает проверяемый контракт, но не заменяет production-обвязку. Добавьте timeout, ограничение размера тела, централизованное удаление секретов из логов, correlation ID и allowlist ресурсов. Любая операция, меняющая данные, требует отдельной авторизации и идемпотентности.
Готовый промпт для проверки
Выполни только одну задачу на данных ниже.
Не добавляй факты, которых нет во входе.
Если обязательного значения нет, верни MISSING_FIELD.
Соблюдай указанный формат буквально, без Markdown и пояснений.
Вход: {CONTROL_INPUT}
Ожидаемые маркеры: {EXPECTED_MARKERS}
Промпт — воспроизводимый fixture, а не средство безопасности. JSON Schema, проверка типов, авторизация tool arguments и фильтрация результата выполняются кодом. Инструкцию из загруженного документа нельзя повышать до системной команды.
Как проверить результат
- модель batch-compatible
- payload меньше 10 MB
- references уникальны
- polling ограничен timeout
- responses+errors равны входу
Создайте журнал case_id | input_hash | model | parameters | expected | actual | pass. Для latency отдельно измеряйте time to first token, полное время p50/p95 и процент ошибок. Сравнивайте варианты на одинаковых входах, с одной моделью и фиксированными параметрами.
Нагрузку повышайте ступенчато от одного параллельного запроса. Длина входа и максимальный вывод остаются постоянными. Иначе нельзя понять, вызвано ухудшение rate limit, длиной prompt или моделью. Повторный прогон после прогрева не смешивают с холодным baseline.
Типичные ошибки и что не делать
- Отправить payload 10 MB или больше.
- Потерять request_id после первого ответа.
- Считать финальный HTTP 200 доказательством успеха каждой строки.
Не повторяйте 400, 401, 403 и 404 как временные ошибки: исправьте payload, токен, permissions или resource ID. Для 429 и отдельных 5xx используйте ограниченный retry budget, exponential backoff и jitter. Бесконечные повторы усиливают перегрузку.
Не доверяйте тексту модели как разрешению на оплату, удаление или публикацию. Tool name проверяют по allowlist, arguments — по схеме, объект — по ACL текущего пользователя. Чувствительные операции требуют явного подтверждения и audit trail без секретов.
Регрессионная проверка
После смены модели, prompt, JSON Schema, Wrangler, SDK, binding или gateway повторите весь набор. Сравнивайте техническую успешность, бизнес-PASS, p95 latency и число ручных исправлений. Улучшение одной метрики не доказывает готовность к релизу.
Для A/B используйте стабильное разбиение по case_id и одинаковые входы. Сохраняйте дату проверки: Cloudflare обновляет модели, функции и limits, поэтому пример нельзя считать вечной гарантией поддержки.
FAQ
Достаточно ли HTTP 200?
Нет. Проверьте success, errors, форму result и предметный критерий.
Где хранить API token?
Только на backend — в переменной окружения или менеджере секретов.
Можно ли взять любое имя модели?
Нет. Используйте полный актуальный model ID из Workers AI Models catalog.
Нужно ли повторять тест после обновления?
Да. Смена модели, Wrangler, SDK, prompt или схемы требует regression-прогона.
Официальный источник
Частые вопросы
Достаточно ли HTTP 200?
Нет, проверьте success, errors и предметный результат.
Можно ли хранить API token во frontend?
Нет, постоянный токен остаётся на backend.
Нужно ли проверять model ID?
Да, используйте актуальный Workers AI Models catalog.
Нужен ли отрицательный тест?
Да, он проверяет безопасный отказ.
Читайте также
Как настроить function calling в Cloudflare Workers AI безопасно
Traditional function calling в Workers AI: описание tools, JSON-аргументы, allowlist, schema validation, авторизация и двухшаговый вызов внешнего API.
Как подключить AI Gateway к Cloudflare Workers AI
Маршрутизация Workers AI через AI Gateway: cf-aig-gateway-id, Bearer token, прежний ai/v1 endpoint, проверка логов и безопасная передача metadata.
Как подключить OpenAI SDK к Cloudflare Workers AI
OpenAI-compatible endpoint Workers AI: правильный baseURL с Account ID, Cloudflare API token, chat.completions, responses и embeddings без ложной совместимости.
Комментарии
Пока тихо. Скажите первое слово