Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Interfejs API Azure OpenAI Batch jest przeznaczony do wydajnego przetwarzania zadań na dużą skalę oraz w dużych ilościach. Przetwarzaj asynchroniczne grupy żądań z oddzielnym limitem kwoty, z docelowym czasem realizacji wynoszącym 24 godziny, przy koszcie o 50% mniejszym niż w przypadku globalnego standardu. W przypadku przetwarzania wsadowego zamiast wysyłać jedno żądanie jednocześnie wysyłasz dużą liczbę żądań w jednym pliku. Globalne żądania wsadowe mają odrębny limit tokenów w kolejce, co zapobiega zakłóceniom w Twoich operacjach online.
Najważniejsze przypadki użycia:
Przetwarzanie danych na dużą skalę: szybko analizuj obszerne zestawy 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): wykonaj zadania, takie 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 zakolejkowanych tokenów nawet po maksymalnym wykorzystaniu przydziału dla swojej wdrożenia, pewne regiony teraz wspierają nową funkcję, która pozwala na kolejkowanie wielu zadań wsadowych z użyciem wykładniczego opóźnienia.
Po udostępnieniu limitu tokenu w kolejce, można utworzyć i automatycznie rozpocząć następne zadanie wsadowe. Aby dowiedzieć się więcej, zobacz Automatyzowanie ponownych prób dużych zadań wsadowych przy użyciu wycofywania wykładniczego.
Ważne
Staramy się przetwarzać żądania zbiorcze w ciągu 24 godzin; nie anulujemy zadań, 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ę.
Dane przechowywane w spoczynku pozostają w wyznaczonej lokalizacji geograficznej platformy Azure, podczas gdy dane mogą być przetwarzane do wnioskowania w dowolnej lokalizacji usługi Azure OpenAI. Dowiedz się więcej na temat lokalizacji danych.
Obsługa usługi Batch
Dostępność globalnego modelu wsadowego
| Region | 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 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Brazylia Południe | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| wschód Kanady | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| centralny | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| eastus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| eastus2 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| francecentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Niemcy Zachodnio-Środkowe | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| japaneast | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| koreacentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| northcentralus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Norwegia Wschód | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| polandcentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| southafricanorth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| southcentralus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| południowe Indie | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| swedencentral | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Szwajcaria Północ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| uksouth | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Europa Zachodnia | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| westus | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| westus3 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Rejestracja jest wymagana do uzyskania dostępu do gpt-5 i o3. Aby uzyskać więcej informacji, zobacz nasz przewodnik po modelach rozumowania.
Następujące modele obsługują globalną partię:
| Model | wersja | Format danych wejściowych |
|---|---|---|
gpt-5 |
2025-08-7 |
tekst i obraz |
o3 |
2025-04-16 |
tekst i obraz |
o3-mini |
31.01.2025 | SMS |
gpt-4o |
2024-08-06 | tekst i obraz |
gpt-4o-mini |
18.07.2024 | tekst i obraz |
gpt-4o |
13.05.2024 | tekst i obraz |
Uwaga / Notatka
Chociaż usługa Global Batch obsługuje starsze wersje interfejsu API, niektóre modele wymagają nowszych wersji interfejsu API w wersji zapoznawczej. Na przykład o3-mini nie jest obsługiwany w 2024-10-21 , ponieważ został wydany po tej dacie. Aby uzyskać dostęp do nowszych modeli z globalnym wypuszczeniem, użyj najnowszej wersji API w wersji testowej.
Obsługa funkcji
Następujące elementy nie są obecnie obsługiwane:
- Integracja z interfejsem API Asystentów.
- Integracja z funkcją Azure OpenAI "Na Twoich Danych".
Wdrażanie wsadowe
Uwaga / Notatka
W portalu Microsoft Foundry typy wdrożeń wsadowych będą wyświetlane jako Global-Batch i Data Zone Batch. Aby dowiedzieć się więcej na temat typów wdrożeń usługi Azure OpenAI, zobacz nasz przewodnik dotyczący typów wdrożeń.
Wskazówka
Zalecamy włączenie dynamicznego limitu dla wszystkich globalnych wdrożeń modeli wsadowych, aby pomóc w uniknięciu błędów zadań spowodowanych niewystarczającym przydziałem tokenów w kolejce. Użycie przydziału dynamicznego umożliwia Twojej wdrożeniu oportunistyczne korzystanie z większego limitu, gdy dostępne są dodatkowe zasoby. Po wyłączeniu dynamicznego przydziału, Twoje wdrożenie będzie mogło przetwarzać żądania tylko do limitu liczby tokenów w kolejce, ustalonego przy tworzeniu wdrożenia.
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz bezpłatnie.
- Zasób z modelem wdrożenia typu
GlobalBatchlubDataZoneBatch.
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
Odpowiedzi API
{"custom_id": "task-0", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was Microsoft founded, and by whom?"}}
{"custom_id": "task-1", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was XBOX merged into Microsoft?"}}
{"custom_id": "task-2", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "What is Visual Basic?"}}
Interfejs API uzupełniania czatów
{"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ą wdrożenia Global Batch, które ma być celem odpowiedzi wnioskowania.
Ważne
Atrybut model musi być ustawiony tak, aby był zgodny z nazwą globalnego wdrożenia Batch, do którego chcesz kierować odpowiedzi inferencyjne. Ta sama nazwa wdrożenia modelu Global Batch musi być obecna w każdym wierszu pliku wsadowego. Jeśli chcesz przeprowadzić inne wdrożenie, musisz to zrobić w osobnym pliku wsadowym lub zadaniu.
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ć każdy wiersz pliku, dodając do niego globalną nazwę wdrożenia wsadowego.
Utwórz zadanie wsadowe
Po przygotowaniu pliku wejściowego, najpierw należy go przesłać, aby można było 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 usługi Azure OpenAI. Alternatywnie możesz skonfigurować usługę Azure Blob Storage dla usługi Azure OpenAI Batch.
-
Zaloguj się do usługi Microsoft Foundry. Upewnij się, że przełącznik New Foundry jest wyłączony. Te kroki odnoszą się do rozwiązania Foundry (wersja klasyczna).
Wybierz zasób Azure OpenAI, w którym dostępne jest globalne wdrożenie modelu wsadowego.
Wybierz pozycję Zadania wsadowe>+Utwórz zadania wsadowe.
Z listy rozwijanej w sekcji Dane zbiorcze>Prześlij pliki> wybierz Prześlij plik i podaj ścieżkę do
test.jsonlpliku utworzonego w poprzednim kroku. >Dalej.
Wybierz Utwórz, aby uruchomić zadanie wsadowe.
-
Zaloguj się do usługi 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>i utwórz zadanie wsadowe
Śledź postęp zadania wsadowego
Po utworzeniu zadania możesz monitorować postęp zadania, wybierając identyfikator zadania dla ostatnio utworzonego zadania. Domyślnie zostaniesz przekierowany na stronę stanu najnowszego utworzonego zadania wsadowego.
Stan zadania można śledzić w okienku po prawej stronie:
Pobierz plik wyjściowy 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ół.
Anuluj partię
Anuluje będącą w toku partię produkcyjną. Seria będzie w statusie cancelling przez maksymalnie 10 minut przed zmianą na cancelled, gdzie dostępne będą częściowe wyniki (jeśli istnieją) w pliku wyjściowym.
Śledź postęp zadania wsadowego
Po utworzeniu zadania możesz monitorować postęp zadania, wybierając identyfikator zadania dla ostatnio utworzonego zadania. Domyślnie zostaniesz przekierowany na stronę stanu najnowszego utworzonego zadania wsadowego.
Stan zadania można śledzić w okienku po prawej stronie:
Pobierz plik wyjściowy 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ół.
Anuluj partię
Anuluje będącą w toku partię produkcyjną. Seria będzie w statusie cancelling przez maksymalnie 10 minut przed zmianą na cancelled, gdzie dostępne będą częściowe wyniki (jeśli istnieją) w pliku wyjściowym.
Wymagania wstępne
- Subskrypcja platformy Azure — utwórz bezpłatnie.
- Środowisko Python w wersji 3.8 lub nowszej
- Następująca biblioteka języka Python:
openai - Notesy Jupyter
- Zasób Azure OpenAI z modelem typu
Global-Batch, który został wdroż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 zainicjujemy klienta usługi Azure OpenAI tylko raz, na początku omawiania przykładów. Jeśli chcesz wykonać krok poza kolejnością, często będziesz musiał skonfigurować klienta Azure OpenAI jako część tego wywołania.
Nawet jeśli masz już zainstalowaną bibliotekę języka Python OpenAI, może być konieczne uaktualnienie instalacji do najnowszej wersji:
!pip install openai --upgrade
Przygotowywanie pliku wsadowego
Podobnie jak fine-tuning, global batch używa plików w formacie JSON lines (.jsonl). Poniżej przedstawiono kilka przykładowych plików z różnymi typami obsługiwanej zawartości:
Format danych wejściowych
Odpowiedzi API
{"custom_id": "task-0", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was Microsoft founded, and by whom?"}}
{"custom_id": "task-1", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was XBOX merged into Microsoft?"}}
{"custom_id": "task-2", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "What is Visual Basic?"}}
Interfejs API uzupełniania czatów
{"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ą wdrożenia Global Batch, które ma być celem odpowiedzi wnioskowania.
Ważne
Atrybut model musi być ustawiony tak, aby był zgodny z nazwą globalnego wdrożenia Batch, do którego chcesz kierować odpowiedzi inferencyjne. Ta sama nazwa wdrożenia modelu Global Batch musi być obecna w każdym wierszu pliku wsadowego. Jeśli chcesz przeprowadzić inne wdrożenie, musisz to zrobić w osobnym pliku wsadowym lub zadaniu.
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ć każdy wiersz pliku, dodając do niego globalną nazwę wdrożenia wsadowego. Zapisz ten plik w tym samym katalogu, w którym uruchamiasz Jupyter Notebook.
Prześlij plik wsadowy
Po przygotowaniu pliku wejściowego, najpierw należy go przesłać, aby można było 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 usługi Azure OpenAI. Alternatywnie możesz skonfigurować usługę 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://cognitiveservices.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
Poprzez usunięcie komentarzy i dodanie extra_body={"expires_after":{"seconds": 1209600, "anchor": "created_at"}} ustawiasz nasz plik do przesłania na wygaśnięcie za 14 dni. Na zasób przypada maksymalny limit 500 wejściowych plików wsadowych, gdy nie jest ustawione wygaśnięcie. Ustawiając wartość wygaśnięcia, liczba wejściowych plików wsadowych na zasób zwiększa się do 10 000. Aby usunąć limity plików wejściowych wsadowych, użyj usługi Batch z usługą Azure Blob Storage.
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 załadowaniu pliku można zgłosić 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 / Notatka
Obecnie okno ukończenia musi być ustawione na 24h. Jeśli ustawisz jakąkolwiek inną wartość niż 24h, twoje zadanie zakończy się niepowodzeniem. Zadania, które trwają dłużej niż 24 godziny, będą kontynuowane, aż do ich 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 Twoje zadania wsadowe są tak duże, że osiągasz limit zakolejkowanych tokenów nawet po maksymalnym wykorzystaniu kwoty przydziału dla Twojego wdrożenia, niektóre regiony obecnie obsługują nową funkcję fail fast, która pozwala na kolejkowanie wielu zadań wsadowych z wykładniczym opóźnieniem, dzięki czemu po zakończeniu jednego dużego zadania wsadowego następne może być automatycznie uruchomione. Aby dowiedzieć się więcej o tym, które regiony obsługują tę funkcję oraz jak dostosować swój kod, aby w pełni z niej korzystać, zobacz kolejkowanie zadań wsadowych.
Śledź postęp zadania wsadowego
Po pomyślnym utworzeniu zadania wsadowego możesz monitorować jego postęp w Studio lub programistycznie. Podczas sprawdzania postępu zadania wsadowego zalecamy odczekiwanie co najmniej 60 sekund między każdym sprawdzeniem statusu.
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 |
Partia produkcyjna została ukończona, a wyniki są przygotowywane. |
completed |
Partia została ukończona, a wyniki są gotowe. |
expired |
Nie udało się ukończyć partii w ramach 24-godzinnego okna czasowego. |
cancelling |
Trwa przetwarzanie wsadu cancelled (może to zająć do 10 minut, zanim zacznie obowiązywać). |
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 osobny output_file_id element. Użyj error_file_id, aby ułatwić debugowanie problemów występujących w zadaniu wsadowym.
Pobierz plik wyjściowy 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:
Ze względu na zwięzłość zamieszczamy tylko jedną odpowiedź w ramach ukończenia czatu. 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
}
Odpowiedzi 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
}
Dodatkowe polecenia wsadowe
Anuluj partię
Anuluje będącą w toku partię produkcyjną. Seria będzie w statusie cancelling przez maksymalnie 10 minut przed zmianą na cancelled, gdzie dostępne będą częściowe wyniki (jeśli istnieją) w pliku wyjściowym.
client.batches.cancel("batch_abc123") # set to your batch_id for the job you want to cancel
Lista partii
Wyświetlanie listy zadań wsadowych dla określonego zasobu usługi Azure OpenAI.
client.batches.list()
Metody typu list w bibliotece języka Python 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 funkcję generate_time_filter, aby ułatwić tworzenie 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://cognitiveservices.azure.com/.default')
endpoint = "https://{YOUR_RESOURCE_NAME}.openai.azure.com/"
api_version = "2025-03-01-preview"
url = f"{endpoint}openai/batches"
order = "created_at asc"
time_filter = lambda: generate_time_filter("past 8 hours")
# Additional filter examples:
#time_filter = lambda: generate_time_filter("past 1 day")
#time_filter = lambda: generate_time_filter("past 3 days", status="Completed")
def generate_time_filter(time_range, status=None):
now = datetime.now()
if 'day' in time_range:
days = int(time_range.split()[1])
start_time = now - timedelta(days=days)
elif 'hour' in time_range:
hours = int(time_range.split()[1])
start_time = now - timedelta(hours=hours)
else:
raise ValueError("Invalid time range format. Use 'past X day(s)' or 'past X hour(s)'")
start_timestamp = int(start_time.timestamp())
filter_string = f"created_at gt {start_timestamp}"
if status:
filter_string += f" and status eq '{status}'"
return filter_string
filter = time_filter()
headers = {'Authorization': 'Bearer ' + token.token}
params = {
"api-version": api_version,
"$filter": filter,
"$orderby": order
}
response = requests.get(url, headers=headers, params=params)
json_data = response.json()
if response.status_code == 200:
print(json.dumps(json_data, indent=2))
else:
print(f"Request failed with status code: {response.status_code}")
print(response.text)
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 twoje zadania wsadowe są tak duże, że osiągasz limit tokenów w kolejce nawet po maksymalnym wykorzystaniu przydziału dla twojego wdrożenia, pewne regiony teraz wspierają nową funkcję szybkiego przerywania, która pozwala na kolejkowanie wielu zadań wsadowych z wykładniczym opóźnieniem. Gdy jedno duże zadanie wsadowe zostanie zakończone i twoja pula żetonów do umieszczenia w kolejce ponownie będzie dostępna, kolejne zadanie wsadowe może zostać utworzone i uruchomione automatycznie.
Stare zachowanie:
- Duże zadania wsadowe są już uruchomione i wykorzystują wszystkie dostępne tokeny dla Twojej konfiguracji.
- Nowe zadanie wsadowe zostało przesłane.
- Nowe zadanie wsadowe przechodzi do etapu walidacji, który może potrwać do kilku minut.
- Liczba tokenów dla nowego zadania jest sprawdzana w odniesieniu do aktualnie dostępnego limitu.
- Nowa partia zadań kończy się niepowodzeniem z powodu przekroczenia limitu tokenów podczas raportowania błędów.
Nowe zachowanie:
- Zadania dużej partii już działają i wykorzystują wszystkie dostępne tokeny dla Twojego wdrożenia.
- Nowe zadanie wsadowe dodane
- Szacunkowa liczba tokenów dla nowego zadania jest natychmiast porównywana z aktualnie dostępną kwotą zbiorową, co umożliwia szybkie niepowodzenie zadania, pozwalając na łatwiejsze obsługiwanie ponownych prób w sposób programowy.
Obsługa regionów
Poniższe regiony obsługują nowe szybkie zakończenie działania.
- AustraliaEast
- eastus
- Niemcy Zachodnio-Środkowe
- północne Włochy
- northcentralus
- polandcentral
- swedencentral
- Szwajcaria Północ
- eastus2
- westus
Kod poniżej demonstruje podstawowe mechanizmy obsługi zachowania fail fast, aby umożliwić automatyzację ponownych prób i kolejkowanie zadań wsadowych z eksponencjalnym narastaniem opóźnienia.
W zależności od rozmiaru zadań wsadowych może być konieczne znaczne zwiększenie max_retries lub dalsze dostosowanie 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 platformy Azure — utwórz bezpłatnie.
- Zasób Azure OpenAI z modelem typu
Global-Batch, który został wdrożony. Aby uzyskać pomoc dotyczącą tego procesu, zapoznaj się z przewodnikiem tworzenia zasobów i wdrażania modelu.
Przygotowywanie pliku wsadowego
Podobnie jak fine-tuning, global batch używa plików w formacie JSON lines (.jsonl). Poniżej przedstawiono kilka przykładowych plików z różnymi typami obsługiwanej zawartości:
Format danych wejściowych
Odpowiedzi API
{"custom_id": "task-0", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was Microsoft founded, and by whom?"}}
{"custom_id": "task-1", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "When was XBOX merged into Microsoft?"}}
{"custom_id": "task-2", "method": "POST", "url": "/v1/responses", "body": {"model": "REPLACE-WITH-MODEL-DEPLOYMENT-NAME", "input": "What is Visual Basic?"}}
Interfejs API uzupełniania czatów
{"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ą wdrożenia Global Batch, które ma być celem odpowiedzi wnioskowania.
Ważne
Atrybut model musi być ustawiony tak, aby był zgodny z nazwą globalnego wdrożenia Batch, do którego chcesz kierować odpowiedzi inferencyjne. Ta sama nazwa wdrożenia modelu Global Batch musi być obecna w każdym wierszu pliku wsadowego. Jeśli chcesz przeprowadzić inne wdrożenie, musisz to zrobić w osobnym pliku wsadowym lub zadaniu.
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ć każdy wiersz pliku, dodając do niego globalną nazwę wdrożenia wsadowego.
Prześlij plik wsadowy
Po przygotowaniu pliku wejściowego, najpierw należy go przesłać, aby można było 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 usługi Azure OpenAI. Alternatywnie możesz skonfigurować usługę 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 usłudze Azure Key Vault. Aby uzyskać więcej informacji na temat bezpiecznego używania kluczy interfejsu API w aplikacjach, zobacz Klucze interfejsu API w usłudze Azure Key Vault.
Aby uzyskać więcej informacji na temat zabezpieczeń usług sztucznej inteligencji, zobacz Uwierzytelnianie żądań w usługach 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.
Dodając opcjonalne parametry "expires_after.seconds=1209600" i "expires_after.anchor=created_at", ustawiasz termin wygaśnięcia pliku do przesłania na 14 dni. Istnieje maksymalny limit 500 wsadowych plików wejściowych na zasób, gdy nie ustawiono daty wygaśnięcia. Poprzez ustawienie wartości wygaśnięcia liczba plików wsadowych na zasób zostaje zwiększona do 10 000 plików na zasób. Możesz ustawić liczbę w zakresie od 1209600 do 2592000. To jest równoważne 14-30 dniom. Aby usunąć limity plików wejściowych wsadowych, użyj usługi Batch z usługą Azure Blob Storage.
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 upłynąć trochę czasu, zanim zostanie on w pełni przesłany i przetworzony. Aby sprawdzić status przesyłania pliku, uruchom:
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 załadowaniu pliku można zgłosić 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": {
"seconds": 1209600
},
"anchor": "created_at"
}'
Opcjonalnie możesz dodać "output_expires_after":{"seconds": 1209600}, i "anchor": "created_at", aby Twoje pliki wyjściowe wygasły za 14 dni.
Uwaga / Notatka
Obecnie okno ukończenia musi być ustawione na 24h. Jeśli ustawisz jakąkolwiek inną wartość niż 24h, twoje zadanie zakończy się niepowodzeniem. Zadania, które trwają dłużej niż 24 godziny, będą kontynuowane, aż do ich 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"
}
Śledź postęp zadania wsadowego
Po pomyślnym utworzeniu zadania wsadowego możesz monitorować jego postęp w Studio lub programistycznie. Podczas sprawdzania postępu zadania wsadowego zalecamy odczekiwanie co najmniej 60 sekund między każdym sprawdzeniem statusu.
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 |
Partia produkcyjna została ukończona, a wyniki są przygotowywane. |
completed |
Partia została ukończona, a wyniki są gotowe. |
expired |
Nie udało się ukończyć partii w ramach 24-godzinnego okna czasowego. |
cancelling |
Partia jest w trakcie przetwarzania cancelled (Może to potrwać do 10 minut, zanim wejdzie w życie.) |
cancelled |
Partia była cancelled. |
Pobierz plik wyjściowy 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
Anuluj partię
Anuluje będącą w toku partię produkcyjną. Seria będzie w statusie cancelling przez maksymalnie 10 minut przed zmianą na cancelled, gdzie dostępne będą częściowe wyniki (jeśli istnieją) 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 usługi Azure OpenAI.
curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/v1/batches \
-H "api-key: $AZURE_OPENAI_API_KEY"
Wywołanie listy API jest stronicowane. Odpowiedź zawiera wartość logiczną has_more wskazującą, kiedy istnieje więcej wyników do 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łędu, spacje są zastępowane przez URL rejected: Malformed input to a URL function.
Limity usługi Batch
| Nazwa limitu | Wartość limitu |
|---|---|
| Maksymalna liczba plików wejściowych usługi Batch — (bez wygaśnięcia) | 500 |
| Maksymalna liczba plików wejściowych usługi Batch — (ustalone wygaśnięcie) | 10,000 |
| Maksymalny rozmiar pliku wejściowego | 200 MB |
| Maksymalna liczba żądań na plik | 100 000 |
Uwaga / Notatka
Limity plików wsadowych nie mają zastosowania do plików wyjściowych (na przykład result.jsonl i error.jsonl). Aby usunąć limity plików wejściowych wsadowych, użyj usługi Batch z usługą Azure Blob Storage.
Kwota partii
W tabeli przedstawiono limit kontyngentu partii. Wartości przydziału dla globalnej partii są przedstawiane jako liczba tokenów oczekujących w kolejce. Podczas przesyłania pliku do przetwarzania wsadowego liczba tokenów w pliku jest liczone. Dopóki zadanie wsadowe osiągnie stan terminalu, te tokeny są liczone względem całkowitego limitu tokenu w kolejce.
Partia globalna
| Model | Enterprise i MCA-E | Wartość domyślna | Miesięczne subskrypcje oparte na kartach kredytowych | Subskrypcje MSDN | Azure for Students, 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 |
B = miliard | M = milion | K = tysiąc
Partia danych strefowych
| Model | Enterprise i MCA-E | Wartość domyślna | Miesięczne subskrypcje oparte na kartach kredytowych | Subskrypcje MSDN | Azure for Students, bezpłatne wersje próbne |
|---|---|---|---|---|---|
gpt-4.1 |
500 mln | 30 mln | 30 mln | 90 tys. | N/A |
gpt-4.1-mini |
1.5B | 100 mln | 50 mln | 90 tys. | N/A |
gpt-4o |
500 mln | 30 mln | 30 mln | 90 tys. | N/A |
gpt-4o-mini |
1.5B | 100 mln | 50 mln | 90 tys. | N/A |
o3-mini |
1.5B | 100 mln | 50 mln | 90 tys. | N/A |
gpt-5 |
5B | 200 mln | 50 mln | 90 tys. | N/A |
Obiekt wsadowy
| Majątek | Typ | Definicja |
|---|---|---|
id |
ciąg | |
object |
ciąg | batch |
endpoint |
ciąg | Punkt końcowy API używany przez partię |
errors |
obiekt | |
input_file_id |
ciąg | Identyfikator pliku wejściowego dla partii |
completion_window |
ciąg | Przedział czasu, w którym należy przetworzyć partię |
status |
ciąg | Bieżący stan serii. 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 | Znacznik czasu, kiedy ta partia została utworzona (w epokach uniksowych). |
in_progress_at |
liczba całkowita | Znacznik czasu, kiedy ta partia zaczęła postępować (w epoce unix). |
expires_at |
liczba całkowita | Czas wygaśnięcia tej partii (w epokach Unix). |
finalizing_at |
liczba całkowita | Znacznik czasu rozpoczęcia finalizowania tej partii (w epokach unix). |
completed_at |
liczba całkowita | Znacznik czasu rozpoczęcia finalizowania tej partii (w epokach unix). |
failed_at |
liczba całkowita | Sygnatura czasowa, kiedy ta partia nie powiodła się (w epokach systemu Unix) |
expired_at |
liczba całkowita | Sygnatura czasowa wygaśnięcia tej partii (w epokach systemu Unix). |
cancelling_at |
liczba całkowita | Sygnatura czasowa oznaczająca moment rozpoczęcia tej partii cancelling (w epoce Uniksa). |
cancelled_at |
liczba całkowita | Znacznik czasu, kiedy ta partia była cancelled (w epoce uniksowej). |
request_counts |
obiekt | Struktura obiektu:total
liczba całkowita Całkowita liczba żądań w wsadzie. completed
liczba całkowita Liczba żądań w grupie, ukończonych pomyślnie. 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 zadania. Ta właściwość może być przydatna do przechowywania dodatkowych informacji o partii w formacie ustrukturyzowanym. |
Najczęściej zadawane pytania (FAQ)
Czy obrazy mogą być używane z interfejsem API wsadowym?
Ta funkcja jest ograniczona do niektórych modeli wielomodalnych. Obecnie tylko GPT-4o obsługuje obrazy jako część żądań zbiorczych. Obrazy mogą być udostępniane jako dane wejściowe za pośrednictwem adresu URL obrazu lub zakodowanej w formacie base64 reprezentacji obrazu. Zdjęcia w partii nie są aktualnie obsługiwane przez GPT-4 Turbo.
Czy mogę używać interfejsu API wsadowego z dopasowanymi modelami?
Obecnie nie jest to obsługiwane.
Czy mogę używać batch API dla modeli osadzania?
Obecnie nie jest to obsługiwane.
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 ustalonego limitu na liczbę żądań, które można grupować, jednak będzie to zależne od Twojej puli tokenów w kolejce. 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 wsadowy zostaje zresetowany, ponieważ wprowadzone tokeny są wyczyszczone. Limit zależy od liczby żądań globalnych w kolejce. Jeśli kolejka Batch API szybko przetwarza partie, limit przetwarzania transz 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ć identyfikator error_file_id, ale będzie on skojarzony z pustym plikiem o rozmiarze zero bajtów.
Po wystąpieniu błędu zadania, szczegółowe informacje znajdziesz 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 | Definicja |
|---|---|
invalid_json_line |
Linia (lub wiele linii) w pliku wejściowym nie mogła zostać przeanalizowana jako prawidłowy 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 usługi Azure OpenAI. |
model_not_found |
Nie można odnaleźć nazwy wdrożenia modelu usługi Azure OpenAI określonej we model właściwości pliku wejściowego.Upewnij się, że ta nazwa wskazuje prawidłowe wdrożenie modelu usługi Azure OpenAI. |
duplicate_custom_id |
Identyfikator niestandardowy dla tego żądania jest duplikatem identyfikatora niestandardowego w innym żądaniu. |
empty_batch |
Sprawdź plik wejściowy, aby upewnić się, że niestandardowy parametr identyfikatora jest unikatowy dla każdego żądania w partii przetwarzania. |
model_mismatch |
Nazwa wdrożenia modelu usługi Azure OpenAI określona we model właściwości tego żądania w pliku wejściowym nie jest zgodna z resztą pliku.Upewnij się, że wszystkie żądania w partii wskazują na to samo wdrożenie modelu Azure OpenAI w modelach 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 usługi Azure OpenAI jest globalbatch dla żądań interfejsu 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 blobu danych. Sprawdź uprawnienia i dostęp sieciowy między kontem usługi Azure OpenAI i kontem usługi Azure Storage. |
Znane problemy
Zasoby wdrożone za pomocą Azure CLI nie będą działać od razu z globalną grupą 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 usługi 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żywanie plików zakodowanych za pomocą algorytmu Byte-Order-Mark (BOM) nie jest oficjalnie obsługiwane przez specyfikację RFC JSON, a usługa Azure OpenAI będzie obecnie traktować pliki zakodowane w formacie 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ę.