Erfahren Sie, wie Sie den JSON-Modus verwenden.

Im JSON-Modus können Sie das Antwortformat des Modells festlegen, um ein gültiges JSON-Objekt als Teil eines Chatabschlusses zurückzugeben. Während das Generieren gültiger JSON-Dateien zuvor möglich war, können Probleme mit der Antwortkonsistenz auftreten, die zu ungültigen JSON-Objekten führen würden, die generiert werden.

Der JSON-Modus garantiert eine gültige JSON-Ausgabe, garantiert jedoch nicht, dass die Ausgabe mit einem bestimmten Schema übereinstimmt. Wenn Sie Schemagarantien benötigen, verwenden Sie Strukturierte Ausgaben.

Hinweis

Während der JSON-Modus weiterhin unterstützt wird, empfehlen wir nach Möglichkeit die Verwendung strukturierter Ausgaben. Im JSON-Modus generierte strukturierte Ausgaben erzeugen gültiges JSON, haben jedoch den zusätzlichen Vorteil, dass Sie das Modell auf die Verwendung eines bestimmten JSON-Schemas beschränken können.

Hinweis

Derzeit werden strukturierte Ausgaben im "Bring Your Own Data"-Szenario nicht unterstützt.

Unterstützung des JSON-Modus

Der JSON-Modus wird derzeit nur mit den folgenden Modellen unterstützt:

API-Unterstützung

Unterstützung für den JSON-Modus wurde zuerst in der API-Version 2023-12-01-preview hinzugefügt.

Beispiel

Bevor Sie die Beispiele ausführen:

  • Ersetzen Sie YOUR-RESOURCE-NAME durch Ihren Azure OpenAI-Ressourcennamen.
  • Ersetzen Sie YOUR-MODEL_DEPLOYMENT_NAME durch den Namen Ihrer Modellbereitstellung.

Die folgenden Beispiele zeigen den JSON-Modus mit den Python und .NET SDKs und PowerShell für direkte REST-Interaktion.

import os
from openai import OpenAI

client = OpenAI(
  base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
  api_key=os.getenv("AZURE_OPENAI_API_KEY")
)

response = client.chat.completions.create(
  model="YOUR-MODEL_DEPLOYMENT_NAME", # Model = should match the deployment name you chose for your model deployment
  response_format={ "type": "json_object" },
  messages=[
    {"role": "system", "content": "You are a helpful assistant designed to output JSON."},
    {"role": "user", "content": "Who won the world series in 2020?"}
  ]
)
print(response.choices[0].message.content)

Ausgabe

{
  "winner": "Los Angeles Dodgers",
  "event": "World Series",
  "year": 2020
}

Zwei Anforderungen müssen erfüllt sein, um den JSON-Modus erfolgreich zu verwenden:

  • Legen Sie das Antwortformat in Ihrer Anforderung fest json_object . In Python geben Sie response_format={ "type": "json_object" } an; in .NET verwenden Sie ChatResponseFormat.CreateJsonObjectFormat(); in PowerShell setzen Sie response_format = @{type = 'json_object'} ein.
  • Fügen Sie das Wort "JSON" irgendwo in die Nachrichtenkonversation ein (in der Regel die Systemnachricht).

Das Einfügen von Anweisungen für das Modell, JSON als Teil der Nachrichtenkonversation zu erzeugen, ist erforderlich. Es wird empfohlen, diese Anweisung als Teil der Systemmeldung hinzuzufügen. Laut OpenAI kann die Nichthinzufügung dieser Anweisung dazu führen, dass das Modell "einen unendlichen Datenstrom aus Leerzeichen generiert, und die Anforderung kontinuierlich ausgeführt wird, bis sie den Tokengrenzwert erreicht".

Das Nicht-Einbeziehen von "JSON" in die Nachrichten führt zu:

Ausgabe

BadRequestError: Error code: 400 - {'error': {'message': "'messages' must contain the word 'json' in some form, to use 'response_format' of type 'json_object'.", 'type': 'invalid_request_error', 'param': 'messages', 'code': None}}

Weitere Überlegungen

Sie sollten finish_reason auf den Wert length prüfen, bevor Sie die Antwort parsen. Das Modell kann teilweise JSON generieren. Dies bedeutet, dass die Ausgabe des Modells größer als die verfügbaren max_tokens war, die als Teil der Anforderung festgelegt wurden oder die Unterhaltung selbst den Tokengrenzwert überschritten hat.

Der JSON-Modus erzeugt JSON, der gültig ist und ohne Fehler analysiert wird. Es gibt jedoch keine Garantie dafür, dass die Ausgabe mit einem bestimmten Schema übereinstimmt, auch wenn sie in der Eingabeaufforderung angefordert wird.

Problembehandlung

  • Wenn finish_reason ist length, vergrößern Sie max_tokens (oder reduzieren Sie die Eingabelänge), und versuchen Sie es erneut. Analysieren Sie keinen partiellen JSON-Code.
  • Wenn Sie Schemagarantien benötigen, wechseln Sie zu strukturierten Ausgaben.