Share via


Aprenda a usar el modo JSON

El modo JSON permite establecer el formato de respuesta de los modelos para devolver un objeto JSON válido como parte de una finalización del chat. Aunque la generación de JSON válido era posible antes, podría haber problemas con la coherencia de la respuesta que provocaría que se generaran objetos JSON no válidos.

Compatibilidad con el modo JSON

El modo JSON solo es compatible actualmente con los siguientes modelos:

Modelos admitidos

  • gpt-35-turbo (1106)
  • gpt-35-turbo (0125)
  • gpt-4 (1106-Preview)
  • gpt-4 (0125-Preview)

Compatibilidad con API

La compatibilidad con el modo JSON se agregó por primera vez en la versión de API 2023-12-01-preview

Ejemplo

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)

Output

{
  "winner": "Los Angeles Dodgers",
  "event": "World Series",
  "year": 2020
}

Hay dos factores clave que deben estar presentes para usar correctamente el modo JSON:

  • response_format={ "type": "json_object" }
  • Hemos dicho al modelo que genere JSON como parte del mensaje del sistema.

Se requieren instrucciones para el modelo que debe generar JSON como parte de la conversación de mensajes. Se recomienda agregar instrucciones como parte del mensaje del sistema. Según el error de OpenAI, agregar esta instrucción puede provocar que el modelo "genere una secuencia de espacios en blanco no deseada y la solicitud se ejecute continuamente hasta que alcance el límite del token".

Si no se incluye "JSON" en los mensajes se devuelve:

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}}

Otras consideraciones

Debe comprobar finish_reason para el valor length antes de analizar la respuesta. El modelo puede generar JSON parcial. Esto significa que la salida del modelo era mayor que la max_tokens disponible que se establecieron como parte de la solicitud, o la propia conversación superó el límite de tokens.

El modo JSON genera JSON que es válido y analiza sin errores. Sin embargo, no hay ninguna garantía de que la salida coincida con un esquema específico, incluso si se solicita en el mensaje.