Freigeben über


Erste Schritte mit Azure OpenAI-Batchbereitstellungen

Die Azure OpenAI Batch-API ist darauf ausgelegt, umfangreiche Verarbeitungsaufgaben mit hohem Volumen effizient zu verarbeiten. Verarbeiten Sie asynchrone Anforderungsgruppen mit separatem Kontingent mit einer angestrebten Verarbeitungszeit von 24 Stunden zu 50 % weniger Kosten als bei „Global-Standard“. Bei der Stapelverarbeitung senden Sie die einzelnen Anforderungen nicht nacheinander, sondern Sie senden eine große Anzahl von Anforderungen in einer einzelnen Datei. Anforderungen für den globalen Batch verfügen über ein separates Kontingent von Token in der Warteschlange, um Unterbrechungen Ihrer Onlineworkloads zu vermeiden.

Wichtige Anwendungsfälle:

  • Umfangreiche Datenverarbeitung: Analysieren Sie schnell umfangreiche Datasets parallel.

  • Inhaltsgenerierung: Erstellen Sie große Textmengen, z. B. Produktbeschreibungen oder Artikel.

  • Dokumentüberprüfung und Zusammenfassung: Automatisieren Sie die Überprüfung und Zusammenfassung von umfangreichen Dokumenten.

  • Automatisierung des Kundendiensts: Verarbeiten Sie zahlreiche Anfragen gleichzeitig für schnellere Antworten.

  • Datenextraktion und -analyse: Extrahieren und analysieren Sie Informationen aus großen Mengen unstrukturierter Daten.

  • NLP-Aufgaben (Natural Language Processing, Verarbeitung natürlicher Sprache): Führen Sie Aufgaben wie Stimmungsanalyse oder Übersetzung für große Datasets aus.

  • Marketing und Personalisierung: Generieren Sie personalisierte Inhalte und Empfehlungen im großen Stil.

Tipp

Wenn Ihre Batchaufträge so groß sind, dass Sie den Grenzwert für eingereihte Token auch nach dem Ausschöpfen des Kontingents für Ihre Bereitstellung erreichen, unterstützen einige Regionen jetzt eine neue Funktion, mit der Sie mehrere Batchaufträge mit exponentiellem Backoff in die Warteschlange stellen können.

Sobald Ihr Enqueued-Tokenkontingent verfügbar ist, kann der nächste Batchauftrag erstellt und automatisch gestartet werden. Weitere Informationen finden Sie unter Automatisieren von Wiederholungen großer Batchaufträge mit exponentiellem Backoff.

Von Bedeutung

Wir zielen darauf ab, Batchanforderungen innerhalb von 24 Stunden zu verarbeiten; die Aufträge, die länger dauern, laufen nicht ab. Sie können den Auftrag jederzeit abbrechen. Wenn Sie den Auftrag abbrechen, werden alle verbleibenden Arbeiten abgebrochen, und alle bereits abgeschlossenen Arbeiten werden zurückgegeben. Abgeschlossene Arbeiten werden Ihnen in Rechnung gestellt.

Gespeicherte ruhende Daten verbleiben in der angegebenen Azure-Geografie, während Daten für Rückschlüsse an einem beliebigen Azure OpenAI-Standort verarbeitet werden können. Erfahren Sie mehr über Data Residency. 

Batchunterstützung

Verfügbarkeit des globalen Batchmodells

Region 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
Brasilien Süd
Kanada Ost
eastus
Eastus2
francecentral
Deutschland West-Zentral
Japan Ost
koreacentral
Northcentralus
Norwegen Ost
Polenzentral
Südafrika Nord
southcentralus
Südindien
schwedencentral
SchweizNord
uksouth
Westeuropa
westus
westus3

Die Registrierung ist für den Zugriff auf o3-mini erforderlich. Weitere Informationen finden Sie in unserem Leitfaden für Begründungsmodellen.

Die folgenden Modelle unterstützen Global-Batch:

Modell Version Eingabeformat
o3-mini 31.01.2025 Text
gpt-4o 2024-08-06 Text + Bild
gpt-4o-mini 18.07.2024 Text + Bild
gpt-4o 13.05.2024 Text + Bild

API-Unterstützung

API-Version
Neueste GA-API-Version: 2024-10-21
Neueste unterstützte Vorschau-API-Version: 2025-04-01-preview

Hinweis

Während der globale Batch ältere API-Versionen unterstützt, erfordern einige Modelle neuere Vorschau-API-Versionen. Ein Beispiel: o3-mini wird nicht unterstützt mit 2024-10-21, da es nach diesem Datum veröffentlicht wurde. Verwenden Sie die neueste Vorschau-API-Version, um auf die neueren Modelle mit globaler Batchversion zuzugreifen.

Featureunterstützung

Folgendes wird derzeit nicht unterstützt:

  • Integration mit der Assistants-API.
  • Integration mit der Azure OpenAI-Funktion „Für Ihre Daten“.

Batchbereitstellung

Hinweis

Im Azure AI Foundry-Portal werden die Batchbereitstellungstypen als Global-Batch und Data Zone Batchangezeigt. Weitere Informationen zu Azure OpenAI-Bereitstellungstypen finden Sie in unserer Anleitung zu Bereitstellungstypen.

Screenshot des Dialogfelds

Tipp

Es wird empfohlen, das dynamische Kontingent für alle globalen Batchmodellimplementierungen zu aktivieren, um Auftragsfehler aufgrund unzureichender Kontingente für Token in der Warteschlange zu vermeiden. Das Verwenden vom dynamischen Kontingent ermöglicht Ihrer Bereitstellung die opportunistische Nutzung eines größeren Kontingents, wenn zusätzliche Kapazität verfügbar ist. Wenn das dynamische Kontingent deaktiviert ist, kann Ihre Bereitstellung nur Anforderungen bis zum Grenzwert für Token in der Warteschlange verarbeiten, der beim Erstellen der Bereitstellung definiert wurde.

Voraussetzungen

Vorbereiten der Batchdatei

Wie die Feinabstimmung verwendet der globale Batch Dateien im JSON-Zeilenformat (.jsonl). Im Folgenden finden Sie einige Beispieldateien mit unterschiedlichen Typen von unterstützten Inhalten:

Eingabeformat

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

custom_id ist erforderlich, damit Sie ermitteln können, welche einzelne Batchanforderung einer bestimmten Antwort entspricht. Antworten werden nicht in der Reihenfolge zurückgegeben, die in der .jsonl-Batchdatei definiert ist.

Das model-Attribut sollte so festgelegt werden, dass es mit dem Namen der globalen Batchbereitstellung übereinstimmt, auf die Sie für Rückschlussantworten abzielen möchten.

Von Bedeutung

Das model-Attribut muss so festgelegt werden, dass es mit dem Namen der globalen Batchbereitstellung übereinstimmt, die Sie als Ziel für Rückschlussantworten festlegen möchten. Derselbe globale Batchmodellbereitstellungsname muss in jeder Zeile der Batchdatei vorhanden sein. Wenn Sie eine andere Bereitstellung als Ziel festlegen möchten, müssen Sie dies in einer separaten Batchdatei bzw. einem separaten Batchauftrag tun.

Um eine optimale Leistung zu erzielen, empfehlen wir, große Dateien für die Batchverarbeitung zu übermitteln, anstatt eine große Anzahl kleiner Dateien mit nur wenigen Zeilen in jeder Datei.

Erstellen einer Eingabedatei

In diesem Artikel erstellen wir eine Datei mit dem Namen test.jsonl und kopieren den Inhalt aus dem obigen Standardeingabecodeblock in die Datei. Sie müssen den Namen Ihrer globalen Batchbereitstellung ändern und jeder Zeile der Datei hinzufügen.

Hochladen der Batchdatei

Nachdem Ihre Eingabedatei vorbereitet wurde, müssen Sie die Datei zuerst hochladen, um dann einen Batchauftrag initiieren zu können. Der Dateiupload kann sowohl programmgesteuert als auch über das Azure AI Foundry-Portal erfolgen. In diesem Beispiel wird das direkte Hochladen einer Datei in Ihre Azure OpenAI-Ressource veranschaulicht. Alternativ können Sie Azure Blob Storage für Azure OpenAI Batch konfigurieren.

  1. Melden Sie sich beim Azure AI Foundry-Portal an.

  2. Wählen Sie die Azure OpenAI-Ressource aus, in der Sie über eine globale Batchmodellbereitstellung verfügen.

  3. Wählen Sie Batchaufträge>+ Batchaufträge erstellen aus.

    Screenshot, der die Erstellung von Batchaufträgen im Azure KI Foundry-Portal zeigt.

  4. Wählen Sie in der Dropdownliste unter Batchdaten>Dateien hochladen> die Option Datei hochladen aus, und geben Sie den Pfad der im vorherigen Schritt erstellten test.jsonl-Datei an. >Weiter.

    Screenshot, das die Erfahrung beim Hochladen einer Datei zeigt.

Erstellen des Batchauftrags

Wählen Sie Erstellen aus, um den Batchauftrag zu starten.

Screenshot der Benutzeroberfläche des Azure AI Foundry-Portals zur Erstellung eines Batchauftrags.

Fortschritt eines Batchauftrags verfolgen

Nachdem Ihr Auftrag erstellt wurde, können Sie den Fortschritt des Auftrags überwachen, indem Sie die Auftrags-ID für den zuletzt erstellten Auftrag auswählen. Standardmäßig werden Sie zur Statusseite des zuletzt erstellten Batchauftrags weitergeleitet.

Screenshot: Batchauftrags-ID für einen Auftrag, der derzeit validiert wird.

Sie können den Auftragsstatus für Ihren Auftrag im rechten Bereich nachverfolgen:

Screenshot, der den Status des Batch-Jobs im Azure AI Foundry-Portal zeigt.

Abrufen der Ausgabedatei eines Batchauftrags

Nachdem Ihr Auftrag abgeschlossen wurde oder einen Beendigungsstatus erreicht hat, werden eine Fehler- und eine Ausgabedatei generiert, die Sie zur Überprüfung herunterladen können, indem Sie die entsprechende Schaltfläche mit dem Pfeil nach unten auswählen.

Screenshot: Ausgabe des Batchauftrags und Fehlerdateien, die zum Download verfügbar sind

Batch abbrechen

Hiermit wird ein laufender Batch abgebrochen. Der Batch befindet sich bis zu 10 Minuten lang im Status cancelling, bevor er zu cancelled wechselt. Hier sind Teilergebnisse (falls vorhanden) in der Ausgabedatei verfügbar.

Screenshot der Schaltfläche zum Abbrechen des Batchauftrags im Azure AI Foundry-Portal.

Voraussetzungen

Die Schritte in diesem Artikel sollten in Jupyter Notebooks sequenziell ausgeführt werden. Deshalb instanziieren wir den Azure OpenAI-Client nur einmal am Anfang der Beispiele. Wenn Sie einen Schritt in einer anderen Reihenfolge ausführen möchten, müssen Sie häufig einen Azure OpenAI-Client als Teil dieses Aufrufs einrichten.

Auch wenn Sie die OpenAI Python-Bibliothek bereits installiert haben, müssen Sie möglicherweise ein Upgrade Ihrer Installation auf die neueste Version durchführen:

!pip install openai --upgrade

Vorbereiten der Batchdatei

Wie die Feinabstimmung verwendet der globale Batch Dateien im JSON-Zeilenformat (.jsonl). Im Folgenden finden Sie einige Beispieldateien mit unterschiedlichen Typen von unterstützten Inhalten:

Eingabeformat

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

custom_id ist erforderlich, damit Sie ermitteln können, welche einzelne Batchanforderung einer bestimmten Antwort entspricht. Antworten werden nicht in der Reihenfolge zurückgegeben, die in der .jsonl-Batchdatei definiert ist.

Das model-Attribut sollte so festgelegt werden, dass es mit dem Namen der globalen Batchbereitstellung übereinstimmt, auf die Sie für Rückschlussantworten abzielen möchten.

Von Bedeutung

Das model-Attribut muss so festgelegt werden, dass es mit dem Namen der globalen Batchbereitstellung übereinstimmt, die Sie als Ziel für Rückschlussantworten festlegen möchten. Derselbe globale Batchmodellbereitstellungsname muss in jeder Zeile der Batchdatei vorhanden sein. Wenn Sie eine andere Bereitstellung als Ziel festlegen möchten, müssen Sie dies in einer separaten Batchdatei bzw. einem separaten Batchauftrag tun.

Um eine optimale Leistung zu erzielen, empfehlen wir, große Dateien für die Batchverarbeitung zu übermitteln, anstatt eine große Anzahl kleiner Dateien mit nur wenigen Zeilen in jeder Datei.

Erstellen einer Eingabedatei

In diesem Artikel erstellen wir eine Datei mit dem Namen test.jsonl und kopieren den Inhalt aus dem obigen Standardeingabecodeblock in die Datei. Sie müssen den Namen Ihrer globalen Batchbereitstellung ändern und jeder Zeile der Datei hinzufügen. Speichern Sie diese Datei im selben Verzeichnis, in dem Sie Ihr Jupyter Notebook ausführen.

Hochladen der Batchdatei

Nachdem Ihre Eingabedatei vorbereitet wurde, müssen Sie die Datei zuerst hochladen, um dann einen Batchauftrag initiieren zu können. Der Dateiupload kann sowohl programmgesteuert als auch über das Azure AI Foundry-Portal erfolgen. In diesem Beispiel wird das direkte Hochladen einer Datei in Ihre Azure OpenAI-Ressource veranschaulicht. Alternativ können Sie Azure Blob Storage für Azure OpenAI Batch konfigurieren.

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

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

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

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


print(file.model_dump_json(indent=2))

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

file_id = file.id

Indem Sie den Kommentar entfernen und extra_body={"expires_after":{"seconds": 1209600, "anchor": "created_at"}} hinzufügen, legen Sie fest, dass die Uploaddatei in 14 Tagen abläuft. Es gibt eine maximale Grenze von 500 Batchdateien pro Ressource, wenn kein Ablauf festgelegt ist. Durch Festlegen eines Werts für den Ablauf wird die Anzahl der Batchdateien pro Ressource auf 10.000 Dateien pro Ressource erhöht.

Ausgabe:

{
  "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

Erstellen des Batchauftrags

Nachdem die Datei erfolgreich hochgeladen wurde, können Sie die Datei zur Batchverarbeitung übermitteln.

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


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

print(batch_response.model_dump_json(indent=2))

Das standardmäßige Limit für maximal 500 Dateien pro Ressource gilt auch für Ausgabedateien. Hier können Sie die Auskommentierung dieser Zeile aufheben, um extra_body={"output_expires_after":{"seconds": 1209600, "anchor": "created_at"}} hinzuzufügen, damit Ihre Ausgabedateien in 14 Tagen ablaufen. Durch Festlegen eines Werts für den Ablauf wird die Anzahl der Batchdateien pro Ressource auf 10.000 Dateien pro Ressource erhöht.

Hinweis

Derzeit muss das Abschlussfenster auf 24h festgelegt sein. Wenn Sie einen anderen Wert als 24h festlegen, wird Ihr Auftrag fehlschlagen. Aufträge, die länger als 24 Stunden dauern, werden bis zur Kündigung weiterhin ausgeführt.

Ausgabe:

{
  "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
  }
}

Wenn Ihre Batchaufträge so groß sind, dass Sie den Grenzwert für eingereihte Token auch nach dem Ausschöpfen des Kontingents für Ihre Bereitstellung erreichen, unterstützen einige Regionen jetzt eine neue Fail-Fast-Funktion, mit der Sie mehrere Batchaufträge mit exponentiellem Backoff in die Warteschlange stellen können. Wenn ein großer Batchauftrag fertiggestellt wird, kann so der nächste automatisch gestartet werden. Weitere Informationen dazu, welche Regionen dieses Feature unterstützen und wie Sie Ihren Code anpassen können, um davon zu profitieren, finden Sie unter Batchverarbeitungsaufträge in die Warteschlange stellen.

Fortschritt eines Batchauftrags verfolgen

Nachdem Sie den Batchauftrag erfolgreich erstellt haben, können Sie den Fortschritt entweder im Studio oder programmgesteuert überwachen. Beim Überprüfen des Fortschritts des Batchauftrags wird empfohlen, mindestens 60 Sekunden zwischen jedem Statusabruf zu warten.

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}")

Ausgabe:

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

Die folgenden Statuswerte sind möglich:

Status Beschreibung
validating Die Eingabedatei wird überprüft, bevor die Stapelverarbeitung beginnen kann.
failed Fehler beim Überprüfen der Eingabedatei.
in_progress Die Eingabedatei wurde erfolgreich überprüft, und der Batch wird zurzeit ausgeführt.
finalizing Der Batch wurde abgeschlossen, und die Ergebnisse werden vorbereitet.
completed Der Batch wurde abgeschlossen, und die Ergebnisse sind bereit.
expired Der Batch konnte nicht innerhalb des 24-Stunden-Zeitfensters abgeschlossen werden.
cancelling Der Batch wird cancelled (es kann bis zu zehn Minuten dauern, bis dies wirksam wird).
cancelled Der Batch ist cancelled.

Um die Auftragsstatusdetails zu überprüfen, können Sie folgenden Befehl ausführen:

print(batch_response.model_dump_json(indent=2))

Ausgabe:

{
  "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
  }
}

Beachten Sie, dass es sowohl eine error_file_id als auch eine separate output_file_id gibt. Nutzen Sie das error_file_id zur Unterstützung beim Debuggen von Problemen, die bei Ihrem Stapelauftrag auftreten.

Abrufen der Ausgabedatei eines Batchauftrags

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)

Ausgabe:

Der Kürze halber wird hier nur eine Chatvervollständigungsantwort der Ausgabe gezeigt. Wenn Sie die Schritte in diesem Artikel ausführen, sollten Sie drei Antworten haben, die in etwa der folgenden entsprechen:

{
  "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
}

Zusätzliche Batchbefehle

Batch abbrechen

Hiermit wird ein laufender Batch abgebrochen. Der Batch befindet sich bis zu 10 Minuten lang im Status cancelling, bevor er zu cancelled wechselt. Hier sind Teilergebnisse (falls vorhanden) in der Ausgabedatei verfügbar.

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

Auflisten von Batches

Listet Batchaufträge für eine bestimmte Azure OpenAI-Ressource auf.

client.batches.list()

Listenmethoden in der Python-Bibliothek werden paginiert.

So listen Sie alle Aufträge auf

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)

Auflisten von Batches (Vorschau)

Verwenden Sie die REST-API, um alle Batchaufträge mit zusätzlichen Sortier-/Filteroptionen aufzulisten.

In den folgenden Beispielen stellen wir die generate_time_filter Funktion bereit, um das Erstellen des Filters zu vereinfachen. Wenn Sie diese Funktion nicht verwenden möchten, sieht das Format der Filterzeichenfolge wie created_at gt 1728860560 and status eq 'Completed' aus.

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)  

Ausgabe:

{
  "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"
}

Einreihen von Batchaufträgen in die Warteschlange

Wenn Ihre Batchaufträge so groß sind, dass Sie den Grenzwert für eingereihte Token auch nach dem Ausschöpfen des Kontingents für Ihre Bereitstellung erreichen, unterstützen einige Regionen jetzt eine neue Fail-Fast-Funktion, mit der Sie mehrere Batchaufträge mit exponentiellem Backoff in die Warteschlange stellen können. Sobald ein großer Batchauftrag abgeschlossen ist und Ihr Enqueued Tokenkontingent erneut verfügbar ist, kann der nächste Batchauftrag erstellt und automatisch gestartet werden.

Altes Verhalten:

  1. Große Batchaufträge werden bereits ausgeführt und verwenden alle verfügbaren Token für Ihre Bereitstellung.
  2. Neuer Stapelauftrag eingereicht.
  3. Der neue Batchauftrag geht in die Überprüfungsphase über, die bis zu ein paar Minuten dauern kann.
  4. Die Tokenanzahl für einen neuen Auftrag wird mit dem aktuell verfügbaren Kontingent abgeglichen.
  5. Der neue Batchauftrag schlägt fehl mit der Fehlermeldung, dass das Tokenlimit überschritten wurde.

Neues Verhalten:

  1. Große Batchaufträge werden bereits ausgeführt und verwenden alle verfügbaren Token für Ihre Bereitstellung.
  2. Ein neuer Batchauftrag wird übermittelt.
  3. Die ungefähre Tokenanzahl des neuen Auftrags wird sofort mit dem aktuell verfügbaren Batchkontingent abgeglichen, und es wird ein Fail-Fast ausgeführt, damit Sie Wiederholungen einfacher programmgesteuert behandeln können.

Regionsunterstützung

Die folgenden Regionen unterstützen das neue Fail-Fast-Verhalten:

  • australiaeast
  • eastus
  • Deutschland West-Zentral
  • italiennord
  • Northcentralus
  • Polenzentral
  • schwedencentral
  • SchweizNord
  • Eastus2
  • westus

Der folgende Code veranschaulicht die grundlegende Mechanik der Behandlung des Fail-Fast-Verhaltens, um das Automatisieren von Wiederholungen und der Einreihung von Batchaufträgen in die Warteschlange mit exponentiellem Backoff zu ermöglichen.

Je nach Größe Ihrer Batchaufträge müssen Sie möglicherweise den max_retries erheblich erhöhen oder dieses Beispiel weiter anpassen.

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

Ausgabe:

⏳ 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
  }
}

Voraussetzungen

Vorbereiten der Batchdatei

Wie die Feinabstimmung verwendet der globale Batch Dateien im JSON-Zeilenformat (.jsonl). Im Folgenden finden Sie einige Beispieldateien mit unterschiedlichen Typen von unterstützten Inhalten:

Eingabeformat

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

custom_id ist erforderlich, damit Sie ermitteln können, welche einzelne Batchanforderung einer bestimmten Antwort entspricht. Antworten werden nicht in der Reihenfolge zurückgegeben, die in der .jsonl-Batchdatei definiert ist.

Das model-Attribut sollte so festgelegt werden, dass es mit dem Namen der globalen Batchbereitstellung übereinstimmt, auf die Sie für Rückschlussantworten abzielen möchten.

Von Bedeutung

Das model-Attribut muss so festgelegt werden, dass es mit dem Namen der globalen Batchbereitstellung übereinstimmt, die Sie als Ziel für Rückschlussantworten festlegen möchten. Derselbe globale Batchmodellbereitstellungsname muss in jeder Zeile der Batchdatei vorhanden sein. Wenn Sie eine andere Bereitstellung als Ziel festlegen möchten, müssen Sie dies in einer separaten Batchdatei bzw. einem separaten Batchauftrag tun.

Um eine optimale Leistung zu erzielen, empfehlen wir, große Dateien für die Batchverarbeitung zu übermitteln, anstatt eine große Anzahl kleiner Dateien mit nur wenigen Zeilen in jeder Datei.

Erstellen einer Eingabedatei

In diesem Artikel erstellen wir eine Datei mit dem Namen test.jsonl und kopieren den Inhalt aus dem obigen Standardeingabecodeblock in die Datei. Sie müssen den Namen Ihrer globalen Batchbereitstellung ändern und jeder Zeile der Datei hinzufügen.

Hochladen der Batchdatei

Nachdem Ihre Eingabedatei vorbereitet wurde, müssen Sie die Datei zuerst hochladen, um dann einen Batchauftrag initiieren zu können. Der Dateiupload kann sowohl programmgesteuert als auch über das Azure AI Foundry-Portal erfolgen. In diesem Beispiel wird das direkte Hochladen einer Datei in Ihre Azure OpenAI-Ressource veranschaulicht. Alternativ können Sie Azure Blob Storage für Azure OpenAI Batch konfigurieren.

Von Bedeutung

Verwenden Sie API-Schlüssel mit Vorsicht. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich. Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn sicher in Azure Key Vault. Weitere Informationen zur sicheren Verwendung von API-Schlüsseln in Ihren Apps finden Sie unter API-Schlüssel mit Azure Key Vault.

Weitere Informationen zur Sicherheit von KI-Diensten finden Sie unter Authentifizieren von Anforderungen an Azure AI-Dienste.

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

Im obigen Code wird ein bestimmter Dateipfad für die Datei „test.jsonl“ vorausgesetzt. Passen Sie diesen Dateipfad nach Bedarf an Ihr lokales System an.

Durch das Hinzufügen der optionalen "expires_after.seconds=1209600"- und "expires_after.anchor=created_at"-Parameter wird festgelegt, dass die Uploaddatei in 14 Tagen abläuft. Es gibt eine maximale Grenze von 500 Batchdateien pro Ressource, wenn kein Ablauf festgelegt ist. Durch Festlegen eines Werts für den Ablauf wird die Anzahl der Batchdateien pro Ressource auf 10.000 Dateien pro Ressource erhöht. Sie können eine Zahl zwischen 1209600 und 2592000 festlegen. Dies entspricht 14-30 Tagen.

Ausgabe:

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

Status für den Dateiupload nachverfolgen

Je nach Größe der Uploaddatei kann es einige Zeit dauern, bis sie vollständig hochgeladen und verarbeitet wird. Um den Status Ihres Dateiuploads zu überprüfen, führen Sie Folgendes aus:

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

Ausgabe:

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

Erstellen des Batchauftrags

Nachdem die Datei erfolgreich hochgeladen wurde, können Sie die Datei zur Batchverarbeitung übermitteln.

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

Das standardmäßige Limit für maximal 500 Dateien pro Ressource gilt auch für Ausgabedateien. Hier können Sie optional "output_expires_after":{"seconds": 1209600}, und "anchor": "created_at" hinzufügen, damit Ihre Ausgabedateien in 14 Tagen ablaufen. Durch Festlegen eines Werts für den Ablauf wird die Anzahl der Batchdateien pro Ressource auf 10.000 Dateien pro Ressource erhöht.

Hinweis

Derzeit muss das Abschlussfenster auf 24h festgelegt sein. Wenn Sie einen anderen Wert als 24h festlegen, wird Ihr Auftrag fehlschlagen. Aufträge, die länger als 24 Stunden dauern, werden bis zur Kündigung weiterhin ausgeführt.

Ausgabe:

{
  "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"
}

Fortschritt eines Batchauftrags verfolgen

Nachdem Sie den Batchauftrag erfolgreich erstellt haben, können Sie den Fortschritt entweder im Studio oder programmgesteuert überwachen. Beim Überprüfen des Fortschritts des Batchauftrags wird empfohlen, mindestens 60 Sekunden zwischen jedem Statusabruf zu warten.

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

Ausgabe:

{
  "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"
}

Die folgenden Statuswerte sind möglich:

Status Beschreibung
validating Die Eingabedatei wird überprüft, bevor die Stapelverarbeitung beginnen kann.
failed Fehler beim Überprüfen der Eingabedatei.
in_progress Die Eingabedatei wurde erfolgreich überprüft, und der Batch wird zurzeit ausgeführt.
finalizing Der Batch wurde abgeschlossen, und die Ergebnisse werden vorbereitet.
completed Der Batch wurde abgeschlossen, und die Ergebnisse sind bereit.
expired Der Batch konnte nicht innerhalb des 24-Stunden-Zeitfensters abgeschlossen werden.
cancelling Der Batch wird cancelled (es kann bis zu 10 Minuten dauern, bis dies wirksam wird).
cancelled Der Batch ist cancelled.

Abrufen der Ausgabedatei eines Batchauftrags

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

Zusätzliche Batchbefehle

Batch abbrechen

Hiermit wird ein laufender Batch abgebrochen. Der Batch befindet sich bis zu 10 Minuten lang im Status cancelling, bevor er zu cancelled wechselt. Hier sind Teilergebnisse (falls vorhanden) in der Ausgabedatei verfügbar.

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

Auflisten von Batches

Listet vorhandene Batchaufträge für eine bestimmte Azure OpenAI-Ressource auf.

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

Der Listen-API-Aufruf wird paginiert. Die Antwort enthält eine boolesche has_more-Angabe, wann mehr Ergebnisse zum Durchlaufen vorhanden sind.

Auflisten von Batches (Vorschau)

Verwenden Sie die REST-API, um alle Batchaufträge mit zusätzlichen Sortier-/Filteroptionen aufzulisten.

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

Um den Fehler zu vermeiden, werden URL rejected: Malformed input to a URL function-Leerzeichen durch %20ersetzt.

Batch-Grenzwerte

Name des Grenzwerts Grenzwert
Maximale Anzahl von Dateien pro Ressource 500
Maximale Größe der Eingabedatei 200 MB
Maximale Anforderungen pro Datei 100,000

Batch-Kontingent

Die Tabelle zeigt den Grenzwert für ein Batchkontingent. Kontingentwerte für eine globale Charge werden durch eingereihte Tokens dargestellt. Wenn Sie eine Datei zur Batchverarbeitung übermitteln, wird die Anzahl der in der Datei vorhandenen Tokens gezählt. Bis der Batchauftrag einen endgültigen Status erreicht, werden diese Tokens auf Ihren Gesamtgrenzwert der Tokens in der Warteschlange angerechnet.

Globale Batches

Modell Unternehmensvertrag Standard Monatliche Abonnements mit Kreditkarte MSDN-Abonnements Azure für Studenten, Kostenlose Testversionen
gpt-4.1 5 B 200 Mio. 50 Millionen 90 K Nicht verfügbar
gpt-4.1 mini 15B 1B 50 Millionen 90k Nicht verfügbar
gpt-4.1-nano 15 B 1 Mrd. 50 Millionen 90 K Nicht verfügbar
gpt-4o 5 B 200 Mio. 50 Millionen 90 K Nicht verfügbar
gpt-4o-mini 15 B 1 Mrd. 50 Millionen 90 K Nicht verfügbar
gpt-4-turbo 300 Millionen 80 Mio. 40 M 90 K Nicht verfügbar
gpt-4 150 M 30 M 5 Millionen 100 Tsd. Nicht verfügbar
gpt-35-turbo 10 Mrd. 1 Mrd. 100 M 2 Mio. 50.000
o3-mini 15 B 1 Mrd. 50 Millionen 90 K Nicht verfügbar
o4-mini 15 B 1 Mrd. 50 Millionen 90 K Nicht verfügbar

B = Milliarde | M = Million | K = Tausend

Datenzonenbatch

Modell Unternehmensvertrag Standard Monatliche Abonnements mit Kreditkarte MSDN-Abonnements Azure für Studenten, Kostenlose Testversionen
gpt-4.1 500 Mio. 30 M 30 M 90 K Nicht verfügbar
gpt-4.1-mini 1,5 B 100 M 50 Millionen 90 K Nicht verfügbar
gpt-4o 500 Mio. 30 M 30 M 90 K Nicht verfügbar
gpt-4o-mini 1,5 B 100 M 50 Millionen 90 K Nicht verfügbar
o3-mini 1,5 B 100 M 50 Millionen 90 K Nicht verfügbar

Batch-Objekt

Eigentum Typ Definition
id Schnur
object Schnur batch
endpoint Schnur Der vom Batch verwendete API-Endpunkt
errors Objekt
input_file_id Schnur Die ID der Eingabedatei für den Batch
completion_window Schnur Der Zeitrahmen, in dem der Batch verarbeitet werden soll
status Schnur Der aktuelles Status des Batches. Mögliche Werte: validating, failed, in_progress, finalizing, completed, expired, cancelling, cancelled.
output_file_id Schnur Die ID der Datei, die die Ausgabedateien der erfolgreich ausgeführten Anforderungen enthält.
error_file_id Schnur Die ID der Datei, die die Ausgaben der fehlerhaften Anfragen enthält.
created_at integer Ein Zeitstempel, wann dieser Batch erstellt wurde (in Unix-Epochen).
in_progress_at integer Ein Zeitstempel, der den Start der Verarbeitung dieses Batches angibt (in Unix-Epochen).
expires_at integer Ein Zeitstempel, wann dieser Batch ablaufen wird (in Unix-Epochen).
finalizing_at integer Ein Zeitstempel, wann der Abschluss dieses Batches begonnen hat (in Unix-Epochen).
completed_at integer Ein Zeitstempel, wann der Abschluss dieses Batches begonnen hat (in Unix-Epochen).
failed_at integer Ein Zeitstempel, wann dieser Batch fehlgeschlagen ist (in Unix-Epochen).
expired_at integer Ein Zeitstempel, wann dieser Batch abgelaufen ist (in Unix-Epochen).
cancelling_at integer Ein Zeitstempel, der angibt, wann dieser Batch cancelling begonnen hat (in Unix-Epochen).
cancelled_at integer Ein Zeitstempel, wann dieser Batch cancelled wurde (in Unix-Epochen).
request_counts Objekt Objektstruktur:

totalganze Zahl
Die Gesamtanzahl der Anforderungen im Batch.
completedinteger
Die Anzahl der Anforderungen im Batch, die erfolgreich abgeschlossen wurden.
failedganze Zahl
Die Anzahl der Anforderungen im Batch, die fehlgeschlagen sind.
metadata Karte Ein Satz aus Schlüssel-Wert-Paaren, die an den Batch angefügt werden können. Diese Eigenschaft kann hilfreich sein, um zusätzliche Informationen zum Batch in einem strukturierten Format zu speichern.

Häufig gestellte Fragen (FAQ)

Können Bilder mit der Batch-API verwendet werden?

Diese Funktion ist auf bestimmte multimodale Modelle beschränkt. Derzeit unterstützt nur GPT-4o Bilder als Teil von Batchanforderungen. Bilder können als Eingabe entweder über eine Bild-URL oder eine base64-codierte Darstellung des Bilds bereitgestellt werden. Bilder für Stapelverarbeitung werden derzeit nicht mit GPT-4 Turbo unterstützt.

Kann ich die Batch-API mit fein abgestimmten Modellen verwenden?

Dies wird derzeit nicht unterstützt.

Kann ich die Batch-API für Einbettungsmodelle verwenden?

Dies wird derzeit nicht unterstützt.

Funktioniert die Inhaltsfilterung mit der globalen Batchbereitstellung?

Ja. Ähnlich wie bei anderen Bereitstellungstypen können Sie Inhaltsfilter erstellen und sie dem Bereitstellungstyp „globaler Batch“ zuordnen.

Kann ich zusätzliches Kontingent anfordern?

Ja, von der Kontingentseite im Azure AI Foundry-Portal. Die standardmäßige Kontingentzuweisung finden Sie im Artikel Kontingent und Grenzwerte.

Was geschieht, wenn die API meine Anforderung nicht innerhalb des 24-Stunden-Zeitrahmens abschließt?

Wir bemühen uns, diese Anforderungen innerhalb von 24 Stunden zu verarbeiten. Aufträge, die länger dauern, laufen nicht ab. Sie können den Auftrag jederzeit abbrechen. Wenn Sie den Auftrag abbrechen, werden alle verbleibenden Arbeiten abgebrochen, und alle bereits abgeschlossenen Arbeiten werden zurückgegeben. Abgeschlossene Arbeiten werden Ihnen in Rechnung gestellt.

Wie viele Anforderungen kann ich mithilfe von Batch in die Warteschlange stellen?

Für die Anzahl von Anforderungen, die Sie pro Batch verarbeiten können, gibt es keinen festen Grenzwert, sie hängt jedoch von Ihrem Kontingent für Token in der Warteschlange ab. Ihr Kontingent für Token in der Warteschlange schließt die maximale Anzahl von Eingabetoken ein, die Sie gleichzeitig in die Warteschlange einreihen können.

Sobald die Batchanforderung abgeschlossen wurde, wird Ihr Batchgrenzwert zurückgesetzt, da Ihre Eingabetokens gelöscht werden. Der Grenzwert hängt von der Anzahl der globalen Anforderungen in der Warteschlange ab. Wenn die Batch-API-Warteschlange Ihre Batches schnell verarbeitet, wird Ihr Batchgrenzwert schneller zurückgesetzt.

Problembehandlung

Ein Auftrag ist erfolgreich, wenn status den Wert Completed hat. Erfolgreiche Aufträge generieren weiterhin eine „error_file_id“, aber sie wird einer leeren Datei mit null Bytes zugeordnet.

Wenn ein Auftragsfehler auftritt, finden Sie in der errors-Eigenschaft Details:

"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
            },
        }

Fehlercodes

Fehlercode Definition
invalid_json_line Eine oder mehrere Zeilen in Ihrer Eingabedatei konnten nicht als gültiges JSON analysiert werden.

Stellen Sie sicher, dass keine Tippfehler vorhanden sind und dass öffnende und schließende Klammern und Anführungszeichen ordnungsgemäß gemäß JSON-Standard formatiert sind. Übermitteln Sie die Anforderung dann neu.
too_many_tasks Die Anzahl der Anforderungen in der Eingabedatei überschreitet den maximal zulässigen Wert von 100.000.

Stellen Sie sicher, dass die Gesamtanzahl der Anforderungen unter 100.000 liegt. Übermitteln Sie den Auftrag dann neu.
url_mismatch Entweder weist eine Zeile in der Eingabedatei eine URL auf, die nicht mit den restlichen Zeilen übereinstimmt, oder die in der Eingabedatei angegebene URL stimmt nicht mit der erwarteten Endpunkt-URL überein.

Stellen Sie sicher, dass alle Anforderungs-URLs identisch sind und dass sie mit der Endpunkt-URL übereinstimmen, die Ihrer Azure OpenAI-Bereitstellung zugeordnet ist.
model_not_found Der Name der Azure OpenAI-Modellimplementierung, der in der model-Eigenschaft der Eingabedatei angegeben wurde, wurde nicht gefunden.

Stellen Sie sicher, dass dieser Name auf eine gültige Azure OpenAI-Modellimplementierung verweist.
duplicate_custom_id Die benutzerdefinierte ID für diese Anforderung ist ein Duplikat der benutzerdefinierten ID in einer anderen Anforderung.
empty_batch Überprüfen Sie Ihre Eingabedatei, um sicherzustellen, dass der Parameter für die benutzerdefinierte ID für jede Anforderung im Batch eindeutig ist.
model_mismatch Der Name der Azure OpenAI-Modellimplementierung, der in der model-Eigenschaft dieser Anforderung in der Eingabedatei angegeben wurde, stimmt nicht mit dem Rest der Datei überein.

Stellen Sie sicher, dass alle Anforderungen im Batchpunkt auf dieselbe Azure OpenAI in Azure KI Foundry Models-Modellbereitstellung in der model Eigenschaft der Anforderung angewendet werden.
invalid_request Das Schema der Eingabezeile oder die Bereitstellungs-SKU ist ungültig.

Stellen Sie sicher, dass die Eigenschaften der Anforderung in Ihrer Eingabedatei den erwarteten Eingabeeigenschaften entsprechen und dass die SKU der Azure OpenAI-Bereitstellung für Batch-API-Anforderungen globalbatch lautet.
input_modified Die Blob-Eingabe wurde geändert, nachdem der Batch-Job übermittelt wurde.
input_no_permissions Es ist nicht möglich, auf das Eingabe-BLOB zuzugreifen. Überprüfen Sie die Berechtigungen und den Netzwerkzugriff zwischen dem Azure OpenAI-Konto und dem Azure Storage-Konto.

Bekannte Probleme

  • Ressourcen, die mit der Azure-Befehlszeilenschnittstelle (Command Line Interface, CLI) bereitgestellt werden, funktionieren nicht standardmäßig mit Azure OpenAI Global-Batch. Dies liegt an einem Problem, bei dem Ressourcen, die mit dieser Methode bereitgestellt werden, Endpunktdomänen aufweisen, die nicht dem Muster https://your-resource-name.openai.azure.com folgen. Dieses Problem lässt sich umgehen, indem eine neue Azure OpenAI-Ressource mithilfe einer der anderen gängigen Bereitstellungsmethoden bereitgestellt wird, die das Setup der Unterdomäne beim Bereitstellungsprozess ordnungsgemäß verarbeiten.

  • UTF-8-BOM-codierte jsonl Dateien werden nicht unterstützt. JSON-Zeilendateien sollten mit UTF-8 codiert werden. Die Verwendung von byte-Order-Mark (BOM)-codierten Dateien wird von der JSON RFC-Spezifikation nicht offiziell unterstützt, und Azure OpenAI behandelt derzeit BOM-codierte Dateien als ungültig. Eine UTF-8-BOM-codierte Datei gibt derzeit die generische Fehlermeldung zurück: "Überprüfung fehlgeschlagen: Ein gültiger Modellbereitstellungsname konnte nicht aus der Eingabedatei extrahiert werden. Stellen Sie sicher, dass jede Zeile in der Eingabedatei über einen gültigen Bereitstellungsnamen verfügt, der im Feld "Modell" angegeben ist und dass der Bereitstellungsname in allen Zeilen konsistent ist."

Siehe auch