Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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 для ответов
- Стандартные входные данные
- Изображение в кодировке Base64
- URL-адрес изображения
- Структурированные выходные данные
{"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 завершения чата
- Стандартные входные данные
- Изображение в кодировке Base64
- URL-адрес изображения
- Структурированные выходные данные
{"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.
-
Войдите в Microsoft Foundry. Убедитесь, что переключатель New Foundry включен. Эти действия относятся к Foundry (new).
В правом верхнем углу выберите Сборка
На панели слева выберите модели
Выберите пакетные задания>создать пакетное задание
Отслеживание хода выполнения пакетного задания
После создания задания можно отслеживать ход выполнения задания, выбрав идентификатор задания для последнего созданного задания. По умолчанию вы перейдете на страницу состояния для последнего созданного пакетного задания.
Состояние задания можно отслеживать на панели справа:
Получение выходного файла пакетного задания
После завершения вашей задачи или достижения ею конечного состояния будут созданы файлы ошибок и результата, которые можно скачать для проверки, нажав соответствующую кнопку со значком стрелки вниз для загрузки файлов.
Отмена пакета
Отменяет выполняемый пакет. Пакет будет находиться в состоянии cancelling до 10 минут, прежде чем перейти в состояние cancelled, где будут доступны в выходном файле частичные результаты, если таковые имеются.
Необходимые условия
- Подписка Azure: Создайте бесплатно.
- Python версии 3.8 или более поздней
- Следующая библиотека Python:
openai - Записные книжки Jupyter
- Ресурс OpenAI Azure с моделью типа развертывания
Global-Batchразвернут. Вы можете ознакомиться с руководством по созданию ресурсов и развертыванию моделей , чтобы помочь в этом процессе.
Действия, описанные в этой статье, предназначены для последовательного выполнения в Jupyter Notebook. По этой причине мы создадим экземпляр клиента OpenAI Azure сразу в начале примеров. Если вы хотите выполнить шаг не по порядку, вам часто потребуется настроить клиент Azure OpenAI в рамках этого вызова.
Даже если у вас уже установлена библиотека OpenAI Python, может потребоваться обновить установку до последней версии:
!pip install openai --upgrade
Подготовка пакетного файла
Как и в случае с тонкой настройкой, global batch использует файлы в формате строк JSON (.jsonl). Ниже приведены некоторые примеры файлов с различными типами поддерживаемого содержимого:
Формат входных данных
API для ответов
- Стандартные входные данные
- Изображение в кодировке Base64
- URL-адрес изображения
- Структурированные выходные данные
{"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 завершения чата
- Стандартные входные данные
- Изображение в кодировке Base64
- URL-адрес изображения
- Структурированные выходные данные
{"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"
}
Постановка пакетных заданий в очередь
Если пакетные задания настолько большие, что вы достигаете ограничения на количество маркеров даже после максимального использования квоты для развертывания, некоторые регионы теперь поддерживают новую функцию быстрого отказа, которая позволяет ставить в очередь несколько пакетных заданий с экспоненциальной задержкой. После завершения одного большого пакетного задания и повторного доступа к квоте закваченного токена можно создать следующее пакетное задание и запустить его автоматически.
Старое поведение:
- Крупное пакетное задание уже запущено и использует все доступные токены для вашего развертывания.
- Новое пакетное задание отправлено.
- Новое пакетное задание переходит на этап проверки, который может длиться до нескольких минут.
- Количество токенов для нового задания проверяется по доступной в данный момент квоте.
- Новое пакетное задание завершается сбоем из-за превышения лимита токенов при генерации отчета об ошибках.
Новое поведение:
- Уже выполняются большие пакетные задания, использующие все доступные токены для вашего развертывания.
- Новое пакетное задание отправлено
- Приблизительное количество токенов нового задания сразу сравнивается с квотой доступных заданий в пакетной обработке, что приводит к быстрому завершению задания при неудаче и позволяет проще обрабатывать повторные попытки программным способом.
Поддержка регионов
Следующие регионы поддерживают новое поведение "быстрый сбой".
- 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
}
}
Необходимые условия
- Подписка Azure: Создайте бесплатно.
- Ресурс OpenAI Azure с моделью типа развертывания
Global-Batchразвернут. Вы можете ознакомиться с руководством по созданию ресурсов и развертыванию моделей , чтобы помочь в этом процессе.
Подготовка пакетного файла
Как и в случае с тонкой настройкой, global batch использует файлы в формате строк JSON (.jsonl). Ниже приведены некоторые примеры файлов с различными типами поддерживаемого содержимого:
Формат входных данных
API для ответов
- Стандартные входные данные
- Изображение в кодировке Base64
- URL-адрес изображения
- Структурированные выходные данные
{"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 завершения чата
- Стандартные входные данные
- Изображение в кодировке Base64
- URL-адрес изображения
- Структурированные выходные данные
{"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 с помощью одного из других распространенных методов развертывания, которые будут правильно обрабатывать настройку поддомена в процессе развертывания.Файлы в кодировке
jsonlUTF-8-BOM не поддерживаются. Файлы строк JSON должны быть закодированы с помощью UTF-8. Использование файлов в кодировке Byte-Order-Mark (BOM) официально не поддерживается спецификацией RFC JSON, и Azure OpenAI в настоящее время будет рассматривать файлы в кодировке BOM как недопустимые. Файл, закодированный в формате UTF-8-BOM, в настоящее время возвращает универсальное сообщение об ошибке: "Ошибка проверки: не удалось извлечь допустимое имя развертывания модели из входного файла." Убедитесь, что каждая строка в входном файле имеет допустимое имя развертывания, указанное в поле "модель", и что имя развертывания согласовано во всех строках".При использовании собственного хранилища для входных данных пакетной обработки, после отправки пакетного задания, если входной большой двоичный объект изменяется, служба завершит задание оценки с ошибкой.