Saiba como usar o modo JSON
O modo JSON permite que você defina o formato de resposta de modelos para retornar um objeto JSON válido como parte de uma conclusão de chat. Embora a geração de JSON válido fosse possível anteriormente, poderia haver problemas com a consistência das respostas que levariam à geração de objetos JSON inválidos.
Observação
Embora o modo JSON ainda seja compatível, sempre que possível, recomendamos o uso de saídas estruturadas. Assim como o modo JSON, as saídas estruturadas geram JSON válido, mas com o benefício adicional de que você pode restringir o modelo para usar um esquema JSON específico.
Observação
Atualmente, as saídas estruturadas não são compatíveis com o cenário traga seus próprios dados.
Suporte ao modo JSON
Atualmente, o modo JSON só tem suporte com os seguintes modelos:
Modelos com suporte
gpt-35-turbo
(1106)gpt-35-turbo
(0125)gpt-4
(1106-preview)gpt-4
(0125-Preview)gpt-4o
gpt-4o-mini
Suporte a 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 importantes que precisam estar presentes para se usar com êxito o modo JSON:
response_format={ "type": "json_object" }
- Dissemos ao modelo para gerar JSON como parte da mensagem do sistema.
A inclusão de diretrizes para o modelo de que ele deve produzir JSON como parte da conversa de mensagens é necessária. Recomendamos adicionar instruções como parte da mensagem do sistema. De acordo com OpenAI, falha ao adicionar essa instrução pode fazer com que o modelo "gere um fluxo sem fim de espaço em branco e a solicitação pode ser executada continuamente até atingir o limite do token."
Falha ao incluir "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
quanto ao valor length
antes de analisar a resposta. O modelo pode gerar JSON parcial. Isso significa que a saída do modelo era maior do que os max_tokens disponíveis que foram definidos como parte da solicitação ou a conversa em si excedeu o limite de tokens.
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.