Saiba como usar o modo JSON
O modo JSON permite definir o formato de resposta dos modelos para retornar um objeto JSON válido como parte de uma conclusão de bate-papo. Embora a geração de JSON válido fosse possível anteriormente, poderia haver problemas com a consistência da resposta que levariam à geração de objetos JSON inválidos.
Nota
Embora o modo JSON ainda seja suportado, quando possível, recomendamos o uso de saídas estruturadas. Como as saídas estruturadas do modo JSON geram JSON válido, mas com o benefício adicional de que você pode restringir o modelo a usar um esquema JSON específico.
Nota
Atualmente, as saídas estruturadas não são suportadas no cenário bring your own data .
Suporte ao modo JSON
Atualmente, o modo JSON só é suportado com os seguintes modelos:
Modelos suportados
gpt-35-turbo
(1106)gpt-35-turbo
(0125)gpt-4
(1106-Pré-visualização)gpt-4
(0125-Pré-visualização)gpt-4o
gpt-4o-mini
Suporte de API
O suporte para o modo JSON foi adicionado pela primeira vez na versão da API 2023-12-01-preview
Exemplo
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)
Saída
{
"winner": "Los Angeles Dodgers",
"event": "World Series",
"year": 2020
}
Há dois fatores-chave que precisam estar presentes para usar com êxito o modo JSON:
response_format={ "type": "json_object" }
- Dissemos ao modelo para produzir JSON como parte da mensagem do sistema.
É necessário incluir orientação para o modelo que deve produzir JSON como parte da conversa de mensagens. Recomendamos adicionar instruções como parte da mensagem do sistema. De acordo com a OpenAI, a falha em adicionar essa instrução pode fazer com que o modelo "gere um fluxo interminável de espaço em branco e a solicitação pode ser executada continuamente até atingir o limite de token".
A não inclusão de "JSON" nas mensagens retorna:
Saída
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}}
Outras considerações
Você deve verificar finish_reason
o valor length
antes de analisar a resposta. O modelo pode gerar JSON parcial. Isso significa que a saída do modelo foi maior do que os max_tokens disponíveis que foram definidos como parte da solicitação ou que a própria conversa excedeu o limite de token.
O modo JSON produz JSON válido e analisa sem erros. No entanto, não há garantia de que a saída corresponda a um esquema específico, mesmo se solicitado no prompt.