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

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

К ключевым вариантам использования относятся:

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

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

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

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

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

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

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

Совет

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

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

Важно

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

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

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

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

Регион gpt-5.1, 2025-11-13 gpt-5, 2025-08-07 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
australiaeast
южнаябразилия
canadaeast
centralus
eastus
eastus2
francecentral
Германия Западно-Центральная
japaneast
koreacentral
northcentralus
норвегия восток
polandcentral
southafricanorth
southcentralus
Южная Индия
ЦентральнаяШвеция
швейцариянорт
uksouth
westeurope
westus
westus3

Регистрация требуется для доступа к gpt-5 и o3. Дополнительные сведения см. в руководстве по моделям причин.

Примечание

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

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

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

  • Интеграция с API помощников.
  • Интеграция с функцией "Azure OpenAI на ваших данных".

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

Примечание

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

Совет

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

Необходимые условия

  • Подписка Azure: Создайте бесплатно.
  • Ресурс с моделью типа GlobalBatch развертывания или DataZoneBatch развернутой.

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

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

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

API для ответов

{"custom_id": "task-0", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was Microsoft founded, and by whom?"}}
{"custom_id": "task-1", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was XBOX merged into Microsoft?"}}
{"custom_id": "task-2", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "What is Visual Basic?"}}

API завершения чата

{"custom_id": "task-0", "method": "POST", "url": "/v1/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": "/v1/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": "/v1/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 Атрибут должен быть установлен так, чтобы соответствовать имени развертывания глобальной пакетной обработки, на которую вы хотите нацелиться для получения ответов на вывод.

Важно

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

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

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

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

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

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

  1. Войдите в Microsoft Foundry. Убедитесь, что переключатель New Foundry включен. Эти действия относятся к Foundry (new).

  2. В правом верхнем углу выберите Сборка

  3. На панели слева выберите модели

  4. Выберите пакетные задания>создать пакетное задание

    Скриншот нового интерфейса создания пакетов в системе Foundry.

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

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

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

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

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

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

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

Необходимые условия

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

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

!pip install openai --upgrade

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

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

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

API для ответов

{"custom_id": "task-0", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was Microsoft founded, and by whom?"}}
{"custom_id": "task-1", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was XBOX merged into Microsoft?"}}
{"custom_id": "task-2", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "What is Visual Basic?"}}

API завершения чата

{"custom_id": "task-0", "method": "POST", "url": "/v1/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": "/v1/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": "/v1/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 Атрибут должен быть установлен так, чтобы соответствовать имени развертывания глобальной пакетной обработки, на которую вы хотите нацелиться для получения ответов на вывод.

Важно

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

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

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

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

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

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

import os
from datetime import datetime
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

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

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
)

# 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 файлов на ресурс. Чтобы удалить ограничения пакетного входного файла, используйте Batch с Хранилище BLOB-объектов Azure.

Выход:

{
  "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", # While passing this parameter is required, the system will read your input file to determine if the chat completions or responses API is needed.  
    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))

Примечание

В настоящее время для окна завершения необходимо задать значение 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
  }
}

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

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

После успешного создания пакетного задания можно отслеживать ход выполнения в Студии или программно. При проверке хода выполнения пакетного задания рекомендуется ожидать не менее 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
}

API для ответов

{
  "custom_id": "task-0",
  "response": {
    "body": {
      "id": "resp_0e5c78eb05ee70cf00690cc6d988e4819587556df17436a206",
      "created_at": 1762445017.0,
      "error": null,
      "incomplete_details": null,
      "instructions": null,
      "metadata": {},
      "model": "gpt-4.1-batch",
      "object": "response",
      "output": [
        {
          "id": "msg_0e5c78eb05ee70cf00690cc6da3c548195aae483031113df16",
          "content": [
            {
              "annotations": [],
              "text": "Microsoft was founded on **April 4, 1975** by **Bill Gates** and **Paul Allen**.",
              "type": "output_text",
              "logprobs": []
            }
          ],
          "role": "assistant",
          "status": "completed",
          "type": "message"
        }
      ],
      "parallel_tool_calls": true,
      "temperature": 1.0,
      "tool_choice": "auto",
      "tools": [],
      "top_p": 1.0,
      "background": false,
      "max_output_tokens": null,
      "max_tool_calls": null,
      "previous_response_id": null,
      "prompt_cache_key": null,
      "reasoning": {
        "effort": null,
        "summary": null
      },
      "safety_identifier": null,
      "service_tier": "default",
      "status": "completed",
      "text": {
        "format": {
          "type": "text"
        },
        "verbosity": "medium"
      },
      "top_logprobs": 0,
      "truncation": "disabled",
      "usage": {
        "input_tokens": 16,
        "input_tokens_details": {
          "cached_tokens": 0
        },
        "output_tokens": 25,
        "output_tokens_details": {
          "reasoning_tokens": 0
        },
        "total_tokens": 41
      },
      "user": null,
      "content_filters": null,
      "store": true
    },
    "request_id": "809b30c2-fa0b-4613-b5cc-c30f6b780c9a",
    "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://ai.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. Приблизительное количество токенов нового задания сразу сравнивается с квотой доступных заданий в пакетной обработке, что приводит к быстрому завершению задания при неудаче и позволяет проще обрабатывать повторные попытки программным способом.

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

Следующие регионы поддерживают новое поведение "быстрый сбой".

  • australiaeast
  • eastus
  • Германия Западно-Центральная
  • Северная Италия
  • northcentralus
  • polandcentral
  • ЦентральнаяШвеция
  • швейцариянорт
  • eastus2
  • westus

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

В зависимости от размера пакетных заданий может потребоваться значительно увеличить 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
  }
}

Необходимые условия

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

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

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

API для ответов

{"custom_id": "task-0", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was Microsoft founded, and by whom?"}}
{"custom_id": "task-1", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was XBOX merged into Microsoft?"}}
{"custom_id": "task-2", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "What is Visual Basic?"}}

API завершения чата

{"custom_id": "task-0", "method": "POST", "url": "/v1/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": "/v1/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": "/v1/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 Атрибут должен быть установлен так, чтобы соответствовать имени развертывания глобальной пакетной обработки, на которую вы хотите нацелиться для получения ответов на вывод.

Важно

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

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

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

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

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

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

Важно

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

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

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/files \
  -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 дням. Чтобы удалить ограничения пакетного входного файла, используйте Batch с Хранилище BLOB-объектов Azure.

Выход:

{
  "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/v1/files/{file-id} \
  -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/v1/batches \
  -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"
  }'

Здесь можно необязательно добавить "output_expires_after":{"seconds": 1209600}, и "anchor": "created_at", чтобы срок действия выходных файлов истекал через 14 дней.

Примечание

В настоящее время для окна завершения необходимо задать значение 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/v1/batches/{batch_id} \
  -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/v1/files/{output_file_id}/content \
  -H "api-key: $AZURE_OPENAI_API_KEY" > batch_output.jsonl

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

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

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

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/batches/{batch_id}/cancel \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Перечислить пакет

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

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/batches \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

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

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

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

curl "YOUR_RESOURCE_NAME.openai.azure.com/batches?api-version=2025-04-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%20.

Пакетные ограничения

Название лимита Предел значения
Максимальное количество входных файлов пакетной службы — (без срока действия) 500
Максимальное количество входных файлов для пакетной обработки — (установлен срок действия) 10,000
Максимальный размер входного файла 200 МБ
Максимальный размер входного файла - Используйте собственное хранилище (BYOS) 1 ГБ
Максимальное количество запросов на файл 100,000

Примечание

Ограничения пакетного файла не применяются к выходным файлам (например, result.jsonlи error.jsonl). Чтобы снять ограничения на пакетный входной файл, используйте Batch с Хранилище BLOB-объектов Azure.

Квота пакетной обработки

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

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

Модель Предприятие и MCA-E По умолчанию Ежемесячные подписки на основе кредитной карты Подписки MSDN Azure для учащихся, бесплатные пробные версии
gpt-4.1 5B 200 миллионов 50 млн 90K N/A
gpt-4.1 mini 15B 1B 50 млн 90K N/A
gpt-4.1-nano 15B 1B 50 млн 90K N/A
gpt-4o 5B 200 миллионов 50 млн 90K N/A
gpt-4o-mini 15B 1B 50 млн 90K N/A
gpt-4-turbo 300 миллионов 80M 40M 90K N/A
gpt-4 150 млн 30 млн 5M 100K N/A
o3-mini 15B 1B 50 млн 90K N/A
o4-mini 15B 1B 50 млн 90K N/A
gpt-5 5B 200 миллионов 50 млн 90K N/A
gpt-5.1 5B 200 миллионов 50 млн 90K N/A

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

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

Модель Предприятие и MCA-E По умолчанию Ежемесячные подписки на основе кредитной карты Подписки MSDN Azure для учащихся, бесплатные пробные версии
gpt-4.1 500 млн 30 млн 30 млн 90K N/A
gpt-4.1-mini 1,5 млрд 100 млн 50 млн 90K N/A
gpt-4o 500 млн 30 млн 30 млн 90K N/A
gpt-4o-mini 1,5 млрд 100 млн 50 млн 90K N/A
o3-mini 1,5 млрд 100 млн 50 млн 90K N/A
gpt-5 5B 200 миллионов 50 млн 90K N/A
gpt-5.1 5B 200 миллионов 50 млн 90K N/A

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

Свойство Тип Определение
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).
cancelling_at Целое число Параметр времени начала выполнения этого пакета cancelling (в секундах эпохи Unix).
cancelled_at Целое число Метка времени, когда этот пакет был cancelled (в секундах эпохи Unix).
request_counts Объект Структура объекта:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Задание успешно, когда status является completed. Успешные задания по-прежнему создают объект 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 Имя развертывания модели OpenAI Azure, указанное в свойстве model входного файла, не найдено.

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

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

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

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

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

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

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

См. также

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