Share via


Erfahren Sie, wie Sie den JSON-Modus verwenden

Im JSON-Modus können Sie das Antwortformat der Modelle festlegen, um ein gültiges JSON-Objekt als Teil eines Chatabschlusses zurückzugeben. Bisher war es zwar möglich, gültiges JSON zu generieren, aber es konnte Probleme mit der Antwortkonsistenz geben, die dazu führten, dass ungültige JSON-Objekte generiert wurden.

Unterstützung des JSON-Modus

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

Unterstützte Modelle

  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (1106-Vorschau)
  • gpt-4 (0125-Preview)

API-Unterstützung

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

Beispiel

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-03-01-preview"
)

response = client.chat.completions.create(
  model="gpt-4-0125-Preview", # Model = should match the deployment name you chose for your 0125-Preview 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)

Output

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

Es gibt zwei wichtige Faktoren, die vorhanden sein müssen, um den JSON-Modus erfolgreich zu verwenden:

  • response_format={ "type": "json_object" }
  • Wir haben dem Modell mitgeteilt, JSON als Teil der Systemmeldung auszugeben.

Das Einschließen von Anleitungen für das Modell, das JSON als Teil der Nachrichtenunterhaltung erzeugen soll, ist erforderlich. Es wird empfohlen, diese Anweisung zur Systemmeldung hinzuzufügen. Laut OpenAI kann das Versäumnis, diese Anweisung hinzuzufügen, dazu führen, dass das Modell „einen nicht enden wollenden Strom von Leerzeichen generiert und die Anfrage ununterbrochen läuft, bis sie das Tokenlimit erreicht.“

Fehler beim Einschließen von „JSON“ in die Nachrichten:

Output

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

Andere Aspekte

Sie sollten finish_reason auf den Wert length überprüfen, bevor Sie die Antwort analysieren. Das Modell generiert möglicherweise eine partielle JSON-Ausgabe. Dies bedeutet, dass die Ausgabe des Modells größer war als die verfügbaren max_tokens, die als Teil der Anfrage festgelegt wurden, oder die Konversation selbst hat das Token-Limit überschritten.

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