Поделиться через


Начало работы с пакетными развертываниями Azure OpenAI

API пакетной службы Azure OpenAI предназначен для эффективной обработки крупномасштабных и больших объемов задач. Обработка асинхронных групп запросов с отдельной квотой, с целевым временем обработки в 24 часа и на 50% меньше затрат, чем глобальный стандарт. При пакетной обработке вместо отправки одного запроса за раз вы отправляете большое количество запросов в одном файле. Глобальные пакетные запросы имеют отдельную квоту токенов в очереди, что позволяет избежать сбоев в работе ваших онлайн-загрузок.

Основные примеры таких ситуаций:

  • Обработка крупномасштабных данных: быстро анализируйте обширные наборы данных параллельно.

  • Создание содержимого: создание больших объемов текста, таких как описания продуктов или статьи.

  • Проверка и сводка документов. Автоматизация проверки и сводки длинных документов.

  • Автоматизация поддержки клиентов. Обработка многочисленных запросов одновременно для ускорения ответов.

  • Извлечение и анализ данных. Извлечение и анализ данных из огромных объемов неструктурированных данных.

  • Задачи обработки естественного языка (NLP): выполнение таких задач, как анализ тональности или перевод больших наборов данных.

  • Маркетинг и персонализация: Генерация персонализированного контента и рекомендаций в большом масштабе.

Подсказка

ru-RU: Если ваши пакетные задания настолько велики, что вы достигли предела количества поставленных токенов даже после максимального использования квоты для вашего развертывания, некоторые регионы теперь поддерживают новую функцию, позволяющую ставить в очередь несколько пакетных заданий с экспоненциальным увеличением задержки.

После того как квота на обработанные токены станет доступна, можно создать следующее пакетное задание и запустить его автоматически. Дополнительные сведения см. в статье об автоматизации повторных попыток больших пакетных заданий с экспоненциальным обратным выходом.

Это важно

Мы стремимся обрабатывать пакетные запросы в течение 24 часов; Срок действия заданий, которые занимают больше времени, не истекают. Задание можно отменить в любое время. При отмене задания все оставшиеся работы отменяются и возвращаются все уже завершенные работы. С вас будет взиматься плата за любую выполненную работу.

Данные, хранящиеся в состоянии покоя, остаются в указанном географическом регионе Azure, тогда как данные могут обрабатываться для выполнения выводов в любой локации Azure OpenAI.  Дополнительные сведения о местонахождении данных. 

Поддержка пакетной обработки

Доступность глобальной пакетной модели

Регион o3, 2025-04-16 o4-mini, 2025-04-16 gpt-4.1, 2025-04-14 gpt-4.1-nano, 2025-04-14 gpt-4.1-mini, 2025-04-14 o3-mini, 2025-01-31 gpt-4o, 2024-05-13 gpt-4o, 2024-08-06 gpt-4o, 2024-11-20 gpt-4o-mini, 2024-07-18
австралиявосток
Бразильский Юг
Канада Восток
Истус
eastus2
francecentral
Германия-запад-центр
japaneast
koreacentral
northcentralus
Норвегия Восток
Польша Центральная
Южная Африка-север
СаутЦентралус
Южная Индия
SwedenCentral
Швейцария север
UKSOUTH
Западная Европа
Вестус
westus3

Регистрация требуется для доступа к o3-mini. Для получения дополнительной информации см. наше руководство по моделям рассуждений.

Следующие модели поддерживают глобальную пакетную обработку:

Модель Версия Формат входных данных
o3-mini 31.01.2025 текст
gpt-4o 2024-08-06 текст + изображение
gpt-4o-mini 18.07.2024 текст + изображение
gpt-4o 13.05.2024 текст + изображение

поддержка API

Версия API
Последний выпуск API общедоступной версии: 2024-10-21
Последний поддерживаемый выпуск API предварительной версии: 2025-04-01-preview

Замечание

Хотя глобальная пакетная служба поддерживает более старые версии API, некоторые модели требуют более новых версий API предварительной версии. Например, o3-mini не поддерживается 2024-10-21 , так как он был выпущен после этой даты. Чтобы получить доступ к новым моделям с использованием глобальной пакетной обработки, воспользуйтесь последней предварительной версией API.

Поддержка функций

В настоящее время не поддерживается следующее:

  • Интеграция с API помощников.
  • Интеграция с Azure OpenAI On Your Data feature.

Пакетное развертывание

Замечание

На портале Azure AI Foundry типы пакетного развертывания будут отображаться как Global-Batch и Data Zone Batch. Дополнительные сведения о типах развертывания Azure OpenAI см. в руководстве по типам развертывания.

Снимок экрана: диалоговое окно развертывания модели на портале Azure AI Foundry с выделенным типом развертывания Global-Batch.

Подсказка

Мы рекомендуем включить динамическую квоту для всех глобальных развертываний моделей пакетного режима, чтобы помочь избежать сбоев в работе из-за недостаточной квоты на поставленные в очередь токены. Использование динамической квоты позволяет развертыванию выгодно использовать большую квоту при наличии дополнительных ресурсов. Если динамическая квота отключена, развертывание сможет обрабатывать запросы только в пределах ограничения токенов, определенного при создании развертывания.

Предпосылки

Подготовка пакетного файла

Подобно тонкой настройке, глобальная пакетная обработка использует файлы в формате JSON lines (.jsonl). Ниже приведены некоторые примеры файлов с различными типами поддерживаемого содержимого:

Формат входных данных

{"custom_id": "task-0", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was Microsoft founded?"}]}}
{"custom_id": "task-1", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was the first XBOX released?"}]}}
{"custom_id": "task-2", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "What is Altair Basic?"}]}}

Требуется custom_id , чтобы определить, какой отдельный пакетный запрос соответствует заданному ответу. Ответы не будут возвращены в том же порядке, что и порядок, определённый в .jsonl пакетном файле.

model Атрибут должен быть установлен таким образом, чтобы совпадать с именем глобального развертывания Batch, которое вы хотите использовать для получения ответов на запросы вывода.

Это важно

Атрибут model должен быть установлен в соответствии с именем развертывания Global Batch, на которое вы хотите направить запросы для получения результатов. Одно и то же имя развертывания глобальной пакетной модели должно присутствовать в каждой строке пакетного файла. Если вы хотите использовать другое развертывание, необходимо сделать это в отдельном пакетном файле или задании.

Для оптимальной производительности рекомендуется отправлять большие файлы для пакетной обработки, а не большое количество небольших файлов с несколькими строками в каждом файле.

Создание входного файла

В этой статье мы создадим файл с именем test.jsonl и скопируйм содержимое из стандартного блока входного кода выше в файл. Вам потребуется изменить и добавить имя глобального пакетного развертывания в каждую строку файла.

Отправка пакетного файла

После подготовки входного файла сначала необходимо отправить файл, чтобы затем запустить пакетное задание. Отправка файлов можно выполнять как программным способом, так и с помощью портала Azure AI Foundry. В этом примере демонстрируется отправка файла непосредственно в ресурс Azure OpenAI. Кроме того, можно настроить хранилище BLOB-объектов Azure для пакетной службы Azure OpenAI.

  1. Войдите на портал Azure AI Foundry.

  2. Выберите ресурс Azure OpenAI, в котором доступно развертывание глобальной пакетной модели.

  3. Выберите Пакетные задания>+Создать пакетные задания.

    Снимок экрана: интерфейс создания пакетного задания на портале Azure AI Foundry.

  4. В раскрывающемся списке в разделе Пакетные данные>Загрузить файлы> выберите Загрузить файл и укажите путь к файлу, созданному на предыдущем шаге test.jsonl>.

    Снимок экрана: интерфейс отправки файлов.

Создание пакетного задания

Нажмите кнопку "Создать", чтобы запустить пакетное задание.

Снимок экрана: интерфейс портала создания пакетного задания Azure AI Foundry.

Отслеживание хода выполнения пакетного задания

После создания задания можно отслеживать ход выполнения задания, выбрав идентификатор задания для последнего созданного задания. По умолчанию вы перейдете на страницу состояния для последнего созданного пакетного задания.

Снимок экрана: идентификатор пакетного задания для задания, который в настоящее время проходит проверку.

Состояние задания можно отслеживать на панели справа:

Снимок экрана: состояние пакетного задания на портале Azure AI Foundry.

Получение выходного файла пакетного задания

После завершения задания или достижения им конечного состояния, будет создан файл ошибок и выходной файл, которые можно скачать для проверки, нажав соответствующую кнопку с иконкой стрелки вниз.

Снимок экрана: выходные данные пакетного задания и файлы ошибок, доступные для скачивания.

Отмена пакета

Отменяет выполняющееся пакетное задание. Пакет будет находиться в состоянии cancelling до 10 минут, прежде чем перейти в cancelled, где в выходном файле будут доступны частичные результаты (если таковые имеются).

Снимок экрана: кнопка отмены пакетного задания на портале Azure AI Foundry.

Предпосылки

Действия, описанные в этой статье, предназначены для последовательного выполнения в Jupyter Notebook. По этой причине мы создадим экземпляр клиента Azure OpenAI сразу в начале примеров. Если вы хотите выполнить шаг в неправильном порядке, часто необходимо настроить клиент Azure OpenAI в рамках этого вызова.

Даже если у вас уже установлена библиотека OpenAI Python, может потребоваться обновить установку до последней версии:

!pip install openai --upgrade

Подготовка пакетного файла

Подобно тонкой настройке, глобальная пакетная обработка использует файлы в формате JSON lines (.jsonl). Ниже приведены некоторые примеры файлов с различными типами поддерживаемого содержимого:

Формат входных данных

{"custom_id": "task-0", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was Microsoft founded?"}]}}
{"custom_id": "task-1", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was the first XBOX released?"}]}}
{"custom_id": "task-2", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "What is Altair Basic?"}]}}

Требуется custom_id , чтобы определить, какой отдельный пакетный запрос соответствует заданному ответу. Ответы не будут возвращены в том же порядке, что и порядок, определённый в .jsonl пакетном файле.

model Атрибут должен быть установлен таким образом, чтобы совпадать с именем глобального развертывания Batch, которое вы хотите использовать для получения ответов на запросы вывода.

Это важно

Атрибут model должен быть установлен в соответствии с именем развертывания Global Batch, на которое вы хотите направить запросы для получения результатов. Одно и то же имя развертывания глобальной пакетной модели должно присутствовать в каждой строке пакетного файла. Если вы хотите использовать другое развертывание, необходимо сделать это в отдельном пакетном файле или задании.

Для оптимальной производительности рекомендуется отправлять большие файлы для пакетной обработки, а не большое количество небольших файлов с несколькими строками в каждом файле.

Создание входного файла

В этой статье мы создадим файл с именем test.jsonl и скопируйм содержимое из стандартного блока входного кода выше в файл. Вам потребуется изменить и добавить имя глобального пакетного развертывания в каждую строку файла. Сохраните этот файл в том же каталоге, где вы выполняете вашу записную книжку Jupyter.

Отправка пакетного файла

После подготовки входного файла сначала необходимо отправить файл, чтобы затем запустить пакетное задание. Отправка файлов можно выполнять как программным способом, так и с помощью портала Azure AI Foundry. В этом примере демонстрируется отправка файла непосредственно в ресурс Azure OpenAI. Кроме того, можно настроить хранилище BLOB-объектов Azure для пакетной службы Azure OpenAI.

import os
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  azure_ad_token_provider=token_provider,
  api_version="2025-04-01-preview"
)

# Upload a file with a purpose of "batch"
file = client.files.create(
  file=open("test.jsonl", "rb"), 
  purpose="batch",
  extra_body={"expires_after":{"seconds": 1209600, "anchor": "created_at"}} # Optional you can set to a number between 1209600-2592000. This is equivalent to 14-30 days
)


print(file.model_dump_json(indent=2))

print(f"File expiration: {datetime.fromtimestamp(file.expires_at) if file.expires_at is not None else 'Not set'}")

file_id = file.id

Рассмотрим проект улучшения: при отмене комментария и добавлении extra_body={"expires_after":{"seconds": 1209600, "anchor": "created_at"}} вы устанавливаете срок действия нашего загружаемого файла на 14 дней. Максимальное ограничение составляет 500 пакетных файлов на один ресурс, если срок действия не установлен. Установив значение для срока действия, количество пакетных файлов на ресурс увеличивается до 10 000 файлов на ресурс.

Выходные данные:

{
  "id": "file-655111ec9cfc44489d9af078f08116ef",
  "bytes": 176064,
  "created_at": 1743391067,
  "filename": "test.jsonl",
  "object": "file",
  "purpose": "batch",
  "status": "processed",
  "expires_at": 1744600667,
  "status_details": null
}
File expiration: 2025-04-13 23:17:47

Создание пакетного задания

После успешной отправки файла можно отправить файл для пакетной обработки.

# Submit a batch job with the file
batch_response = client.batches.create(
    input_file_id=file_id,
    endpoint="/chat/completions",
    completion_window="24h",
    extra_body={"output_expires_after":{"seconds": 1209600, "anchor": "created_at"}} # Optional you can set to a number between 1209600-2592000. This is equivalent to 14-30 days
)


# Save batch ID for later use
batch_id = batch_response.id

print(batch_response.model_dump_json(indent=2))

Максимальное ограничение на 500 файлов по умолчанию для каждого ресурса также распространяется на выходные файлы. Здесь вы можете раскомментировать эту строку, чтобы добавить extra_body={"output_expires_after":{"seconds": 1209600, "anchor": "created_at"}}, и ваши выходные файлы истекали через 14 дней. Установив значение для срока действия, количество пакетных файлов на ресурс увеличивается до 10 000 файлов на ресурс.

Замечание

В настоящее время окно завершения должно быть установлено на 24h. Если вы установите любое значение, кроме 24h, ваша задача будет провалена. Задания, выполняемые дольше 24 часов, будут продолжать выполняться до отмены.

Выходные данные:

{
  "id": "batch_6caaf24d-54a5-46be-b1b7-518884fcbdde",
  "completion_window": "24h",
  "created_at": 1722476583,
  "endpoint": null,
  "input_file_id": "file-655111ec9cfc44489d9af078f08116ef",
  "object": "batch",
  "status": "validating",
  "cancelled_at": null,
  "cancelling_at": null,
  "completed_at": null,
  "error_file_id": null,
  "errors": null,
  "expired_at": null,
  "expires_at": 1722562983,
  "failed_at": null,
  "finalizing_at": null,
  "in_progress_at": null,
  "metadata": null,
  "output_file_id": null,
  "request_counts": {
    "completed": 0,
    "failed": 0,
    "total": 0
  }
}

Если ваши пакеты заданий настолько велики, что вы достигаете предела количества токенов в очереди даже после максимального использования квоты вашего развертывания, некоторые регионы теперь поддерживают новую функцию быстрого отказа, которая позволяет поставить в очередь несколько пакетных заданий с экспоненциальной задержкой, чтобы после завершения одного большого задания следующее автоматически запускалось. Чтобы узнать больше о том, какие регионы поддерживают эту функцию и как адаптировать ваш код для использования её возможностей, смотрите очередь коллективных задач.

Отслеживание хода выполнения пакетного задания

После успешного создания пакетного задания можно отслеживать ход выполнения в Студии или программно. При проверке прогресса пакетной обработки мы рекомендуем ждать не менее 60 секунд между каждым запросом статуса.

import time
import datetime 

status = "validating"
while status not in ("completed", "failed", "canceled"):
    time.sleep(60)
    batch_response = client.batches.retrieve(batch_id)
    status = batch_response.status
    print(f"{datetime.datetime.now()} Batch Id: {batch_id},  Status: {status}")

if batch_response.status == "failed":
    for error in batch_response.errors.data:  
        print(f"Error code {error.code} Message {error.message}")

Выходные данные:

2024-07-31 21:48:32.556488 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: validating
2024-07-31 21:49:39.221560 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: in_progress
2024-07-31 21:50:53.383138 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: in_progress
2024-07-31 21:52:07.274570 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: in_progress
2024-07-31 21:53:21.149501 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: finalizing
2024-07-31 21:54:34.572508 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: finalizing
2024-07-31 21:55:35.304713 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: finalizing
2024-07-31 21:56:36.531816 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: finalizing
2024-07-31 21:57:37.414105 Batch Id: batch_6caaf24d-54a5-46be-b1b7-518884fcbdde,  Status: completed

Возможны следующие значения состояния:

Статус Описание
validating Входной файл проверяется до начала пакетной обработки.
failed Входной файл не прошёл процесс проверки.
in_progress Входной файл был успешно проверен и пакет запущен в данный момент.
finalizing Процесс завершился, и результаты подготавливаются.
completed Пакет завершен, и результаты готовы.
expired Пакет не удалось завершить в течение 24-часового периода.
cancelling Пакет обрабатывается cancelled (Это может занять до 10 минут, чтобы вступить в силу.)
cancelled Пакет был cancelled.

Чтобы проверить сведения о состоянии задания, можно выполнить следующее:

print(batch_response.model_dump_json(indent=2))

Выходные данные:

{
  "id": "batch_6caaf24d-54a5-46be-b1b7-518884fcbdde",
  "completion_window": "24h",
  "created_at": 1722476583,
  "endpoint": null,
  "input_file_id": "file-9f3a81d899b4442f98b640e4bc3535dd",
  "object": "batch",
  "status": "completed",
  "cancelled_at": null,
  "cancelling_at": null,
  "completed_at": 1722477429,
  "error_file_id": "file-c795ae52-3ba7-417d-86ec-07eebca57d0b",
  "errors": null,
  "expired_at": null,
  "expires_at": 1722562983,
  "failed_at": null,
  "finalizing_at": 1722477177,
  "in_progress_at": null,
  "metadata": null,
  "output_file_id": "file-3304e310-3b39-4e34-9f1c-e1c1504b2b2a",
  "request_counts": {
    "completed": 3,
    "failed": 0,
    "total": 3
  }
}

Обратите внимание, что есть как error_file_id, так и отдельный output_file_id. error_file_id Используйте эту возможность для отладки любых проблем, возникающих при выполнении пакетного задания.

Получение выходного файла пакетного задания

import json

output_file_id = batch_response.output_file_id

if not output_file_id:
    output_file_id = batch_response.error_file_id

if output_file_id:
    file_response = client.files.content(output_file_id)
    raw_responses = file_response.text.strip().split('\n')  

    for raw_response in raw_responses:  
        json_response = json.loads(raw_response)  
        formatted_json = json.dumps(json_response, indent=2)  
        print(formatted_json)

Выходные данные:

Для краткости мы включаем только один ответ на завершение чата. Если вы выполните действия, описанные в этой статье, у вас должно быть три ответа, аналогичные приведенному ниже:

{
  "custom_id": "task-0",
  "response": {
    "body": {
      "choices": [
        {
          "content_filter_results": {
            "hate": {
              "filtered": false,
              "severity": "safe"
            },
            "self_harm": {
              "filtered": false,
              "severity": "safe"
            },
            "sexual": {
              "filtered": false,
              "severity": "safe"
            },
            "violence": {
              "filtered": false,
              "severity": "safe"
            }
          },
          "finish_reason": "stop",
          "index": 0,
          "logprobs": null,
          "message": {
            "content": "Microsoft was founded on April 4, 1975, by Bill Gates and Paul Allen in Albuquerque, New Mexico.",
            "role": "assistant"
          }
        }
      ],
      "created": 1722477079,
      "id": "chatcmpl-9rFGJ9dh08Tw9WRKqaEHwrkqRa4DJ",
      "model": "gpt-4o-2024-05-13",
      "object": "chat.completion",
      "prompt_filter_results": [
        {
          "prompt_index": 0,
          "content_filter_results": {
            "hate": {
              "filtered": false,
              "severity": "safe"
            },
            "jailbreak": {
              "filtered": false,
              "detected": false
            },
            "self_harm": {
              "filtered": false,
              "severity": "safe"
            },
            "sexual": {
              "filtered": false,
              "severity": "safe"
            },
            "violence": {
              "filtered": false,
              "severity": "safe"
            }
          }
        }
      ],
      "system_fingerprint": "fp_a9bfe9d51d",
      "usage": {
        "completion_tokens": 24,
        "prompt_tokens": 27,
        "total_tokens": 51
      }
    },
    "request_id": "660b7424-b648-4b67-addc-862ba067d442",
    "status_code": 200
  },
  "error": null
}

Дополнительные пакетные команды

Отмена пакета

Отменяет выполняющееся пакетное задание. Пакет будет находиться в состоянии cancelling до 10 минут, прежде чем перейти в cancelled, где в выходном файле будут доступны частичные результаты (если таковые имеются).

client.batches.cancel("batch_abc123") # set to your batch_id for the job you want to cancel

Список партии

Вывод списка пакетных заданий для определенного ресурса Azure OpenAI.

client.batches.list()

Методы перечисления в библиотеке Python разбиены на страницы.

Чтобы перечислить все задания:

all_jobs = []
# Automatically fetches more pages as needed.
for job in client.batches.list(
    limit=20,
):
    # Do something with job here
    all_jobs.append(job)
print(all_jobs)

Пакет списка (предварительная версия)

Используйте REST API для перечисления всех пакетных заданий с дополнительными параметрами сортировки и фильтрации.

В приведенных ниже примерах мы предоставляем generate_time_filter функцию, чтобы упростить создание фильтра. Если вы не хотите использовать эту функцию, формат строки фильтра будет выглядеть следующим created_at gt 1728860560 and status eq 'Completed'образом.

import requests
import json
from datetime import datetime, timedelta
from azure.identity import DefaultAzureCredential

token_credential = DefaultAzureCredential()
token = token_credential.get_token('https://cognitiveservices.azure.com/.default')

endpoint = "https://{YOUR_RESOURCE_NAME}.openai.azure.com/"
api_version = "2025-03-01-preview"
url = f"{endpoint}openai/batches"
order = "created_at asc"
time_filter =  lambda: generate_time_filter("past 8 hours")

# Additional filter examples:
#time_filter =  lambda: generate_time_filter("past 1 day")
#time_filter =  lambda: generate_time_filter("past 3 days", status="Completed")

def generate_time_filter(time_range, status=None):
    now = datetime.now()
    
    if 'day' in time_range:
        days = int(time_range.split()[1])
        start_time = now - timedelta(days=days)
    elif 'hour' in time_range:
        hours = int(time_range.split()[1])
        start_time = now - timedelta(hours=hours)
    else:
        raise ValueError("Invalid time range format. Use 'past X day(s)' or 'past X hour(s)'")
    
    start_timestamp = int(start_time.timestamp())
    
    filter_string = f"created_at gt {start_timestamp}"
    
    if status:
        filter_string += f" and status eq '{status}'"
    
    return filter_string

filter = time_filter()

headers = {'Authorization': 'Bearer ' + token.token}

params = {
    "api-version": api_version,
    "$filter": filter,
    "$orderby": order
}

response = requests.get(url, headers=headers, params=params)

json_data = response.json()

if response.status_code == 200:
    print(json.dumps(json_data, indent=2))
else:
    print(f"Request failed with status code: {response.status_code}")
    print(response.text)  

Выходные данные:

{
  "data": [
    {
      "cancelled_at": null,
      "cancelling_at": null,
      "completed_at": 1729011896,
      "completion_window": "24h",
      "created_at": 1729011128,
      "error_file_id": "file-472c0626-4561-4327-9e4e-f41afbfb30e6",
      "expired_at": null,
      "expires_at": 1729097528,
      "failed_at": null,
      "finalizing_at": 1729011805,
      "id": "batch_4ddc7b60-19a9-419b-8b93-b9a3274b33b5",
      "in_progress_at": 1729011493,
      "input_file_id": "file-f89384af0082485da43cb26b49dc25ce",
      "errors": null,
      "metadata": null,
      "object": "batch",
      "output_file_id": "file-62bebde8-e767-4cd3-a0a1-28b214dc8974",
      "request_counts": {
        "total": 3,
        "completed": 2,
        "failed": 1
      },
      "status": "completed",
      "endpoint": "/chat/completions"
    },
    {
      "cancelled_at": null,
      "cancelling_at": null,
      "completed_at": 1729016366,
      "completion_window": "24h",
      "created_at": 1729015829,
      "error_file_id": "file-85ae1971-9957-4511-9eb4-4cc9f708b904",
      "expired_at": null,
      "expires_at": 1729102229,
      "failed_at": null,
      "finalizing_at": 1729016272,
      "id": "batch_6287485f-50fc-4efa-bcc5-b86690037f43",
      "in_progress_at": 1729016126,
      "input_file_id": "file-686746fcb6bc47f495250191ffa8a28e",
      "errors": null,
      "metadata": null,
      "object": "batch",
      "output_file_id": "file-04399828-ae0b-4825-9b49-8976778918cb",
      "request_counts": {
        "total": 3,
        "completed": 2,
        "failed": 1
      },
      "status": "completed",
      "endpoint": "/chat/completions"
    }
  ],
  "first_id": "batch_4ddc7b60-19a9-419b-8b93-b9a3274b33b5",
  "has_more": false,
  "last_id": "batch_6287485f-50fc-4efa-bcc5-b86690037f43"
}

Постановка пакетных заданий в очередь

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

Старое поведение:

  1. Задания с большим пакетом уже выполняются и используют все доступные токены для вашего развертывания.
  2. Новая пакетная задача отправлена.
  3. Новая пакетная задача переходит в фазу проверки, которая может длиться до нескольких минут.
  4. Количество токенов для новой задачи проверяется на соответствие доступной квоте.
  5. Новая пакетная задача завершилась с ошибкой: превышено допустимое количество токенов.

Новое поведение:

  1. Исполняется/ются крупные задачи пакета, которые уже используют все доступные токены для вашего развертывания.
  2. Новое пакетное задание отправлено.
  3. Приблизительное количество токенов нового задания непосредственно сравнивается с текущей доступной квотой пакетных заданий, что позволяет быстрее и легче программно обрабатывать повторные попытки.

Поддержка регионов

Следующие регионы поддерживают новое поведение быстрого отказа:

  • австралиявосток
  • Истус
  • Германия-запад-центр
  • северная италия
  • northcentralus
  • Польша Центральная
  • SwedenCentral
  • Швейцария север
  • eastus2
  • Вестус

Код ниже демонстрирует основные механизмы обработки поведения быстрого отказа для обеспечения автоматизации повторных попыток и постановки задач в очередь с экспоненциальным увеличением времени задержки.

В зависимости от размера ваших пакетных заданий, вам может понадобиться значительно увеличить max_retries или внести дополнительные изменения в этот пример.

import time
from openai import BadRequestError

max_retries = 10
retries = 0
initial_delay = 5
delay = initial_delay

while True:
    try:
        batch_response = client.batches.create(
            input_file_id=file_id,
            endpoint="/chat/completions",
            completion_window="24h",
        )
        
        # Save batch ID for later use
        batch_id = batch_response.id
        
        print(f"✅ Batch created successfully after {retries} retries")
        print(batch_response.model_dump_json(indent=2))
        break  
        
    except BadRequestError as e:
        error_message = str(e)
        
        # Check if it's a token limit error
        if 'token_limit_exceeded' in error_message:
            retries += 1
            if retries >= max_retries:
                print(f"❌ Maximum retries ({max_retries}) reached. Giving up.")
                raise
            
            print(f"⏳ Token limit exceeded. Waiting {delay} seconds before retry {retries}/{max_retries}...")
            time.sleep(delay)
            
            # Exponential backoff - increase delay for next attempt
            delay *= 2
        else:
            # If it's a different error, raise it immediately
            print(f"❌ Encountered non-token limit error: {error_message}")
            raise

Выходные данные:

⏳ Token limit exceeded. Waiting 5 seconds before retry 1/10...
⏳ Token limit exceeded. Waiting 10 seconds before retry 2/10...
⏳ Token limit exceeded. Waiting 20 seconds before retry 3/10...
⏳ Token limit exceeded. Waiting 40 seconds before retry 4/10...
⏳ Token limit exceeded. Waiting 80 seconds before retry 5/10...
⏳ Token limit exceeded. Waiting 160 seconds before retry 6/10...
⏳ Token limit exceeded. Waiting 320 seconds before retry 7/10...
✅ Batch created successfully after 7 retries
{
  "id": "batch_1e1e7b9f-d4b4-41fa-bd2e-8d2ec50fb8cc",
  "completion_window": "24h",
  "created_at": 1744402048,
  "endpoint": "/chat/completions",
  "input_file_id": "file-e2ba4ccaa4a348e0976c6fe3c018ea92",
  "object": "batch",
  "status": "validating",
  "cancelled_at": null,
  "cancelling_at": null,
  "completed_at": null,
  "error_file_id": "",
  "errors": null,
  "expired_at": null,
  "expires_at": 1744488444,
  "failed_at": null,
  "finalizing_at": null,
  "in_progress_at": null,
  "metadata": null,
  "output_file_id": "",
  "request_counts": {
    "completed": 0,
    "failed": 0,
    "total": 0
  }
}

Предпосылки

Подготовка пакетного файла

Подобно тонкой настройке, глобальная пакетная обработка использует файлы в формате JSON lines (.jsonl). Ниже приведены некоторые примеры файлов с различными типами поддерживаемого содержимого:

Формат входных данных

{"custom_id": "task-0", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was Microsoft founded?"}]}}
{"custom_id": "task-1", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "When was the first XBOX released?"}]}}
{"custom_id": "task-2", "method": "POST", "url": "/chat/completions", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "messages": [{"role": "system", "content": "You are an AI assistant that helps people find information."}, {"role": "user", "content": "What is Altair Basic?"}]}}

Требуется custom_id , чтобы определить, какой отдельный пакетный запрос соответствует заданному ответу. Ответы не будут возвращены в том же порядке, что и порядок, определённый в .jsonl пакетном файле.

model Атрибут должен быть установлен таким образом, чтобы совпадать с именем глобального развертывания Batch, которое вы хотите использовать для получения ответов на запросы вывода.

Это важно

Атрибут model должен быть установлен в соответствии с именем развертывания Global Batch, на которое вы хотите направить запросы для получения результатов. Одно и то же имя развертывания глобальной пакетной модели должно присутствовать в каждой строке пакетного файла. Если вы хотите использовать другое развертывание, необходимо сделать это в отдельном пакетном файле или задании.

Для оптимальной производительности рекомендуется отправлять большие файлы для пакетной обработки, а не большое количество небольших файлов с несколькими строками в каждом файле.

Создание входного файла

В этой статье мы создадим файл с именем test.jsonl и скопируйм содержимое из стандартного блока входного кода выше в файл. Вам потребуется изменить и добавить имя глобального пакетного развертывания в каждую строку файла.

Отправка пакетного файла

После подготовки входного файла сначала необходимо отправить файл, чтобы затем запустить пакетное задание. Отправка файлов можно выполнять как программным способом, так и с помощью портала Azure AI Foundry. В этом примере демонстрируется отправка файла непосредственно в ресурс Azure OpenAI. Кроме того, можно настроить хранилище BLOB-объектов Azure для пакетной службы Azure OpenAI.

Это важно

Используйте ключи API с осторожностью. Не включайте ключ API непосредственно в код и никогда не публикуйте его. Если вы используете ключ API, сохраните его безопасно в Azure Key Vault. Дополнительные сведения об использовании ключей API безопасно в приложениях см. в разделе "Ключи API" с помощью Azure Key Vault.

Дополнительные сведения о безопасности служб ИИ см. в статье "Проверка подлинности запросов к службам ИИ Azure".

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files?api-version=2025-03-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=batch" \
  -F "file=@C:\\batch\\test.jsonl;type=application/json" \
  -F "expires_after.seconds=1209600" \
  -F "expires_after.anchor=created_at"

Приведенный выше код предполагает определенный путь к файлу test.jsonl. Настройте этот путь к файлу по мере необходимости для локальной системы.

Добавив необязательные параметры "expires_after.seconds=1209600" и "expires_after.anchor=created_at", вы установите срок действия загружаемого файла через 14 дней. Максимальное ограничение составляет 500 пакетных файлов на один ресурс, если срок действия не установлен. Установив значение для срока действия, количество пакетных файлов на ресурс увеличивается до 10 000 файлов на ресурс. Вы можете установить значение в диапазоне от 1209600 до 2592000. Это эквивалентно 14-30 дням.

Выходные данные:

{
  "status": "processed",
  "bytes": 817,
  "purpose": "batch",
  "filename": "test.jsonl",
  "expires_at": 1744607747,
  "id": "file-7733bc35e32841e297a62a9ee50b3461",
  "created_at": 1743398147,
  "object": "file"
}

Отслеживание состояния отправки файлов

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

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files/{file-id}?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Выходные данные:

{
  "status": "processed",
  "bytes": 686,
  "purpose": "batch",
  "filename": "test.jsonl",
  "expires_at": 1744607747,
  "id": "file-7733bc35e32841e297a62a9ee50b3461",
  "created_at": 1721408291,
  "object": "file"
}

Создание пакетного задания

После успешной отправки файла можно отправить файл для пакетной обработки.

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input_file_id": "file-abc123",
    "endpoint": "/chat/completions",
    "completion_window": "24h",
    "output_expires_after": {
        "seconds": 1209600
    },
    "anchor": "created_at"
  }'

Максимальное ограничение на 500 файлов по умолчанию для каждого ресурса также распространяется на выходные файлы. Здесь вы можете при необходимости добавить "output_expires_after":{"seconds": 1209600}, и "anchor": "created_at", чтобы ваши выходные файлы стали недействительными через 14 дней. Установив значение для срока действия, количество пакетных файлов на ресурс увеличивается до 10 000 файлов на ресурс.

Замечание

В настоящее время окно завершения должно быть установлено на 24h. Если вы установите любое значение, кроме 24h, ваша задача будет провалена. Задания, выполняемые дольше 24 часов, будут продолжать выполняться до отмены.

Выходные данные:

{
  "cancelled_at": null,
  "cancelling_at": null,
  "completed_at": null,
  "completion_window": "24h",
  "created_at": "2024-07-19T17:13:57.2491382+00:00",
  "error_file_id": null,
  "expired_at": null,
  "expires_at": "2024-07-20T17:13:57.1918498+00:00",
  "failed_at": null,
  "finalizing_at": null,
  "id": "batch_fe3f047a-de39-4068-9008-346795bfc1db",
  "in_progress_at": null,
  "input_file_id": "file-21006e70789246658b86a1fc205899a4",
  "errors": null,
  "metadata": null,
  "object": "batch",
  "output_file_id": null,
  "request_counts": {
    "total": null,
    "completed": null,
    "failed": null
  },
  "status": "Validating"
}

Отслеживание хода выполнения пакетного задания

После успешного создания пакетного задания можно отслеживать ход выполнения в Студии или программно. При проверке прогресса пакетной обработки мы рекомендуем ждать не менее 60 секунд между каждым запросом статуса.

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches/{batch_id}?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Выходные данные:

{
  "cancelled_at": null,
  "cancelling_at": null,
  "completed_at": null,
  "completion_window": "24h",
  "created_at": "2024-07-19T17:33:29.1619286+00:00",
  "error_file_id": null,
  "expired_at": null,
  "expires_at": "2024-07-20T17:33:29.1578141+00:00",
  "failed_at": null,
  "finalizing_at": null,
  "id": "batch_e0a7ee28-82c4-46a2-a3a0-c13b3c4e390b",
  "in_progress_at": null,
  "input_file_id": "file-c55ec4e859d54738a313d767718a2ac5",
  "errors": null,
  "metadata": null,
  "object": "batch",
  "output_file_id": null,
  "request_counts": {
    "total": null,
    "completed": null,
    "failed": null
  },
  "status": "Validating"
}

Возможны следующие значения состояния:

Статус Описание
validating Входной файл проверяется до начала пакетной обработки.
failed Входной файл не прошёл процесс проверки.
in_progress Входной файл был успешно проверен и пакет запущен в данный момент.
finalizing Процесс завершился, и результаты подготавливаются.
completed Пакет завершен, и результаты готовы.
expired Пакет не удалось завершить в течение 24-часового периода.
cancelling Пакет обрабатывается cancelled (это может занять до 10 минут, чтобы вступить в действие.)
cancelled Пакет был cancelled.

Получение выходного файла пакетного задания

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files/{output_file_id}/content?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" > batch_output.jsonl

Дополнительные пакетные команды

Отмена пакета

Отменяет выполняющееся пакетное задание. Пакет будет находиться в состоянии cancelling до 10 минут, прежде чем перейти в cancelled, где в выходном файле будут доступны частичные результаты (если таковые имеются).

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches/{batch_id}/cancel?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Список партии

Перечислить существующие пакетные задания для заданного ресурса Azure OpenAI.

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches?api-version=2025-03-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Вызов API списка разбит на страницы. Ответ содержит логическое значение has_more, указывающее, есть ли больше результатов для итерации.

Пакет списка (предварительная версия)

Используйте REST API для перечисления всех пакетных заданий с дополнительными параметрами сортировки и фильтрации.

curl "YOUR_RESOURCE_NAME.openai.azure.com/batches?api-version=2025-03-01-preview&$filter=created_at%20gt%201728773533%20and%20created_at%20lt%201729032733%20and%20status%20eq%20'Completed'&$orderby=created_at%20asc" \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Чтобы избежать ошибки, пробелы заменяются на URL rejected: Malformed input to a URL function.

Лимиты на партии

Название ограничения Значение ограничения
Максимальное количество файлов на ресурс 500
Максимальный размер входного файла 200 МБ
Максимальное количество запросов на файл 100 000

Квота на пакетную обработку

В таблице показан предел квоты партии. Значения квот для глобального пакета представлены в виде поставленных в очередь токенов. При отправке файла для пакетной обработки количество маркеров, присутствующих в файле, учитывается. До тех пор, пока пакетное задание не достигнет терминального состояния, эти токены будут учитываться против вашего общего лимита на очередь токенов.

Глобальная партия

Модель Соглашение Enterprise По умолчанию Ежемесячные подписки на основе кредитной карты Подписки MSDN Azure для учащихся, бесплатные пробные версии
gpt-4.1 5 B 200 М 50 М 90 K Не применимо
gpt-4.1 mini 15B 1 млрд 50 млн 90k Не применимо
gpt-4.1-nano 15 B 1 B 50 М 90 K Не применимо
gpt-4o 5 B 200 М 50 М 90 K Не применимо
gpt-4o-mini 15 B 1 B 50 М 90 K Не применимо
gpt-4-turbo 300 М 80 М 40 М 90 K Не применимо
gpt-4 150 М 30 М 5 М 100 К Не применимо
gpt-35-turbo 10 B 1 B 100 М 2 млн 50 К
o3-mini 15 B 1 B 50 М 90 K Не применимо
o4-mini 15 B 1 B 50 М 90 K Не применимо

B = миллиард | M = миллион | K = тысяча

Пакет зоны данных

Модель Соглашение Enterprise По умолчанию Ежемесячные подписки на основе кредитной карты Подписки MSDN Azure для учащихся, бесплатные пробные версии
gpt-4.1 500 М 30 М 30 М 90 K Не применимо
gpt-4.1-mini 1.5 B 100 М 50 М 90 K Не применимо
gpt-4o 500 М 30 М 30 М 90 K Не применимо
gpt-4o-mini 1.5 B 100 М 50 М 90 K Не применимо
o3-mini 1.5 B 100 М 50 М 90 K Не применимо

Пакетный объект

Недвижимость Тип Определение
id струна
object струна batch
endpoint струна Конечная точка API, используемая пакетом
errors объект
input_file_id струна Идентификатор входного файла для пакета
completion_window струна Интервал времени, в течение которого должен обрабатываться пакет
status струна Текущее состояние пакета. Возможные значения: validating, failed, in_progressfinalizingcompletedexpired, . cancellingcancelled
output_file_id струна Идентификатор файла, содержащего выходные данные успешно выполненных запросов.
error_file_id струна Идентификатор файла, содержащего выходные данные запросов с ошибками.
created_at целое число Метка времени при создании пакета (в эпохах UNIX).
in_progress_at целое число Метка времени при запуске этого пакета (в эпохах UNIX).
expires_at целое число Метка времени, когда эта партия истечет (в эпохах Unix).
finalizing_at целое число Отметка времени, когда этот пакет начал завершаться (в формате эпох Unix).
completed_at целое число Отметка времени, когда этот пакет начал завершаться (в формате эпох Unix).
failed_at целое число Метка времени, когда этот пакет завершился сбоем (в эпохах UNIX)
expired_at целое число Отметка времени, когда срок действия этой партии истек (в формате Unix Epoch).
cancelling_at целое число Метка времени при запуске cancelling этого пакета (в эпохах UNIX).
cancelled_at целое число Отметка времени, когда этот пакет был cancelled (в формате эпохи Unix).
request_counts объект Структура объекта:

total целое число
Общее количество запросов в пакете.
completed целое число
Число запросов в пакете, успешно завершенных.
failed целое число
Количество запросов в пакете, завершившемся сбоем.
metadata карта Набор пар ключ-значение, которые можно прикрепить к пакету. Это свойство может быть полезно для хранения дополнительных сведений о пакете в структурированном формате.

Часто задаваемые вопросы (FAQ)

Можно ли использовать изображения с пакетным API?

Эта возможность ограничена определенными многомодальными моделями. В настоящее время только GPT-4o поддерживает изображения в составе пакетных запросов. Изображения можно предоставлять как входные данные с помощью URL-адреса изображения или представления изображения в кодировке Base64. Изображения для пакетной обработки в настоящее время не поддерживаются с GPT-4 Turbo.

Можно ли использовать пакетный API с точно настроенными моделями?

В настоящее время это не поддерживается.

Можно ли использовать пакетный API для внедрения моделей?

В настоящее время это не поддерживается.

Работает ли фильтрация содержимого при глобальном пакетном развертывании?

Да. Аналогично другим типам развертывания, можно создавать фильтры содержимого и связывать их с типом глобального пакетного развертывания.

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

Да, на странице квоты на портале Azure AI Foundry. Выделение квот по умолчанию можно найти в статье о квоте и ограничениях.

Что произойдет, если API не завершает мой запрос в течение 24 часов?

Мы стремимся обрабатывать эти запросы в течение 24 часов; Срок действия заданий, которые занимают больше времени, не истекают. Задание можно отменить в любое время. При отмене задания все оставшиеся работы отменяются и возвращаются все уже завершенные работы. С вас будет взиматься плата за любую выполненную работу.

Сколько запросов я могу поставить в очередь, используя пакетную обработку?

В нашем сервисе нет жесткого ограничения на количество запросов, которые вы можете объединять в один пакет. Однако это будет зависеть от вашей квоты токенов в очереди. Квота токенов в очереди включает максимальное количество входных токенов, которые можно разместить одновременно.

После завершения выполнения вашего пакетного запроса лимит скорости выполнения сбрасывается, так как токены вашего ввода очищаются. Ограничение зависит от количества глобальных запросов в очереди. Если очередь Batch API быстро обрабатывает ваши пакеты, то лимит скорости обработки пакетов сбрасывается быстрее.

Устранение неполадок

Задача считается успешной, когда statusCompleted. Успешные задания по-прежнему будут генерировать error_file_id, но он будет связан с пустым файлом размером ноль байт.

При сбое задания вы найдете сведения о сбое в свойстве errors :

"value": [
        {
          "id": "batch_80f5ad38-e05b-49bf-b2d6-a799db8466da",
          "completion_window": "24h",
          "created_at": 1725419394,
          "endpoint": "/chat/completions",
          "input_file_id": "file-c2d9a7881c8a466285e6f76f6321a681",
          "object": "batch",
          "status": "failed",
          "cancelled_at": null,
          "cancelling_at": null,
          "completed_at": 1725419955,
          "error_file_id": "file-3b0f9beb-11ce-4796-bc31-d54e675f28fb",
          "errors": {
                "object": “list”,
                "data": [
                {
               "code": "empty_file",
               "message": "The input file is empty. Please ensure that the batch contains at least one   request."
                    }
                ]
          },
          "expired_at": null,
          "expires_at": 1725505794,
          "failed_at": null,
          "finalizing_at": 1725419710,
          "in_progress_at": 1725419572,
          "metadata": null,
          "output_file_id": "file-ef12af98-dbbc-4d27-8309-2df57feed572",

            "request_counts": {
                "total": 10,
                "completed": null,
                "failed": null
            },
        }

Коды ошибок

Код ошибки Определение
invalid_json_line Строка (или несколько) в вашем входном файле не может быть разобрана как допустимый JSON.

Пожалуйста, убедитесь, что в тексте нет опечаток, правильно расставлены открывающие и закрывающие скобки, а также кавычки в соответствии со стандартом JSON, и повторно отправьте запрос.
too_many_tasks Число запросов во входном файле превышает максимально допустимое значение 100 000.

Убедитесь, что общий объем запросов составляет менее 100 000 и повторно отправьте задание.
url_mismatch Строка в входном файле имеет URL-адрес, который не соответствует остальным строкам, или URL-адрес, указанный в входном файле, не соответствует ожидаемому URL-адресу конечной точки.

Убедитесь, что все URL-адреса запросов одинаковы, и что они соответствуют URL-адресу конечной точки, связанному с развертыванием Azure OpenAI.
model_not_found Имя развертывания модели Azure OpenAI, указанное в свойстве model входного файла, не найдено.

Убедитесь, что это имя указывает на допустимое развертывание модели Azure OpenAI.
duplicate_custom_id Пользовательский идентификатор для этого запроса является дубликатом пользовательского идентификатора в другом запросе.
empty_batch Проверьте входной файл, чтобы убедиться, что параметр пользовательского идентификатора уникален для каждого запроса в пакете.
model_mismatch Имя развертывания модели Azure OpenAI, указанное в model свойстве этого запроса в входном файле, не соответствует остальной части файла.

Убедитесь, что все запросы в пакете указывают на одно и то же развертывание модели Azure OpenAI в Azure AI Foundry Models в свойстве model запроса.
invalid_request Схема входной линии недействительна, или недействителен SKU развертывания.

Пожалуйста, убедитесь, что свойства запроса в вашем входном файле соответствуют ожидаемым свойствам ввода, и что SKU развертывания Azure OpenAI равно globalbatch для пакетных API-запросов.
input_modified Входные данные BLOB были изменены после отправки пакетной задачи.
input_no_permissions Невозможно получить доступ к входным блобам. Проверьте разрешения и сетевой доступ между учетной записью Azure OpenAI и учетной записью хранения Azure.

Известные проблемы

  • Ресурсы, развернутые с помощью Azure CLI, не будут работать из коробки с глобальной партией Azure OpenAI. Это связано с проблемой, из-за которой ресурсы, развернутые с помощью этого метода, имеют поддомены конечных точек, которые не соответствуют шаблону https://your-resource-name.openai.azure.com . Решение этой проблемы заключается в развертывании нового ресурса Azure OpenAI с помощью одного из других распространенных методов развертывания, которые будут правильно обрабатывать настройку поддомена в процессе развертывания.

  • Файлы в кодировке jsonl UTF-8-BOM не поддерживаются. Файлы строк JSON должны быть закодированы с помощью UTF-8. Использование файлов в кодировке Byte-Order-Mark (BOM) официально не поддерживается спецификацией JSON RFC, и Azure OpenAI в настоящее время будет рассматривать файлы в кодировке BOM как недопустимые. Файл, закодированный в формате UTF-8-BOM, в настоящее время возвращает общее сообщение об ошибке: "Ошибка проверки: из входного файла не удалось извлечь допустимое имя развертывания модели. Убедитесь, что каждая строка в входном файле имеет допустимое имя развертывания, указанное в поле "модель", и что имя развертывания согласовано во всех строках".

См. также

  • Дополнительные сведения о типах развертывания Azure OpenAI
  • Дополнительные сведения о квотах и ограничениях Azure OpenAI