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.