Partilhar via


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.