OpenAI: Salidas estructuradas

Aprende a generar salidas estructuradas con OpenAI usando JSON Schema para respuestas consistentes y procesables en aplicaciones profesionales.

Aprende OpenAI GRATIS y certifícate

Salidas estructuradas con OpenAI

Las salidas estructuradas representan un avance fundamental en la interacción con modelos de lenguaje, permitiendo obtener respuestas en formatos predefinidos y consistentes. Mientras que las respuestas de texto libre son útiles para muchas aplicaciones, los sistemas profesionales requieren datos organizados que puedan procesarse automáticamente.

OpenAI ha desarrollado capacidades específicas para generar JSON estructurado, garantizando que las respuestas cumplan con esquemas predefinidos. Esta funcionalidad elimina la incertidumbre de parsear texto libre y proporciona la confiabilidad necesaria para integrar IA en aplicaciones de producción.

Fundamentos de las salidas estructuradas

Las salidas estructuradas transforman la naturaleza impredecible del texto generado en datos organizados y procesables. En lugar de recibir párrafos de texto que requieren interpretación manual, obtenemos objetos JSON que siguen esquemas específicos.

Esta aproximación resulta especialmente valiosa cuando necesitamos extraer información específica, generar datos para bases de datos, o crear respuestas que alimenten otros sistemas. La consistencia en el formato de salida permite automatizar completamente el procesamiento posterior.

from openai import OpenAI

client = OpenAI()

# Respuesta tradicional de texto libre
response = client.responses.create(
    model="gpt-4.1",
    input="Analiza este producto: iPhone 15 Pro"
)

print(response.output_text)
# Salida: "El iPhone 15 Pro es un smartphone premium con..."

El ejemplo anterior genera texto libre que requiere procesamiento adicional para extraer datos específicos. Las salidas estructuradas eliminan esta complejidad proporcionando formatos predecibles.

Definición de esquemas JSON

Los esquemas JSON actúan como contratos que especifican la estructura exacta de las respuestas esperadas. OpenAI utiliza JSON Schema, un estándar ampliamente adoptado para validar estructuras de datos JSON.

Un esquema define tipos de datos, propiedades requeridas, restricciones de valores y relaciones entre elementos. Esta especificación garantiza que cada respuesta cumpla exactamente con el formato esperado.

# Esquema básico para análisis de productos
product_schema = {
    "type": "object",
    "properties": {
        "nombre": {"type": "string"},
        "categoria": {"type": "string"},
        "precio_estimado": {"type": "number"},
        "caracteristicas": {
            "type": "array",
            "items": {"type": "string"}
        },
        "puntuacion": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10
        }
    },
    "required": ["nombre", "categoria", "puntuacion"]
}

Este esquema establece que la respuesta debe contener un objeto con propiedades específicas, incluyendo restricciones como el rango de puntuación entre 1 y 10.

Implementación con response_format

La implementación práctica de salidas estructuradas utiliza el parámetro response_format en las llamadas a la API. Este parámetro especifica que queremos una respuesta JSON que siga un esquema determinado.

response = client.responses.create(
    model="gpt-4.1",
    input="Analiza este producto: MacBook Air M3",
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "product_analysis",
            "schema": product_schema
        }
    }
)

# La respuesta será JSON válido que cumple el esquema
product_data = response.parsed
print(f"Producto: {product_data['nombre']}")
print(f"Puntuación: {product_data['puntuacion']}/10")

El atributo parsed proporciona directamente el objeto Python correspondiente al JSON generado, eliminando la necesidad de parsear manualmente la respuesta.

Esquemas complejos y anidados

Las estructuras complejas permiten modelar datos del mundo real con múltiples niveles de anidamiento y relaciones entre entidades. Los esquemas pueden incluir objetos dentro de objetos, arrays de objetos, y validaciones sofisticadas.

# Esquema para análisis completo de empresa
company_schema = {
    "type": "object",
    "properties": {
        "empresa": {
            "type": "object",
            "properties": {
                "nombre": {"type": "string"},
                "sector": {"type": "string"},
                "fundacion": {"type": "integer"}
            }
        },
        "productos": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "nombre": {"type": "string"},
                    "categoria": {"type": "string"},
                    "activo": {"type": "boolean"}
                }
            }
        },
        "metricas": {
            "type": "object",
            "properties": {
                "empleados": {"type": "integer"},
                "ingresos_millones": {"type": "number"},
                "crecimiento_anual": {"type": "number"}
            }
        }
    }
}

Esta estructura permite capturar información empresarial compleja manteniendo la organización y tipado estricto de cada elemento.

Validación y manejo de errores

La validación automática garantiza que las respuestas cumplan exactamente con los esquemas definidos. OpenAI valida internamente cada respuesta antes de entregarla, pero es importante implementar manejo de errores robusto.

try:
    response = client.responses.create(
        model="gpt-4.1",
        input="Analiza la empresa Tesla",
        response_format={
            "type": "json_schema",
            "json_schema": {
                "name": "company_analysis",
                "schema": company_schema
            }
        }
    )
    
    company_data = response.parsed
    
    # Verificación adicional de datos críticos
    if company_data['metricas']['empleados'] < 0:
        raise ValueError("Número de empleados inválido")
        
except Exception as e:
    print(f"Error en análisis: {e}")
    # Implementar lógica de recuperación

El manejo proactivo de errores asegura que las aplicaciones mantengan estabilidad incluso cuando los datos generados presentan inconsistencias lógicas.

Optimización de prompts para JSON

Los prompts optimizados mejoran significativamente la calidad y precisión de las salidas estructuradas. Aunque el esquema garantiza el formato, el contenido depende de instrucciones claras y específicas.

# Prompt optimizado para extracción de datos
optimized_prompt = """
Analiza el siguiente texto y extrae información estructurada:

Texto: "Apple Inc. lanzó el iPhone 15 Pro en septiembre de 2023. 
Este dispositivo premium incluye cámara de 48MP, chip A17 Pro, 
y pantalla de 6.1 pulgadas. El precio inicial es $999."

Extrae: nombre del producto, empresa, características técnicas, 
precio, y fecha de lanzamiento. Asigna una puntuación de 1-10 
basada en innovación y valor percibido.
"""

response = client.responses.create(
    model="gpt-4.1",
    input=optimized_prompt,
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "product_extraction",
            "schema": {
                "type": "object",
                "properties": {
                    "producto": {"type": "string"},
                    "empresa": {"type": "string"},
                    "caracteristicas": {
                        "type": "array",
                        "items": {"type": "string"}
                    },
                    "precio": {"type": "number"},
                    "fecha_lanzamiento": {"type": "string"},
                    "puntuacion_innovacion": {
                        "type": "integer",
                        "minimum": 1,
                        "maximum": 10
                    }
                }
            }
        }
    }
)

La especificidad en las instrucciones combinada con esquemas bien definidos produce resultados consistentes y útiles para aplicaciones profesionales.

Empezar curso de OpenAI

Lecciones de este módulo de OpenAI

Lecciones de programación del módulo Salidas estructuradas del curso de OpenAI.