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.
Hinweis
Während der JSON-Modus weiterhin unterstützt wird, wird empfohlen, nach Möglichkeit strukturierte Ausgaben zu verwenden. Wie der JSON-Modus generieren strukturierte Ausgaben gültigen JSON-Code, aber mit dem zusätzlichen Vorteil, dass Sie das Modell auf die Verwendung eines bestimmten JSON-Schemas beschränken können.
Hinweis
Derzeit werden strukturierte Ausgaben für Szenarien mit eigenen Daten nicht unterstützt.
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)gpt-4o
gpt-4o-mini
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="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)
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.