Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La modalità JSON consente di impostare il formato di risposta del modello per restituire un oggetto JSON valido come parte del completamento di una chat. Sebbene fosse possibile generare JSON valido in precedenza, si potevano verificare problemi con la coerenza della risposta che portavano alla generazione di oggetti JSON non validi.
La modalità JSON garantisce un output JSON valido, ma non garantisce che l'output corrisponda a uno schema specifico. Se sono necessarie garanzie di schema, usare Output Strutturati.
Nota
Anche se la modalità JSON è ancora supportata, quando possibile è consigliabile usare output strutturati. Come gli output strutturati in modalità JSON generano codice JSON valido, ma con il vantaggio aggiunto che è possibile vincolare il modello per usare uno schema JSON specifico.
Nota
Gli output strutturati non sono attualmente supportati nello scenario bring your own data .
Supporto della modalità JSON
La modalità JSON è attualmente supportata solo con i modelli seguenti:
Supporto API
Il supporto per la modalità JSON è stato aggiunto per la prima volta nella versione dell'API 2023-12-01-preview
Esempio
Prima di eseguire gli esempi:
- Sostituire
YOUR-RESOURCE-NAMEcon il nome della risorsa OpenAI Azure. - Sostituire
YOUR-MODEL_DEPLOYMENT_NAMEcon il nome della distribuzione del modello.
Gli esempi seguenti illustrano la modalità JSON usando gli SDK Python e .NET e PowerShell per l'interazione REST diretta.
import os
from openai import OpenAI
client = OpenAI(
base_url="https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",
api_key=os.getenv("AZURE_OPENAI_API_KEY")
)
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
}
Per usare correttamente la modalità JSON, è necessario soddisfare due requisiti:
- Impostare il formato di risposta su
json_objectnella richiesta. In Python passareresponse_format={ "type": "json_object" }; in .NET usareChatResponseFormat.CreateJsonObjectFormat(); in PowerShell impostareresponse_format = @{type = 'json_object'}. - Includere la parola "JSON" da qualche parte nella conversazione dei messaggi (in genere il messaggio di sistema).
È necessario includere indicazioni sul modello che deve produrre JSON come parte della conversazione dei messaggi. È consigliabile aggiungere questa istruzione come parte del messaggio di sistema. In base a OpenAI, l'impossibilità di aggiungere questa istruzione può causare la generazione di un flusso non completo di spazi vuoti e la richiesta potrebbe essere eseguita continuamente fino a quando non raggiunge il limite di token.
La mancata inclusione di "JSON" nei 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.
Risoluzione dei problemi
- Se
finish_reasonèlength, aumentaremax_tokens(o ridurre la lunghezza del prompt) e riprovare. Non analizzare JSON parziale. - Se sono necessarie garanzie di schema, passare a Output strutturati.