Share via


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.

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)

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

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.