Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Interfejs Batch API usługi Azure OpenAI efektywnie obsługuje zadania przetwarzania na dużą skalę oraz przetwarzanie dużych wolumenów danych. Przetwarza asynchroniczne grupy żądań z oddzielnym limitem i oferuje docelowy 24-godzinny czas realizacji przy koszcie o 50% niższym niż standard globalny. W przypadku przetwarzania wsadowego wysyłasz dużą liczbę żądań w jednym pliku zamiast wysyłać jedno żądanie naraz. Globalne żądania wsadowe mają oddzielny limit tokenów w kolejce, więc obciążenia online nie ulegają zakłóceniom.
Kluczowe przypadki użycia obejmują:
Przetwarzanie danych na dużą skalę: Szybko analizuj duże zbiory danych równolegle.
Generowanie zawartości: Utwórz duże ilości tekstu, takie jak opisy produktów lub artykuły.
Przegląd dokumentów i podsumowanie: Automatyzowanie przeglądu i podsumowywania długich dokumentów.
Automatyzacja obsługi klienta: Obsługa wielu zapytań jednocześnie w celu uzyskania szybszych odpowiedzi.
Wyodrębnianie i analiza danych: Wyodrębnianie i analizowanie informacji z ogromnych ilości danych bez struktury.
Zadania przetwarzania języka naturalnego (NLP): Wykonywanie zadań, takich jak analiza tonacji lub tłumaczenie dużych zestawów danych.
Marketing i personalizacja: Generowanie spersonalizowanej zawartości i rekomendacji na dużą skalę.
Wskazówka
Jeśli zadania wsadowe są tak duże, że osiągasz limit tokenów w kolejce nawet po wykorzystaniu maksymalnego limitu przydziału dla wdrożenia, niektóre regiony udostępniają teraz nową funkcję, która umożliwia kolejkowanie wielu zadań wsadowych z wykładniczo rosnącymi odstępami między ponowieniami.
Po udostępnieniu limitu tokenów w kolejce, można utworzyć i zainicjować następne zadanie wsadowe automatycznie. Aby dowiedzieć się więcej, zobacz Automatyzowanie ponownych prób dużych zadań wsadowych przy zastosowaniu wycofywania wykładniczego.
Ważne
Usługa ma przetwarzać żądania wsadowe w ciągu 24 godzin, ale nie anuluje zadań, które trwają dłużej. Zadanie można anulować w dowolnym momencie. Po anulowaniu zadania usługa anuluje wszelkie pozostałe prace i zwraca wszystkie już ukończone prace. Płacisz za każdą ukończoną pracę.
Dane przechowywane w spoczynku pozostają w wyznaczonej lokalizacji geograficznej Azure, podczas gdy dane mogą być przetwarzane do wnioskowania w dowolnej lokalizacji Azure OpenAI. Dowiedz się więcej na temat rezydencji danych.
Obsługa usługi Batch
Globalna dostępność modelu wsadowego
| Region | gpt-5.4-mini, 2026-03-17 | gpt-5.4, 2026-03-05 | 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 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| brazilsouth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| canadaeast | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| centralus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| eastus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| eastus2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| francecentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Niemcy Zachód-Centrum | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| japaneast | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| koreacentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| northcentralus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Norwegia Wschód | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| polandcentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| southafricanorth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| southcentralus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Południowe Indie | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| swedencentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| switzerlandnorth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| uksouth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| westeurope | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| westus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| westus3 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Uwaga
Chociaż usługa Global Batch obsługuje starsze wersje interfejsu API, niektóre modele wymagają nowszych wersji interfejsu API. Na przykład o3-mini nie jest obsługiwany z 2024-10-21, ponieważ został wydany po tej dacie. Aby uzyskać dostęp do nowszych modeli za pomocą usługi Global Batch, użyj interfejsu API w wersji 1.
Obsługa funkcji
Następujące funkcje nie są obecnie obsługiwane:
- Integracja z interfejsem API Asystentów.
- Integracja z funkcją Azure OpenAI na Twoich Danych.
Wdrażanie wsadowe
Uwaga
W portalu Microsoft Foundry typy wdrożeń wsadowych są wyświetlane jako Global-Batch i Data Zone Batch. Aby dowiedzieć się więcej na temat typów wdrożeń Azure OpenAI, zobacz przewodnik >.
Wskazówka
Zalecamy włączenie dynamicznego limitu przydziału dla wszystkich wdrożeń globalnych modeli wsadowych, aby uniknąć błędów zadań z powodu niewystarczającego limitu przydziału tokenu w kolejce. Użycie przydziału dynamicznego umożliwia rozmieszczeniu korzystanie z większego przydziału, gdy dostępna jest dodatkowa wydajność. Po wyłączeniu przydziału dynamicznego, wdrożenie będzie mogło przetwarzać żądania tylko do limitu tokenów w kolejce, który został zdefiniowany podczas tworzenia wdrożenia.
Wymagania wstępne
- Subskrypcja Azure — Utwórz ją bezpłatnie.
- Model zasobów typu
GlobalBatchlubDataZoneBatchzostał wdrożony.
Przygotowywanie pliku wsadowego
Podobnie jak w przypadku dostrajania, usługa Batch używa plików w formacie wierszy JSON (.jsonl). Poniżej przedstawiono kilka przykładowych plików z różnymi typami obsługiwanej zawartości:
Format danych wejściowych
Interfejs API odpowiedzi
- Standardowe dane wejściowe
- Obraz zakodowany w formacie Base64
- Adres URL obrazu
- Dane wyjściowe ze strukturą
{"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?"}}
Interfejs API uzupełniania czatów
- Standardowe dane wejściowe
- Obraz zakodowany w formacie Base64
- Adres URL obrazu
- Dane wyjściowe ze strukturą
{"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?"}]}}
Element custom_id jest wymagany, aby umożliwić określenie, które pojedyncze żądanie wsadowe odpowiada danej odpowiedzi. Odpowiedzi nie będą zwracane w identycznej kolejności niż kolejność zdefiniowana w pliku wsadowym .jsonl .
model Atrybut powinien być ustawiony tak, aby był zgodny z nazwą globalnego wdrożenia usługi Batch, które ma być przeznaczone dla odpowiedzi wnioskowania.
Ważne
Atrybut model musi być ustawiony tak, aby odpowiadał nazwie globalnego wdrożenia Batch, które ma być używane do generowania odpowiedzi inferencyjnych. Ta sama nazwa wdrożenia globalnego modelu Batch musi być obecna w każdym wierszu pliku wsadowego. Jeśli chcesz celować w inne wdrożenie, musisz to zrobić w osobnym pliku/zadaniu wsadowym.
Aby uzyskać najlepszą wydajność, zalecamy przesyłanie dużych plików do przetwarzania wsadowego, a nie dużej liczby małych plików z zaledwie kilkoma wierszami w każdym pliku.
Tworzenie pliku wejściowego
W tym artykule utworzymy plik o nazwie test.jsonl i skopiujemy zawartość ze standardowego bloku kodu wejściowego powyżej do pliku. Musisz zmodyfikować i dodać globalną nazwę wdrożenia wsadowego do każdego wiersza pliku.
Utwórz zadanie wsadowe
Po przygotowaniu pliku wejściowego najpierw trzeba przesłać plik, aby móc zainicjować zadanie wsadowe. Przekazywanie plików można wykonać programowo lub za pośrednictwem portalu Microsoft Foundry. W tym przykładzie pokazano przekazywanie pliku bezpośrednio do zasobu Azure OpenAI. Alternatywnie można konfigurować Azure Blob Storage dla usługi Azure OpenAI Batch.
-
Zaloguj się do Microsoft Foundry. Upewnij się, że przełącznik New Foundry jest włączony. Te kroki dotyczą rozwiązania Foundry (nowy).
W prawym górnym rogu wybierz pozycję Kompilacja
W okienku po lewej stronie wybierz pozycję Modele
Wybierz Zadania wsadowe>utwórz zadanie wsadowe
Śledzenie postępu pracy wsadowej
Po utworzeniu zadania możesz monitorować postęp zadania, wybierając identyfikator zadania dla ostatnio utworzonego zadania. Domyślnie nastąpi przekierowanie na stronę stanu dla ostatnio utworzonego zadania wsadowego.
Stan zadania można śledzić w okienku po prawej stronie:
Pobieranie pliku wyjściowego zadania wsadowego
Po zakończeniu lub osiągnięciu stanu terminalu zadanie spowoduje wygenerowanie pliku błędu i pliku wyjściowego, który można pobrać do przeglądu, wybierając odpowiedni przycisk z ikoną strzałki w dół.
Anulowanie partii
Anuluje trwającą partię roboczą. Partia będzie w stanie cancelling do 10 minut przed zmianą na cancelled, gdzie będzie mieć częściowe wyniki (jeśli istnieją) dostępne w pliku wyjściowym.
Wymagania wstępne
- Subskrypcja Azure — Utwórz ją bezpłatnie.
- Python wersji 3.8 lub nowszej
- Następująca biblioteka Python:
openai - Notatniki Jupyter
- Zasób Azure OpenAI z modelem typu wdrożenia
Global-Batchwdrożony. Aby uzyskać pomoc dotyczącą tego procesu, zapoznaj się z przewodnikiem tworzenia zasobów i wdrażania modelu .
Kroki opisane w tym artykule mają być uruchamiane sekwencyjnie w notatnikach Jupyter. Z tego powodu utworzymy wystąpienie klienta Azure OpenAI tylko raz na początku naszych przykładów. Jeśli chcesz uruchomić krok poza ustaloną kolejnością, często wymagane jest skonfigurowanie klienta Azure OpenAI jako element tego wywołania.
Nawet jeśli masz już zainstalowaną bibliotekę openAI Python, może być konieczne uaktualnienie instalacji do najnowszej wersji:
!pip install openai --upgrade
Przygotowywanie pliku wsadowego
Podobnie jak dostrajanie, globalna partia używa plików w formacie wierszy JSON (.jsonl). Poniżej przedstawiono kilka przykładowych plików z różnymi typami obsługiwanej zawartości:
Format danych wejściowych
Interfejs API odpowiedzi
- Standardowe dane wejściowe
- Obraz zakodowany w formacie Base64
- Adres URL obrazu
- Dane wyjściowe ze strukturą
{"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?"}}
Interfejs API uzupełniania czatów
- Standardowe dane wejściowe
- Obraz zakodowany w formacie Base64
- Adres URL obrazu
- Dane wyjściowe ze strukturą
{"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?"}]}}
Element custom_id jest wymagany, aby umożliwić określenie, które pojedyncze żądanie wsadowe odpowiada danej odpowiedzi. Odpowiedzi nie będą zwracane w identycznej kolejności niż kolejność zdefiniowana w pliku wsadowym .jsonl .
model Atrybut powinien być ustawiony tak, aby był zgodny z nazwą globalnego wdrożenia usługi Batch, które ma być przeznaczone dla odpowiedzi wnioskowania.
Ważne
Atrybut model musi być ustawiony tak, aby odpowiadał nazwie globalnego wdrożenia Batch, które ma być używane do generowania odpowiedzi inferencyjnych. Ta sama nazwa wdrożenia globalnego modelu Batch musi być obecna w każdym wierszu pliku wsadowego. Jeśli chcesz celować w inne wdrożenie, musisz to zrobić w osobnym pliku/zadaniu wsadowym.
Aby uzyskać najlepszą wydajność, zalecamy przesyłanie dużych plików do przetwarzania wsadowego, a nie dużej liczby małych plików z zaledwie kilkoma wierszami w każdym pliku.
Tworzenie pliku wejściowego
W tym artykule utworzymy plik o nazwie test.jsonl i skopiujemy zawartość ze standardowego bloku kodu wejściowego powyżej do pliku. Musisz zmodyfikować i dodać globalną nazwę wdrożenia wsadowego do każdego wiersza pliku. Zapisz ten plik w tym samym katalogu, w którym wykonujesz Jupyter Notebook.
Przesyłanie pliku wsadowego
Po przygotowaniu pliku wejściowego najpierw trzeba przesłać plik, aby móc zainicjować zadanie wsadowe. Przekazywanie plików można wykonać programowo lub za pośrednictwem portalu Microsoft Foundry. W tym przykładzie pokazano przekazywanie pliku bezpośrednio do zasobu Azure OpenAI. Alternatywnie można konfigurować Azure Blob Storage dla usługi Azure OpenAI Batch.
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
Obiekt expires_after powoduje, że plik wejściowy wygaśnie po 14 dniach od utworzenia. Ustaw seconds na wartość od 1209600 do 2592000, aby wybrać okres ważności od 14 do 30 dni. Ustawienie wygaśnięcia zwiększa również limit plików wejściowych. Aby uzyskać szczegółowe informacje, zobacz Limity usługi Batch.
Wyjście:
{
"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
Utwórz zadanie wsadowe
Po pomyślnym przesłaniu pliku można przesłać plik do przetwarzania wsadowego.
# 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))
Uwaga
Obecnie okno uzupełniania musi być ustawione na 24h. Jeśli ustawisz inną wartość niż 24h zadanie, zakończy się niepowodzeniem. Zadania trwające dłużej niż 24 godziny będą nadal wykonywane do momentu anulowania.
Wyjście:
{
"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
}
}
Jeśli zadania wsadowe są tak duże, że osiągasz limit umieszczonych tokenów nawet po osiągnięciu maksymalnego przydziału dla wdrożenia, niektóre regiony obsługują teraz nową funkcję szybkiego przerywania, która umożliwia umieszczanie w kolejce wielu zadań wsadowych z wykładniczym opóźnieniem, więc po zakończeniu jednego dużego zadania wsadowego następne może być uruchomione automatycznie. Aby dowiedzieć się więcej o regionach obsługujących tę funkcję i sposobie dostosowywania kodu do korzystania z niej, zobacz kolejkowanie zadań wsadowych.
Śledzenie postępu pracy wsadowej
Po pomyślnym utworzeniu zadania wsadowego, możesz monitorować jego postęp w programie Studio lub w sposób programowy. Podczas sprawdzania postępu zadania wsadowego zalecamy odczekywanie co najmniej 60 sekund między każdym wywołaniem stanu.
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}")
Wyjście:
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
Możliwe są następujące wartości stanu:
| Stan | Opis |
|---|---|
validating |
Plik wejściowy jest weryfikowany przed rozpoczęciem przetwarzania wsadowego. |
failed |
Plik wejściowy zakończył się niepowodzeniem w procesie walidacji. |
in_progress |
Plik wejściowy został pomyślnie zweryfikowany, a partia jest obecnie uruchomiona. |
finalizing |
Seria została ukończona, a wyniki są w trakcie przygotowywania. |
completed |
Partia została ukończona, a wyniki są gotowe. |
expired |
Nie udało się ukończyć serii w 24-godzinnym przedziale czasu. |
cancelling |
Trwa przetwarzanie wsadowe cancelled (może to potrwać do 10 minut). |
cancelled |
Partia była cancelled. |
Aby sprawdzić szczegóły stanu zadania, można uruchomić:
print(batch_response.model_dump_json(indent=2))
Wyjście:
{
"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
}
}
Zwróć uwagę, że istnieje zarówno error_file_id, jak i odrębny output_file_id. Użyj error_file_id, aby pomóc w debugowaniu wszelkich problemów występujących w zadaniu wsadowym.
Pobieranie pliku wyjściowego zadania wsadowego
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)
Wyjście:
W celu zwięzłości uwzględniamy tylko jedną odpowiedź na ukończenie czatu w danych wyjściowych. Jeśli wykonasz kroki opisane w tym artykule, powinny istnieć trzy odpowiedzi podobne do poniższego:
Ukończenie czatu
{
"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
}
Interfejs API odpowiedzi
{
"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
}
Dodatkowe polecenia wsadowe
Anulowanie partii
Anuluje trwającą partię roboczą. Partia będzie w stanie cancelling do 10 minut przed zmianą na cancelled, gdzie będzie mieć częściowe wyniki (jeśli istnieją) dostępne w pliku wyjściowym.
client.batches.cancel("batch_abc123") # set to your batch_id for the job you want to cancel
Lista partii
Wyświetl listę zadań wsadowych dla określonego zasobu Azure OpenAI.
client.batches.list()
Metody list w bibliotece Pythona są stronicowane.
Aby wyświetlić listę wszystkich zadań:
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)
Lista wsadowa (wersja zapoznawcza)
Użyj interfejsu API REST, aby wyświetlić listę wszystkich zadań wsadowych z dodatkowymi opcjami sortowania/filtrowania.
W poniższych przykładach udostępniamy generate_time_filter funkcję, aby ułatwić konstruowanie filtru. Jeśli nie chcesz używać tej funkcji, format ciągu filtru będzie wyglądać następująco: 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)
Wyjście:
{
"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"
}
Kolejkowanie zadań wsadowych
Jeśli zadania wsadowe są tak duże, że osiągasz limit tokenów w kolejce nawet po maksymalnym wykorzystaniu przydziału dla wdrożenia, niektóre regiony obsługują teraz nową funkcję szybkiej awarii, która umożliwia kolejkowanie wielu zadań wsadowych z wykładniczym opóźnieniem. Po zakończeniu jednego dużego zadania wsadowego i ponownym udostępnieniu w kolejce przydziału tokenu można utworzyć następne zadanie wsadowe i uruchomić je automatycznie.
Stare zachowanie:
- Duże zadania wsadowe są już uruchomione i używają wszystkich dostępnych tokenów dla Twojego wdrożenia.
- Przesłane nowe zadanie wsadowe.
- Nowe zadanie wsadowe wchodzi w fazę weryfikacji, która może trwać do kilku minut.
- Liczba tokenów dla nowego zadania jest sprawdzana względem aktualnie dostępnego limitu przydziału.
- Nowe zadanie wsadowe kończy się niepowodzeniem z powodu przekroczenia limitu tokenu raportowania błędów.
Nowe zachowanie:
- Duże zadania wsadowe już działają i używają wszystkich dostępnych tokenów dla Twojego wdrożenia.
- Przesłano nowe zadanie wsadowe
- Przybliżona liczba tokenów nowego zadania jest natychmiast porównywana z aktualnie dostępnym przydziałem wsadowym, co pozwala szybko wychwycić niepowodzenie i łatwiej zarządzać ponownymi próbami programowo.
Obsługa regionów
Następujące regiony obsługują nowe szybkie zachowanie w przypadku awarii:
- australiaeast
- eastus
- Niemcy Zachód-Centrum
- Północne Włochy
- northcentralus
- polandcentral
- swedencentral
- switzerlandnorth
- eastus2
- westus
Poniższy kod demonstruje podstawową mechanikę obsługi podejścia szybkiego wykrywania awarii, aby umożliwić automatyzację ponawiania prób i kolejkowania zadań wsadowych z wykładniczym opóźnieniem.
W zależności od rozmiaru zadań wsadowych może być konieczne znaczne zwiększenie max_retries lub dalsze modyfikowanie tego przykładu.
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
Wyjście:
⏳ 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
}
}
Wymagania wstępne
- Subskrypcja Azure — Utwórz ją bezpłatnie.
- Zasób Azure OpenAI z modelem typu wdrożenia
Global-Batchwdrożony. Aby uzyskać pomoc dotyczącą tego procesu, zapoznaj się z przewodnikiem tworzenia zasobów i wdrażania modelu .
Przygotowywanie pliku wsadowego
Podobnie jak dostrajanie, globalna partia używa plików w formacie wierszy JSON (.jsonl). Poniżej przedstawiono kilka przykładowych plików z różnymi typami obsługiwanej zawartości:
Format danych wejściowych
Interfejs API odpowiedzi
- Standardowe dane wejściowe
- Obraz zakodowany w formacie Base64
- Adres URL obrazu
- Dane wyjściowe ze strukturą
{"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?"}}
Interfejs API uzupełniania czatów
- Standardowe dane wejściowe
- Obraz zakodowany w formacie Base64
- Adres URL obrazu
- Dane wyjściowe ze strukturą
{"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?"}]}}
Element custom_id jest wymagany, aby umożliwić określenie, które pojedyncze żądanie wsadowe odpowiada danej odpowiedzi. Odpowiedzi nie będą zwracane w identycznej kolejności niż kolejność zdefiniowana w pliku wsadowym .jsonl .
model Atrybut powinien być ustawiony tak, aby był zgodny z nazwą globalnego wdrożenia usługi Batch, które ma być przeznaczone dla odpowiedzi wnioskowania.
Ważne
Atrybut model musi być ustawiony tak, aby odpowiadał nazwie globalnego wdrożenia Batch, które ma być używane do generowania odpowiedzi inferencyjnych. Ta sama nazwa wdrożenia globalnego modelu Batch musi być obecna w każdym wierszu pliku wsadowego. Jeśli chcesz celować w inne wdrożenie, musisz to zrobić w osobnym pliku/zadaniu wsadowym.
Aby uzyskać najlepszą wydajność, zalecamy przesyłanie dużych plików do przetwarzania wsadowego, a nie dużej liczby małych plików z zaledwie kilkoma wierszami w każdym pliku.
Tworzenie pliku wejściowego
W tym artykule utworzymy plik o nazwie test.jsonl i skopiujemy zawartość ze standardowego bloku kodu wejściowego powyżej do pliku. Musisz zmodyfikować i dodać globalną nazwę wdrożenia wsadowego do każdego wiersza pliku.
Przesyłanie pliku wsadowego
Po przygotowaniu pliku wejściowego najpierw trzeba przesłać plik, aby móc zainicjować zadanie wsadowe. Przekazywanie plików można wykonać programowo lub za pośrednictwem portalu Microsoft Foundry. W tym przykładzie pokazano przekazywanie pliku bezpośrednio do zasobu Azure OpenAI. Alternatywnie można konfigurować Azure Blob Storage dla usługi Azure OpenAI Batch.
Ważne
Używaj kluczy interfejsu API z ostrożnością. Nie dołączaj klucza interfejsu API bezpośrednio do kodu i nigdy nie publikuj go publicznie. Jeśli używasz klucza interfejsu API, zapisz go bezpiecznie w Azure Key Vault. Aby uzyskać więcej informacji na temat bezpiecznego używania kluczy interfejsu API w aplikacjach, zobacz
Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań do usług 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"
Powyższy kod zakłada określoną ścieżkę pliku dla pliku test.jsonl. Dostosuj tę ścieżkę pliku zgodnie z potrzebami dla systemu lokalnego.
Opcjonalne parametry expires_after.seconds i expires_after.anchor ustawiają wygaśnięcie pliku wejściowego po 14 dniach od utworzenia. Ustaw dla expires_after.seconds wartość od 1209600 do 2592000, aby wybrać okres wygaśnięcia od 14 do 30 dni. Ustawienie daty wygaśnięcia zwiększa również limit plików wejściowych. Aby uzyskać szczegółowe informacje, zobacz Limity usługi Batch.
Wyjście:
{
"status": "processed",
"bytes": 817,
"purpose": "batch",
"filename": "test.jsonl",
"expires_at": 1744607747,
"id": "file-7733bc35e32841e297a62a9ee50b3461",
"created_at": 1743398147,
"object": "file"
}
Śledzenie stanu przekazywania plików
W zależności od rozmiaru przesyłanego pliku, może zająć trochę czasu, zanim zostanie on w pełni przesłany i przetworzony. Aby sprawdzić status przesyłania pliku, wykonaj polecenie:
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/files/{file-id} \
-H "api-key: $AZURE_OPENAI_API_KEY"
Wyjście:
{
"status": "processed",
"bytes": 686,
"purpose": "batch",
"filename": "test.jsonl",
"expires_at": 1744607747,
"id": "file-7733bc35e32841e297a62a9ee50b3461",
"created_at": 1721408291,
"object": "file"
}
Utwórz zadanie wsadowe
Po pomyślnym przesłaniu pliku można przesłać plik do przetwarzania wsadowego.
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": {
"anchor": "created_at",
"seconds": 1209600
}
}'
Opcjonalny output_expires_after obiekt ustawia pliki wyjściowe do wygaśnięcia 14 dni po ich utworzeniu. Ustaw seconds na wartość od 1209600 do 2592000, aby wybrać okres wygaśnięcia od 14 do 30 dni. Wartość anchor musi mieć wartość created_at.
Uwaga
Obecnie okno uzupełniania musi być ustawione na 24h. Jeśli ustawisz inną wartość niż 24h zadanie, zakończy się niepowodzeniem. Zadania trwające dłużej niż 24 godziny będą nadal wykonywane do momentu anulowania.
Wyjście:
{
"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"
}
Śledzenie postępu pracy wsadowej
Po pomyślnym utworzeniu zadania wsadowego, możesz monitorować jego postęp w programie Studio lub w sposób programowy. Podczas sprawdzania postępu zadania wsadowego zalecamy odczekywanie co najmniej 60 sekund między każdym wywołaniem stanu.
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/batches/{batch_id} \
-H "api-key: $AZURE_OPENAI_API_KEY"
Wyjście:
{
"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"
}
Możliwe są następujące wartości stanu:
| Stan | Opis |
|---|---|
validating |
Plik wejściowy jest weryfikowany przed rozpoczęciem przetwarzania wsadowego. |
failed |
Plik wejściowy zakończył się niepowodzeniem w procesie walidacji. |
in_progress |
Plik wejściowy został pomyślnie zweryfikowany, a partia jest obecnie uruchomiona. |
finalizing |
Seria została ukończona, a wyniki są w trakcie przygotowywania. |
completed |
Partia została ukończona, a wyniki są gotowe. |
expired |
Nie udało się ukończyć serii w 24-godzinnym przedziale czasu. |
cancelling |
Trwa przetwarzanie partii cancelled (Może to potrwać do 10 minut, zanim zacznie działać.). |
cancelled |
Partia była cancelled. |
Pobieranie pliku wyjściowego zadania wsadowego
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
Dodatkowe polecenia wsadowe
Anulowanie partii
Anuluje trwającą partię roboczą. Partia będzie w stanie cancelling do 10 minut przed zmianą na cancelled, gdzie będzie mieć częściowe wyniki (jeśli istnieją) dostępne w pliku wyjściowym.
curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/batches/{batch_id}/cancel \
-H "api-key: $AZURE_OPENAI_API_KEY"
Lista partii
Wyświetl listę istniejących zadań wsadowych dla danego zasobu Azure OpenAI.
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/batches \
-H "api-key: $AZURE_OPENAI_API_KEY"
Wywołanie interfejsu API listy jest paginowane. Odpowiedź zawiera zmienną logiczną has_more, która wskazuje, czy istnieją dodatkowe wyniki do przetworzenia w iteracji.
Lista wsadowa (wersja zapoznawcza)
Użyj interfejsu API REST, aby wyświetlić listę wszystkich zadań wsadowych z dodatkowymi opcjami sortowania/filtrowania.
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"
Aby uniknąć błędów, spacje URL rejected: Malformed input to a URL function są zastępowane ciągiem %20.
Limity usługi Batch
| Nazwa limitu | Wartość limitu |
|---|---|
| Maksymalna liczba plików wejściowych wsadowych (bez wygaśnięcia) | 500 |
| Maksymalna liczba plików wejściowych w partii (z ustawionym terminem wygaśnięcia) | 10 000 |
| Maksymalny rozmiar pliku wejściowego | 200 MB |
| Maksymalny rozmiar pliku wejściowego — przynieś własną pamięć masową (BYOS) | 1 GB |
| Maksymalna liczba żądań na plik | 100,000 |
Uwaga
Ustaw wygaśnięcie plików wejściowych, aby zwiększyć limit zasobów i zarządzać przechowywanymi plikami. Limity plików wejściowych usługi Batch nie mają zastosowania do plików wyjściowych, takich jak result.jsonl i error.jsonl. Aby uniknąć limitów plików wejściowych w interfejsie Files API, użyj Batch z Azure Blob Storage.
Przydział wsadowy
W tabeli przedstawiono limit przydziału partii. Wartości przydziału dla globalnej partii są reprezentowane pod względem zakolejkowanych tokenów. Podczas przekazywania pliku do przetwarzania wsadowego liczba tokenów w pliku jest liczona. Dopóki zadanie wsadowe nie osiągnie stanu końcowego, te tokeny są uwzględniane w całkowitym limicie tokenów w kolejce.
Partia globalna
| Model | Przedsiębiorstwo i MCA-E | Domyślny | Miesięczne subskrypcje oparte na kartach kredytowych | Subskrypcje MSDN | Azure dla uczniów, bezpłatne wersje próbne |
|---|---|---|---|---|---|
gpt-4.1 |
5B | 200 mln | 50 mln | 90 tys. | N/A |
gpt-4.1 mini |
15B | 1B | 50 mln | 90 tys. | N/A |
gpt-4.1-nano |
15B | 1B | 50 mln | 90 tys. | N/A |
gpt-4o |
5B | 200 mln | 50 mln | 90 tys. | N/A |
gpt-4o-mini |
15B | 1B | 50 mln | 90 tys. | N/A |
gpt-4-turbo |
300 mln | 80 mln | 40 mln | 90 tys. | N/A |
gpt-4 |
150 mln | 30 mln | 5 mln | 100 tys. | N/A |
o3-mini |
15B | 1B | 50 mln | 90 tys. | N/A |
o4-mini |
15B | 1B | 50 mln | 90 tys. | N/A |
gpt-5 |
5B | 200 mln | 50 mln | 90 tys. | N/A |
gpt-5.1 |
5B | 200 mln | 50 mln | 90 tys. | N/A |
gpt-5.2 |
5B | 200 mln | 50 mln | N/A | N/A |
gpt-5.4 |
5B | 200 mln | 50 mln | N/A | N/A |
gpt-5.4-mini |
5B | 200 mln | 50 mln | N/A | N/A |
gpt-5.4-nano |
5B | 200 mln | 50 mln | N/A | N/A |
gpt-5.5 |
5B | 200 mln | 50 mln | 90 tys. | N/A |
B = miliard | M = milion | K = tysiąc
Zestaw danych strefowych
| Model | Przedsiębiorstwo i MCA-E | Domyślny | Miesięczne subskrypcje oparte na kartach kredytowych | Subskrypcje MSDN | Azure dla uczniów, bezpłatne wersje próbne |
|---|---|---|---|---|---|
gpt-4.1 |
500 mln | 30 mln | 30 mln | 90 tys. | N/A |
gpt-4.1-mini |
1,5 mld | 100 mln | 50 mln | 90 tys. | N/A |
gpt-4o |
500 mln | 30 mln | 30 mln | 90 tys. | N/A |
gpt-4o-mini |
1,5 mld | 100 mln | 50 mln | 90 tys. | N/A |
o3-mini |
1,5 mld | 100 mln | 50 mln | 90 tys. | N/A |
gpt-5 |
5B | 200 mln | 50 mln | 90 tys. | N/A |
gpt-5.1 |
5B | 200 mln | 50 mln | 90 tys. | N/A |
gpt-5.4 |
5B | 200 mln | 50 mln | N/A | N/A |
gpt-5.4-mini |
5B | 200 mln | 50 mln | N/A | N/A |
gpt-5.5 |
5B | 200 mln | 50 mln | 90 tys. | N/A |
Przechowywanie rekordów zadań wsadowych
Rekordy zadań wsadowych są przechowywane do 365 dni po osiągnięciu przez zadanie stanu końcowego, takiego jak completed, failed, expired lub cancelled. W tym okresie można wyświetlić zadanie na liście i pobrać informacje o nim, a także anulować je, jeśli nadal jest w stanie umożliwiającym anulowanie.
Wygenerowane pliki wyjściowe i pliki błędów nie mają domyślnego wygaśnięcia. Pozostają one dostępne do momentu ich usunięcia lub ustawienia jawnego wygaśnięcia. Ustaw expires_after podczas przesyłania pliku wejściowego lub ustaw output_expires_after podczas tworzenia zadania wsadowego. Oba jawne ustawienia wygasania akceptują od 14 do 30 dni i używają created_at jako kotwicy. Przykłady można znaleźć w sekcjach Przekazywanie pliku wsadowego i Tworzenie zadania wsadowego na karcie Python lub interfejsu API REST.
Obiekt wsadowy
| Właściwość | Typ | Definicji |
|---|---|---|
id |
ciąg | Identyfikator partii. |
object |
ciąg | batch |
endpoint |
ciąg | Endpoint API używany przez partię. |
errors |
obiekt | Informacje o błędzie dla serii, jeśli występują. |
input_file_id |
ciąg | ID pliku wejściowego dla partii. |
completion_window |
ciąg | Docelowy przedział czasu przetwarzania partii. Obecnie należy ustawić tę wartość na 24h. Ukończenie w ciągu 24 godzin nie jest gwarantowane, a zadanie może być kontynuowane do momentu zakończenia lub anulowania. |
status |
ciąg | Bieżący stan partii produkcyjnej. Możliwe wartości: validating, failedin_progressfinalizingcompleted, expired, cancelling, . cancelled |
output_file_id |
ciąg | Identyfikator pliku zawierającego dane wyjściowe pomyślnie wykonanych żądań. |
error_file_id |
ciąg | Identyfikator pliku zawierającego dane wyjściowe żądań z błędami. |
created_at |
liczba całkowita | Sygnatura czasowa utworzenia tej partii (w sekundach epoki Unix). |
in_progress_at |
liczba całkowita | Sygnatura czasowa rozpoczęcia postępu tej partii (w sekundach systemu Unix). |
expires_at |
liczba całkowita | Znacznik czasu, kiedy ta partia wygaśnie (w sekundach epoki Unix). |
finalizing_at |
liczba całkowita | Moment rozpoczęcia finalizacji tej partii (w sekundach epoki Unix). |
completed_at |
liczba całkowita | Znacznik czasu, kiedy ta partia została zakończona (w sekundach czasu epoki Unix). |
failed_at |
liczba całkowita | Znacznik czasu, kiedy ta partia nie powiodła się (w sekundach epoki Unix). |
expired_at |
liczba całkowita | Znacznik czasu, kiedy wygasł ten pakiet (w sekundach epoki Unix). |
cancelling_at |
liczba całkowita | Sygnatura czasowa, kiedy ta partia się rozpoczęła cancelling (w sekundach systemu Unix). |
cancelled_at |
liczba całkowita | Sygnatura czasowa dla tej partii cancelled (w sekundach epoki Unix). |
request_counts |
obiekt | Struktura obiektu:total
Liczba całkowita Całkowita liczba żądań w pakiecie. completed
Liczba całkowita Liczba żądań w partii, które zostały pomyślnie ukończone. failed
Liczba całkowita Liczba żądań w partii, które zakończyły się niepowodzeniem. |
metadata |
mapa | Zestaw par klucz-wartość, które można dołączyć do partii. Ta właściwość może być przydatna do przechowywania dodatkowych informacji o partii w formacie ustrukturyzowanym. |
Często zadawane pytania
Czy obrazy mogą być używane z interfejsem API wsadowym?
Ta funkcja jest ograniczona do niektórych modeli wielomodalnych. Obrazy można udostępniać jako dane wejściowe za pomocą adresu URL obrazu lub zakodowanej w formacie base64 reprezentacji obrazu.
Czy mogę używać interfejsu API wsadowego z dostosowanymi modelami?
Interfejs Batch API nie obsługuje obecnie modeli dostrojonych.
Czy mogę używać interfejsu API wsadowego do osadzania modeli?
Interfejs Batch API nie obsługuje obecnie modeli dostrojonych.
Czy filtrowanie zawartości działa z globalnym wdrożeniem usługi Batch?
Tak. Podobnie jak w przypadku innych typów wdrożeń, można tworzyć filtry zawartości i kojarzyć je z globalnym typem wdrożenia usługi Batch.
Czy mogę zażądać dodatkowego limitu przydziału?
Tak, na stronie limitu przydziału w portalu Foundry. Domyślną alokację przydziału można znaleźć w artykule o przydziałach i limitach.
Co się stanie, jeśli interfejs API nie ukończy żądania w ciągu 24-godzinnego przedziału czasu?
Dążymy do przetworzenia tych żądań w ciągu 24 godzin; nie wygasają zadania, które trwają dłużej. Zadanie można anulować w dowolnym momencie. Po anulowaniu zadania wszystkie pozostałe prace zostaną anulowane i zostanie zwrócona każda już ukończona praca. Opłata zostanie naliczona za każdą ukończoną pracę.
Ile żądań można kolejkować przy użyciu usługi Batch?
Nie ma stałego limitu liczby żądań, które można wsadować, jednak będzie zależeć od limitu przydziału tokenu w kolejce. Twój przydział tokenów w kolejce obejmuje maksymalną liczbę tokenów wejściowych, które można umieścić w kolejce na raz.
Po zakończeniu żądania wsadowego, limit przepustowości wsadowej zostanie zresetowany, ponieważ tokeny wejściowe zostały wyczyszczone. Limit zależy od liczby żądań globalnych w kolejce. Jeśli kolejka interfejsu API Batch szybko przetwarza twoje partie, limit wsadu jest resetowany szybciej.
Rozwiązywanie problemów
Zadanie kończy się pomyślnie, gdy status ma wartość completed. Pomyślne zadania nadal będą generować error_file_idelement , ale będzie on skojarzony z pustym plikiem o zerowych bajtach.
Po wystąpieniu błędu zadania znajdziesz szczegółowe informacje o błędzie we właściwości 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
}
}
]
}
Kody błędów
| Kod błędu | Definicji |
|---|---|
invalid_json_line |
Jednej lub kilku linii w pliku wejściowym nie udało się przetworzyć jako poprawny JSON. Upewnij się, że nie ma literówek, odpowiednich nawiasów otwierających i zamykających oraz cudzysłowów zgodnie ze standardem JSON i prześlij ponownie żądanie. |
too_many_tasks |
Liczba żądań w pliku wejściowym przekracza maksymalną dozwoloną wartość 100 000. Upewnij się, że łączna liczba żądań wynosi poniżej 100 000 i prześlij ponownie zadanie. |
url_mismatch |
Wiersz w pliku wejściowym ma adres URL, który nie jest zgodny z resztą wierszy, lub adres URL określony w pliku wejściowym nie jest zgodny z oczekiwanym adresem URL punktu końcowego. Upewnij się, że wszystkie adresy URL żądań są takie same i że są zgodne z adresem URL punktu końcowego skojarzonym z wdrożeniem Azure openAI. |
model_not_found |
Nie znaleziono nazwy wdrożenia modelu Azure OpenAI, która została określona we właściwości model pliku wejściowego.Upewnij się, że ta nazwa wskazuje prawidłowe wdrożenie modelu w Azure OpenAI. |
duplicate_custom_id |
Identyfikator niestandardowy dla tego żądania jest duplikatem identyfikatora niestandardowego w innym żądaniu. |
empty_file |
Plik wejściowy jest pusty. Upewnij się, że partia zawiera co najmniej jedno żądanie. |
model_mismatch |
Nazwa wdrożenia modelu openAI Azure określona we właściwości model tego żądania w pliku wejściowym nie jest zgodna z resztą pliku.Upewnij się, że wszystkie żądania w partii wskazują na takie samo wdrożenie modelu Azure OpenAI w modelu Foundry Models we właściwości model żądania. |
invalid_request |
Schemat wiersza wejściowego jest nieprawidłowy lub jednostka SKU wdrożenia jest nieprawidłowa. Upewnij się, że właściwości żądania w pliku wejściowym są zgodne z oczekiwanymi właściwościami danych wejściowych i że jednostka SKU wdrożenia platformy Azure OpenAI jest globalbatch dla żądań API wsadowego. |
input_modified |
Dane wejściowe obiektu blob zostały zmodyfikowane po przesłaniu zadania wsadowego. |
input_no_permissions |
Nie można uzyskać dostępu do wejściowego obiektu blob. Sprawdź uprawnienia i dostęp sieciowy między kontem Azure OpenAI a kontem Azure Storage. |
Znane problemy
Zasoby wdrożone za pomocą Azure CLI nie będą działały bezpośrednio w globalnej partii Azure OpenAI. Jest to spowodowane problemem polegającym na tym, że zasoby wdrożone przy użyciu tej metody mają poddomeny punktów końcowych, które nie są zgodne ze wzorcem
https://your-resource-name.openai.azure.com. Obejściem tego problemu jest wdrożenie nowego zasobu Azure OpenAI przy użyciu jednej z innych typowych metod wdrażania, które będą prawidłowo obsługiwać konfigurację poddomeny w ramach procesu wdrażania.Pliki zakodowane w formacie
jsonlUTF-8-BOM nie są obsługiwane. Pliki wierszy JSON powinny być kodowane przy użyciu formatu UTF-8. Użycie plików zakodowanych w formacie BOM (Byte-Order-Mark) nie jest oficjalnie obsługiwane przez specyfikację RFC JSON, a Azure openAI będzie obecnie traktować pliki zakodowane przez model BOM jako nieprawidłowe. Plik zakodowany w formacie UTF-8-BOM zwraca obecnie ogólny komunikat o błędzie: "Weryfikacja nie powiodła się: Nie można wyodrębnić prawidłowej nazwy wdrożenia modelu z pliku wejściowego. Upewnij się, że każdy wiersz w pliku wejściowym ma prawidłową nazwę wdrożenia określoną w polu "model" i że nazwa wdrożenia jest spójna we wszystkich wierszach.W przypadku używania własnego magazynu dla danych wejściowych wsadowych po przesłaniu zadania wsadowego, jeśli wejściowy obiekt blob zostanie zmodyfikowany, zadanie oceniania zakończy się niepowodzeniem przez usługę.
Zobacz też
- Dowiedz się więcej o typach Azure OpenAI deployment
- Dowiedz się więcej na temat Azure OpenAI limitów i ograniczeń