Freigeben über


Erste Schritte mit globalen 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. Globale Batchanforderungen verfügen über ein separates Tokenkontingent, das in die Warteschlange eingereiht wird, 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.

Wichtig

Wir bemühen uns, 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. Alle abgeschlossenen Arbeiten werden Ihnen in Rechnung gestellt.

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

Unterstützung für globalen Batch

Support für Region und Modell

Der globale Batch wird derzeit in den folgenden Regionen unterstützt:

Region gpt-4o, 2024-05-13 gpt-4o, 2024-08-06 gpt-4o-mini, 2024-07-18 gpt-4, 0613 gpt-4, turbo-2024-04-09 gpt-35-turbo, 0613 gpt-35-turbo, 1106 gpt-35-turbo, 0125
australiaeast
canadaeast
eastus
eastus2
northcentralus
southcentralus
southindia
swedencentral
switzerlandnorth
uksouth
westus
westus3

Die folgenden Modelle unterstützten den globalen Batch:

Modell Version Eingabeformat
gpt-4o 2024-08-06 Text + Bild
gpt-4o-mini 2024-07-18 Text + Bild
gpt-4o 2024-05-13 Text + Bild
gpt-4 turbo-2024-04-09 Text
gpt-4 0613 Text
gpt-35-turbo 0125 Text
gpt-35-turbo 1106 Text
gpt-35-turbo 0613 Text

Auf der Modellseite finden Sie aktuelle Informationen zu den Regionen/Modellen, für die der globale Batch derzeit unterstützt wird.

API-Unterstützung

API-Version
Neueste GA-API-Version: 2024-10-21
Letztes Release der API-Vorschauversion: 2024-10-01-preview

Support wurde zuerst hinzugefügt in: 2024-07-01-preview

Featureunterstützung

Folgendes wird derzeit nicht unterstützt:

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

Hinweis

Strukturierte Ausgaben werden jetzt mit dem globalen Batch unterstützt.

Globale Batchbereitstellung

Auf der Studio-Benutzeroberfläche wird der Bereitstellungstyp als Global-Batch angezeigt.

Screenshot: Dialogfeld „Modellimplementierung“ in Azure KI Studio mit hervorgehobenem Bereitstellungstyp „Global-Batch“.

Tipp

Es wird empfohlen, das dynamische Kontingent für alle globalen Batchmodellbereitstellungen zu aktivieren, um Auftragsfehler aufgrund unzureichender Kontingente für Token in der Warteschlange zu vermeiden. Das dynamische 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, das 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.

Wichtig

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, damit Sie dann einen Batchauftrag starten können. Der Dateiupload kann sowohl programmgesteuert als auch über Studio erfolgen.

  1. Melden Sie sich bei KI Studio 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: Erstellung von Batchaufträgen in Azure KI Studio.

  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: Hochladen einer Datei.

Erstellen des Batchauftrags

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

Screenshot: Erstellen eines Batchauftrags in der Benutzeroberfläche von Azure Studio.

Nachverfolgen des Fortschritts eines Batchauftrags

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 überprüft wird.

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

Screenshot: Status eines Batchauftrags in Azure KI Studio.

Abrufen einer 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: Schaltfläche zum Abbrechen eines Batchauftrags in Azure KI Studio.

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.

Wichtig

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, damit Sie dann einen Batchauftrag starten können. Der Dateiupload kann sowohl programmgesteuert als auch über Studio erfolgen. In diesem Beispiel werden Umgebungsvariablen anstelle der Schlüssel- und Endpunktwerte verwendet. Wenn Sie mit der Verwendung von Umgebungsvariablen mit Python nicht vertraut sind, sehen Sie sich eine der Schnellstartanleitungen an, in denen die Einrichtung der Umgebungsvariablen schrittweise erläutert wird.

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="2024-10-21"
)

# Upload a file with a purpose of "batch"
file = client.files.create(
  file=open("test.jsonl", "rb"), 
  purpose="batch"
)

print(file.model_dump_json(indent=2))
file_id = file.id

Ausgabe:

{
  "id": "file-9f3a81d899b4442f98b640e4bc3535dd",
  "bytes": 815,
  "created_at": 1722476551,
  "filename": "test.jsonl",
  "object": "file",
  "purpose": "batch",
  "status": null,
  "status_details": null
}

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

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

print(batch_response.model_dump_json(indent=2))

Hinweis

Derzeit muss das Abschlussfenster auf 24 Stunden festgelegt sein. Wenn Sie einen anderen Wert als 24 Stunden festlegen, schlägt Ihr Auftrag fehl. Aufträge, die länger als 24 Stunden dauern, werden bis zum Abbrechen weiter ausgeführt.

Ausgabe:

{
  "id": "batch_6caaf24d-54a5-46be-b1b7-518884fcbdde",
  "completion_window": "24h",
  "created_at": 1722476583,
  "endpoint": null,
  "input_file_id": "file-9f3a81d899b4442f98b640e4bc3535dd",
  "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
  }
}

Nachverfolgen des Fortschritts eines Batchauftrags

Nachdem Sie den Batchauftrag erfolgreich erstellt haben, können Sie den Fortschritt entweder in 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 10 Minuten dauern, bis dies wirksam wird).
cancelled der Batch wurde cancelled.

So überprüfen Sie die Auftragsstatusdetails, die Sie ausführen können:

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. Verwenden Sie die error_file_id für das Debuggen von Problemen, die mit Ihrem Batchauftrag auftreten.

Abrufen einer 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:

Aus Platzgründen beziehen wir nur eine einzelne Antwort zum Chatabschluss als Ausgabe ein. 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

Batch auflisten

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 geben wir die generate_time_filter-Funktion an, 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 = "2024-10-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"
}

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.

Wichtig

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, damit Sie dann einen Batchauftrag starten können. Der Dateiupload kann sowohl programmgesteuert als auch über Studio erfolgen. In diesem Beispiel werden Umgebungsvariablen anstelle der Schlüssel- und Endpunktwerte verwendet. Wenn Sie mit der Verwendung von Umgebungsvariablen mit Python nicht vertraut sind, sehen Sie sich eine der Schnellstartanleitungen an, in denen die Einrichtung der Umgebungsvariablen schrittweise erläutert wird.

Wichtig

Wenn Sie einen API-Schlüssel verwenden, speichern Sie ihn an einer anderen Stelle sicher, z. B. in Azure Key Vault. Fügen Sie den API-Schlüssel nicht direkt in Ihren Code ein, und machen Sie ihn nicht öffentlich zugänglich.

Weitere Informationen zur Sicherheit von KI Services finden Sie unter Authentifizieren von Anforderungen an Azure KI Services.

curl -X POST https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files?api-version=2024-10-21 \
  -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"

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.

Ausgabe:

{
  "status": "pending",
  "bytes": 686,
  "purpose": "batch",
  "filename": "test.jsonl",
  "id": "file-21006e70789246658b86a1fc205899a4",
  "created_at": 1721408291,
  "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. So überprüfen Sie den Status für den Dateiupload:

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files/{file-id}?api-version=2024-10-21 \
  -H "api-key: $AZURE_OPENAI_API_KEY"

Ausgabe:

{
  "status": "processed",
  "bytes": 686,
  "purpose": "batch",
  "filename": "test.jsonl",
  "id": "file-21006e70789246658b86a1fc205899a4",
  "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=2024-10-21 \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input_file_id": "file-abc123",
    "endpoint": "/chat/completions",
    "completion_window": "24h"
  }'

Hinweis

Derzeit muss das Abschlussfenster auf 24 Stunden festgelegt sein. Wenn Sie einen anderen Wert als 24 Stunden festlegen, schlägt Ihr Auftrag fehl. Aufträge, die länger als 24 Stunden dauern, werden bis zum Abbrechen weiter 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"
}

Nachverfolgen des Fortschritts eines Batchauftrags

Nachdem Sie den Batchauftrag erfolgreich erstellt haben, können Sie den Fortschritt entweder in 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=2024-10-21 \
  -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 wurde cancelled.

Abrufen einer Ausgabedatei eines Batchauftrags

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/files/{output_file_id}/content?api-version=2024-10-21 \
  -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 https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches/{batch_id}/cancel?api-version=2024-10-21 \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

Batch auflisten

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

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/batches?api-version=2024-10-21 \
  -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=2024-10-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.

Grenzwerte für einen globalen Batch

Name des Grenzwerts Wert des Grenzwerts
Maximale Anzahl von Dateien pro Ressource 500
Maximale Größe der Eingabedatei 200 MB
Maximale Anforderungen pro Datei 100.000

Kontingent für globalen Batch

Die Tabelle zeigt den Grenzwert für ein Batchkontingent. Kontingentwerte für einen globalen Batch werden als Tokens in der Warteschlange 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.

Modell Enterprise Agreement Standard Monatliche Abonnements mit Kreditkarte MSDN-Abonnements Microsoft Azure for Students, Free Testversionen
gpt-4o 5 B 200 Mio. 50 M 90 K N/V
gpt-4o-mini 15 B 1 Mrd. 50 M 90 K N/V
gpt-4-turbo 300 M 80 Mio. 40 M 90 K N/V
gpt-4 150 M 30 M 5 M 100 N/V
gpt-35-turbo 10 Mrd. 1 Mrd. 100 M 2 M 50

Mrd. = Milliarde | M = Million | K = Tausend

Batchobjekt

Eigenschaft type Definition
id Zeichenfolge
object Zeichenfolge batch
endpoint Zeichenfolge Der vom Batch verwendete API-Endpunkt
errors Objekt
input_file_id Zeichenfolge Die ID der Eingabedatei für den Batch
completion_window Zeichenfolge Der Zeitrahmen, in dem der Batch verarbeitet werden soll
status Zeichenfolge Der aktuelles Status des Batches. Mögliche Werte: validating, failed, in_progress, finalizing, completed, expired, cancelling, cancelled.
output_file_id Zeichenfolge Die ID der Datei, die die Ausgabe der erfolgreich ausgeführten Anforderungen enthält.
error_file_id Zeichenfolge Die ID der Datei, die die Ausgabe der fehlerhaften Anforderungen enthält.
created_at integer Ein Zeitstempel, wann dieser Batch erstellt wurde (in Unix-Epochen).
in_progress_at integer Ein Zeitstempel, wann dieser Batch mit dem Fortschritt begonnen hat (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, wann das cancelling für diesen Batch begonnen hat (in Unix-Epochen).
cancelled_at integer Ein Zeitstempel, wann dieser Batch cancelled wurde (in Unix-Epochen).
request_counts Objekt Objektstruktur:

total ganze Zahl
Die Gesamtanzahl der Anforderungen im Batch.
completed ganze Zahl
Die Anzahl der Anforderungen im Batch, die erfolgreich abgeschlossen wurden.
failed ganze 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 einen Batch 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, auf der Seite für das Kontingent in der Studio-Benutzeroberfläche. 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?

Es gibt keine feste Grenze für die Anzahl der Anforderungen, die Sie per Batch verarbeiten können, aber es hängt von Ihrem Kontingent von Tokens in der Warteschlange ab. Ihr Kontingent von Tokens in der Warteschlange enthält die maximale Anzahl von Eingabetokens, 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 Details zum Fehler in der errors-Eigenschaft:

"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 Batch auf dieselbe AOAI-Modellimplementierung in der model-Eigenschaft der Anforderung verweisen.
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.

Bekannte Probleme

  • Ressourcen, die mit der Azure CLI bereitgestellt werden, sind beim globalen Azure OpenAI-Batch nicht sofort einsatzbereit. 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.

Siehe auch