Informazioni su come usare la modalità JSON
La modalità JSON consente di impostare il formato di risposta dei modelli per restituire un oggetto JSON valido come parte del completamento di una chat. Durante la generazione di codice JSON valido è stato possibile in precedenza, potrebbero verificarsi problemi con la coerenza della risposta che causava la generazione di oggetti JSON non validi.
Nota
Per quanto la modalità JSON sia ancora supportata, quando possibile consigliamo di usare gli output strutturati. Come la modalità JSON, gli output strutturati generano JSON validi, ma con il vantaggio aggiuntivo che è possibile vincolare il modello all'utilizzo di uno schema JSON specifico.
Nota
Attualmente, gli output strutturati non sono supportati nello scenario Bring Your Own Data.
Supporto della modalità JSON
La modalità JSON è attualmente supportata solo con i modelli seguenti:
Modelli supportati
gpt-35-turbo
(1106)gpt-35-turbo
(0125)gpt-4
(1106-anteprima)gpt-4
(0125-anteprima)gpt-4o
gpt-4o-mini
Supporto dell'API
Il supporto per la modalità JSON è stato aggiunto per la prima volta nella versione dell'API 2023-12-01-preview
Esempio
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
}
Esistono due fattori chiave che devono essere presenti per usare correttamente la modalità JSON:
response_format={ "type": "json_object" }
- È stato detto al modello di restituire JSON come parte del messaggio di sistema.
È necessaria l'inclusione di indicazioni sul modello che deve produrre JSON come parte della conversazione dei messaggi. È consigliabile aggiungere istruzioni come parte del messaggio di sistema. In base all'errore OpenAI di aggiungere questa istruzione, il modello può "generare un flusso non completo di spazi vuoti e la richiesta potrebbe essere eseguita continuamente fino a raggiungere il limite di token".
L'errore di includere "JSON" all'interno dei messaggi restituisce:
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}}
Altre considerazioni
È necessario controllare finish_reason
per il valore length
prima di analizzare la risposta. Il modello potrebbe generare codice JSON parziale. Ciò significa che l'output del modello è maggiore del max_tokens disponibile impostato come parte della richiesta oppure la conversazione stessa ha superato il limite di token.
La modalità JSON produce JSON valido e analizza senza errori. Tuttavia, non esiste alcuna garanzia che l'output corrisponda a uno schema specifico, anche se richiesto nel prompt.