Lär dig hur du använder JSON-läge
Med JSON-läge kan du ange modellsvarsformatet för att returnera ett giltigt JSON-objekt som en del av en chatt. Det gick att generera giltig JSON tidigare, men det kan finnas problem med svarskonsekvens som skulle leda till att ogiltiga JSON-objekt genereras.
Kommentar
JSON-läget stöds fortfarande, men när det är möjligt rekommenderar vi att du använder strukturerade utdata. Precis som strukturerade JSON-lägesutdata genererar giltiga JSON, men med den extra fördelen att du kan begränsa modellen till att använda ett specifikt JSON-schema.
Kommentar
För närvarande stöds inte strukturerade utdata i bring your own data scenario.
Stöd för JSON-läge
JSON-läget stöds endast för närvarande med följande modeller:
Modeller som stöds
gpt-35-turbo
(1106)gpt-35-turbo
(0125)gpt-4
(1106-förhandsversion)gpt-4
(0125-Preview)gpt-4o
gpt-4o-mini
API-stöd
Stöd för JSON-läge lades först till i API-version 2023-12-01-preview
Exempel
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
}
Det finns två viktiga faktorer som måste finnas för att kunna använda JSON-läge:
response_format={ "type": "json_object" }
- Vi sa till modellen att mata ut JSON som en del av systemmeddelandet.
Det krävs vägledning för modellen som ska producera JSON som en del av konversationen med meddelanden. Vi rekommenderar att du lägger till instruktioner som en del av systemmeddelandet. Enligt OpenAI-misslyckandet med att lägga till den här instruktionen kan modellen "generera en avaktiveringsström med blanksteg och begäran kan köras kontinuerligt tills den når tokengränsen".
Det gick inte att inkludera "JSON" i meddelandena returnerar:
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}}
Övriga beaktanden
Du bör söka efter finish_reason
värdet length
innan du parsar svaret. Modellen kan generera partiell JSON. Det innebär att utdata från modellen var större än de tillgängliga max_tokens som angavs som en del av begäran, eller att själva konversationen överskred tokengränsen.
JSON-läge genererar JSON som är giltigt och parsar utan fel. Det finns dock ingen garanti för att utdata matchar ett visst schema, även om det begärs i prompten.