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:
Python
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
| Modelo | JSON Mode | JSON 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