Condividi tramite


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.

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-Preview)
  • gpt-4 (0125-Preview)

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

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.

È necessario includere 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ò causare la generazione di un flusso di spazio vuoto senza fine e la richiesta potrebbe essere eseguita continuamente fino a quando non raggiunge 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 verificare finish_reason la presenza del 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.