Skip to Content
DocumentaciónGuíasSalida estructurada

Salida estructurada

La salida estructurada permite que el modelo devuelva datos en el formato JSON que usted especifique, ideal para extracción de datos, etiquetado de clasificación, llenado de formularios y otros escenarios.

JSON Mode

La forma más sencilla de salida estructurada, forzando al modelo a devolver JSON válido:

json_mode.py
from openai import OpenAI client = OpenAI( base_url="https://api.ofox.ai/v1", api_key="<su OFOXAI_API_KEY>" ) response = client.chat.completions.create( model="openai/gpt-4o", messages=[ {"role": "system", "content": "Eres un asistente de extracción de datos. Devuelve los resultados en formato JSON."}, {"role": "user", "content": "Extrae el nombre, empresa y cargo del siguiente texto: Juan Pérez es ingeniero senior en Google"} ], response_format={"type": "json_object"} ) import json result = json.loads(response.choices[0].message.content) print(result) # {"name": "Juan Pérez", "company": "Google", "title": "ingeniero senior"}

Al usar JSON Mode, el system prompt debe contener la palabra clave “JSON”, de lo contrario algunos modelos pueden ignorar el requisito de formato.

Restricción con JSON Schema

Controle la estructura de salida con mayor precisión, asegurando que los nombres y tipos de campos cumplan con lo esperado:

json_schema.py
response = client.chat.completions.create( model="openai/gpt-4o", messages=[ {"role": "user", "content": "Analiza el sentimiento de esta reseña: ¡Este producto es increíble, muy fácil de usar!"} ], response_format={ "type": "json_schema", "json_schema": { "name": "sentiment_analysis", "schema": { "type": "object", "properties": { "sentiment": { "type": "string", "enum": ["positive", "negative", "neutral"], "description": "Tendencia del sentimiento" }, "confidence": { "type": "number", "description": "Confianza 0-1" }, "keywords": { "type": "array", "items": {"type": "string"}, "description": "Palabras clave de sentimiento" } }, "required": ["sentiment", "confidence", "keywords"], "additionalProperties": False } } } )

Salida:

{ "sentiment": "positive", "confidence": 0.95, "keywords": ["increíble", "fácil de usar"] }

Escenarios de aplicación práctica

Extracción de datos

# Extraer datos estructurados de texto no estructurado response = client.chat.completions.create( model="openai/gpt-4o", messages=[{ "role": "user", "content": """Extrae la información del siguiente pedido: El cliente María García realizó un pedido el 15 de enero de 2025 de 3 MacBook Pro, precio unitario 1.999 EUR, dirección de envío: Calle Mayor 123, Madrid""" }], response_format={ "type": "json_schema", "json_schema": { "name": "order_info", "schema": { "type": "object", "properties": { "customer": {"type": "string"}, "date": {"type": "string"}, "items": { "type": "array", "items": { "type": "object", "properties": { "name": {"type": "string"}, "quantity": {"type": "integer"}, "unit_price": {"type": "number"} } } }, "address": {"type": "string"} }, "required": ["customer", "date", "items", "address"] } } } )

Etiquetado de clasificación

# Clasificación multi-etiqueta response = client.chat.completions.create( model="openai/gpt-4o", messages=[{ "role": "user", "content": "Clasifica el tema de este artículo: La tecnología de IA se aplica cada vez más en el campo médico..." }], response_format={ "type": "json_schema", "json_schema": { "name": "classification", "schema": { "type": "object", "properties": { "primary_category": {"type": "string"}, "secondary_categories": { "type": "array", "items": {"type": "string"} }, "tags": { "type": "array", "items": {"type": "string"} } }, "required": ["primary_category"] } } } )

Modelos compatibles

ModeloJSON ModeJSON Schema
openai/gpt-4o
openai/gpt-4o-mini
anthropic/claude-sonnet-4.5
google/gemini-3-flash-preview

Los modelos que no soportan JSON Schema pueden lograr un efecto similar describiendo detalladamente el formato JSON deseado en el system prompt.

Last updated on