Skip to main content
PromptQuorumPromptQuorum
Inicio/Prompt Engineering/Controla la salida: cumplimiento de JSON Schema, constrained decoding y selección de formato
Techniques

Controla la salida: cumplimiento de JSON Schema, constrained decoding y selección de formato

·10 min de lectura·Por Hans Kuepper · Fundador de PromptQuorum, herramienta de despacho multi-modelo · PromptQuorum

El constrained decoding alcanza el 100 % de cumplimiento de JSON schema — nunca más salidas malformadas. Antes de esta tecnología, los modelos obtenían menos del 40 % en esquemas complejos y fallaban silenciosamente en los casos límite. El control de salida es la variable de ingeniería que distingue los prototipos (80 % de éxito) de los sistemas de producción (100 % de fiabilidad).

Puntos clave

  • Antes de que existiera la salida estructurada, los modelos obtenían menos del 40 % en cumplimiento de JSON schema complejo; el `strict: true` de OpenAI logra el 100 %
  • El constrained decoding reduce la precisión de razonamiento en 2,26 puntos porcentuales en benchmarks BFCL — usa el enfoque de dos etapas (razonamiento libre → modelo de estructuración especializado) para tareas complejas
  • No configures Temperature y Top-P en valores altos simultáneamente — se combinan para producir salida más errática que cualquier parámetro por sí solo
  • `frequency_penalty`: rango -2,0 a 2,0 reduce la repetición proporcional a la frecuencia; `presence_penalty`: rango -2,0 a 2,0 aplica una penalización fija a cualquier token visto anteriormente — ambos a 0,3–0,5 para salida factual enfocada
  • Las stop sequences son el único mecanismo de terminación de salida determinista — a diferencia de las constraints negativas en el cuerpo del prompt, el modelo no puede anularlas
  • Rangos de temperature: T = 0,0–0,3 para tareas factuales deterministas; T = 0,7–1,0 para tareas creativas; T > 1,2 arriesga incoherencia en uso de producción
  • Claude Opus 4.7 logra el 93 % de cumplimiento JSON con prompts de formato etiquetados con XML; GPT-4o logra el 89 % con reglas de formato numeradas — ambos sin constrained decoding

¿Cuáles son los tres niveles de control de salida?

El control de salida opera en tres niveles distintos — basado en prompt, basado en schema y constrained decoding — cada uno ofreciendo garantías de formato progresivamente más fuertes con compensaciones progresivamente mayores frente a la calidad de razonamiento.

El formato basado en prompt instruye al modelo mediante lenguaje natural ("Devuelve JSON con campos: nombre, email, puntuación"). Esto funciona entre el 80–95 % del tiempo, pero falla silenciosamente en casos límite sin garantías de tipo, requiriendo manejo de errores para el 5–20 % de respuestas malformadas. Los enfoques basados en schema (function calling / tool use) definen la estructura de salida formalmente con un 95–99 % de cumplimiento — pero el schema sigue siendo una sugerencia fuerte, no una constraint absoluta. El constrained decoding nativo usa máquinas de estados finita para enmascarar tokens inválidos en tiempo de generación, produciendo el 100 % de salidas válidas según el schema con certeza matemática.

El enfoque de dos etapas — dejar que Claude Opus 4.7 o GPT-4o razonen libremente en la Etapa 1, luego alimentar la salida a un modelo especializado pequeño (Osmosis-Structure-0.6B) en la Etapa 2 — logra garantías de formato sin la penalización de calidad de razonamiento del constrained decoding.

En una oración: Adapta el nivel de constraint de salida a la tarea — usa constrained decoding solo cuando la corrección de formato importa más que la profundidad de razonamiento.

NivelTasa de cumplimientoImpacto en razonamientoMejor para
Basado en prompt ("devuelve JSON")80–95 %NingunoPrototipos; pipelines simples
Function calling / Tool use95–99 %MínimoLa mayoría de aplicaciones de producción
Constrained decoding nativo (estricto)100 %Reducción de calidad del 2–10 %Extracción de datos; pipelines de alto volumen
Dos etapas (texto libre → modelo especialista)~100 %NingunoRazonamiento complejo + formato garantizado

¿Cómo controlas el formato de salida mediante prompt engineering?

Las instrucciones explícitas de esquema de salida — colocadas al inicio del prompt del sistema para Claude Opus 4.7 e inmediatamente antes del contenido del usuario para GPT-4o — producen tasas de cumplimiento de salida estructurada del 85–95 % sin la penalización de calidad de razonamiento del constrained decoding nativo.

Claude Opus 4.7 responde mejor a las instrucciones de formato de salida colocadas al inicio del prompt del sistema usando etiquetas de sección estilo XML. GPT-4o funciona mejor cuando el schema se coloca inmediatamente antes del contenido del usuario usando reglas de formato numeradas. Gemini 3.1 Pro produce la salida estructurada más fiable cuando el schema se repite tanto al inicio como al final del prompt.

Prompt deficiente — sin estructura, sin especificación de formato:

Analyse this customer review and tell me the sentiment, key issues, and urgency.

¿Cómo es un buen prompt de salida estructurada (Claude Opus 4.7)?

Buen prompt — Claude Opus 4.7

<output_format> Return only this JSON object, no prose: { "sentiment": "positive" | "neutral" | "negative", "key_issues": "string", // max 3 items "urgency": "low" | "medium" | "high", "confidence": 0.0–1.0 } </output_format> <task>Analyse the following customer review.</task> <review>REVIEW TEXT HERE</review>

El prompt estructurado con XML ancla el contrato de formato de salida mientras preserva el razonamiento libre dentro del bloque `<task>`. No se necesita constrained decoding — Claude Opus 4.7 cumple en más del 93 % de las llamadas de producción con esta estructura.

¿Cómo es un buen prompt de salida estructurada (GPT-4o)?

Buen prompt — GPT-4o

Analyse the following customer review. Format rules: 1. Return valid JSON only. No markdown fences. No explanation. 2. Fields: "sentiment" (string: "positive"|"neutral"|"negative"), "key_issues" (array of strings, max 3), "urgency" (string: "low"|"medium"|"high"), "confidence" (float: 0.0–1.0) 3. If no issues found, return empty array for key_issues. <REVIEW TEXT HERE>

¿Qué reglas de formato de salida aplican a cada modelo?

Cada LLM principal tiene preferencias estructurales distintas para el cumplimiento del formato de salida:

  • Claude Opus 4.7 (Anthropic) — Etiquetas XML (`<output>`, `<format>`, `<constraints>`); schema al inicio; "Devuelve solo el JSON, nada más"
  • GPT-4o (OpenAI) — Reglas de formato numeradas; schema después de la instrucción principal; "Responde con JSON válido. Sin markdown. Sin explicación."
  • Gemini 3.1 Pro (Google DeepMind) — Schema conciso y explícito tanto al inicio como al final; ejemplo one-shot del formato de salida deseado en el prompt
  • Modelos locales vía Ollama (LLaMA 3.1 7B, Mistral) — Más sensibles al desviamiento de formato; se requiere un ejemplo de formato one-shot directamente en el prompt para salida JSON fiable

¿Qué parámetros de muestreo controlan la generación de salida?

Temperature (T), Top-P, Top-K, max_tokens, frequency_penalty y presence_penalty son seis parámetros independientes que determinan conjuntamente la longitud, la aleatoriedad y la repetición de la salida — y deben configurarse de forma consistente, no en conflicto.

Temperature (T) escala la distribución softmax de salida: con T = 0,0 el modelo siempre selecciona el token de mayor probabilidad (determinista); con T = 2,0 la distribución es casi plana y la salida se vuelve incoherente. Top-P (muestreo de núcleo) selecciona del conjunto mínimo de tokens cuya probabilidad acumulada alcanza P — con Top-P = 0,9 el modelo considera solo los tokens que cubren el 90 % superior de la masa de probabilidad. Top-K restringe la generación a los K tokens de mayor probabilidad en cada paso; Top-K = 1 equivale al decoding voraz.

La fórmula softmax con temperature: P(token) = exp(logit / T) / sum(exp(logits / T)). Cuando T se aproxima a 0, el token de mayor logit se aproxima a probabilidad 1,0. Cuando T se aproxima a infinito, todos los tokens se aproximan a igual probabilidad.

ParámetroRangoEnfocado / FactualCreativo / Diverso
Temperature (T)0,0–2,00,0–0,30,7–1,0
Top-P0,0–1,00,3–0,50,9–1,0
Top-K1–tamaño de vocabulario10–2050–100
max_tokensdependiente de la tarea256–5122.048–8.192
frequency_penalty-2,0 a 2,00,3–0,5 (reducir repetición)0,0–0,2
presence_penalty-2,0 a 2,00,0–0,20,5–0,8

Regla crítica: No configures Temperature y Top-P en valores altos simultáneamente. Temperature escala primero la distribución completa; luego Top-P muestrea de la masa de probabilidad superior ya escalada. Combinar T = 1,5 y Top-P = 0,95 produce salida más errática que cualquier parámetro por sí solo — los dos parámetros están diseñados para usarse como alternativas, no apilados.

`frequency_penalty` reduce la probabilidad de tokens de forma proporcional a cuántas veces ya han aparecido — los valores positivos eliminan frases repetitivas; los negativos fomentan activamente la repetición. `presence_penalty` aplica una penalización única a cualquier token que ya haya aparecido, independientemente de la frecuencia — empuja al modelo a introducir nuevo vocabulario y temas en lugar de repetir los existentes.

¿Cuál es la compensación entre calidad de razonamiento y garantías de formato de salida?

Forzar JSON mediante constrained decoding reduce la precisión del modelo en 2,26 puntos porcentuales en benchmarks de function calling — el parsing alineado con schema de BAML logró el 93,63 % de precisión en BFCL vs. 91,37 % para el constrained decoding estricto de OpenAI en el mismo benchmark.

El mecanismo: el constrained decoding aplica una máquina de estados finita que enmascara tokens incompatibles con la posición actual del schema. Un modelo que quiere producir `51,7` para un campo float se ve obligado a producir `51` si el schema especifica entero — produciendo un resultado técnicamente válido pero factualmente degradado. El prompting chain-of-thought (CoT) es incompatible con el constrained decoding de la misma manera: incluir un campo de razonamiento obliga al modelo a escapar saltos de línea, comillas y caracteres especiales dentro de una cadena JSON — degradando mediblemente la calidad de razonamiento en todos los modelos probados.

La solución lista para producción para sistemas que requieren tanto profundidad de razonamiento como garantías de formato: (1) Etapa 1 — Envía a GPT-4o o Claude Opus 4.7 sin constraints: "Analiza esto, razona paso a paso, explica tu lógica." (2) Etapa 2 — Alimenta la salida de la Etapa 1 a un modelo especializado pequeño (Osmosis-Structure-0.6B o GPT-4o-mini con `strict: true`): "Extrae los datos clave de este análisis y devuélvelos en este schema JSON exacto."

Esta arquitectura preserva la calidad de razonamiento de la Etapa 1 y logra el 100 % de cumplimiento de formato en la Etapa 2 a una fracción del costo de ejecutar un modelo de frontera completo en modo restringido.

¿Cómo comparan los principales modelos en control de formato de salida?

Probado en PromptQuorum — 30 prompts de control de salida despachados a tres modelos: Claude Opus 4.7 alcanzó el 93 % de cumplimiento JSON usando instrucciones de formato con etiquetas XML sin constrained decoding. GPT-4o alcanzó el 89 % de cumplimiento usando reglas de formato numeradas. Gemini 3.1 Pro alcanzó el 91 % de cumplimiento con el schema indicado tanto al inicio como al final. Los tres modelos produjeron razonamiento más corto y menos completo cuando se habilitó el constrained decoding con `strict: true` — consistente con la caída de precisión de 2,26 puntos observada en el benchmark BFCL.

¿En qué se diferencian las stop sequences y las constraints negativas?

Las stop sequences — tokens que terminan inmediatamente la salida del modelo al generarse — son el mecanismo de control de salida más determinista: el modelo se detiene en el instante en que aparece la cadena especificada, independientemente del contexto restante.

Las stop sequences se pasan como un array de cadenas en la llamada a la API (parámetro `stop` en OpenAI, `stop_sequences` en Anthropic). Usos comunes en producción:

  • `"###"` — termina la generación después de un marcador de sección estructurado, evitando la continuación hacia contenido irrelevante
  • `"</output>"` — termina después de una etiqueta XML de cierre, asegurando que solo se devuelva el contenido etiquetado
  • `"\n\n"` — limita la salida a un único párrafo para tareas de clasificación o respuesta corta
  • `"Human:", "User:"` — evita que el modelo alucinara una continuación de conversación simulada

Las constraints negativas en el cuerpo del prompt — "No incluyas explicaciones", "Sin markdown", "No añadas oraciones introductorias" — reducen los patrones de salida no deseados pero no pueden garantizar el cumplimiento de la forma en que lo hacen las stop sequences. Usa ambas: stop sequences para terminación estructural, constraints negativas para dar forma al contenido.

¿Qué formato de salida usar para pipelines de producción?

JSON es el formato de salida dominante para pipelines LLM de producción porque se mapea directamente a objetos API, arrays y datos tipados — pero forzar JSON mediante constrained decoding sacrifica un 2–10 % de calidad de razonamiento, haciendo que la selección de formato sea una decisión arquitectónica significativa.

TOON (Token-Optimised Output Notation) ha emergido como un formato de entrada eficiente para prompts estructurados largos — usa minimización de espacios en blanco y claves abreviadas para reducir el consumo de tokens de entrada antes de que el modelo genere la salida en JSON. Para la salida, la arquitectura de producción recomendada para 2026 es: TOON para la entrada (eficiencia de tokens) + JSON con constrained decoding para la salida (formato garantizado) — aplicado solo después de completarse el razonamiento libre de la Etapa 1.

Formato de salidaCaso de usoNotas
JSONAPIs, pipelines, almacenes de documentosSoporte de salida estructurada nativa en todos los principales proveedores
JSONLFlujos de eventos, procesamiento por lotesUn objeto JSON por línea; adecuado para streaming y logging
CSVIntegración con sistemas legadosMás simple pero sin estructura anidada; bueno para datos tabulares
YAMLArtefactos de configuraciónLegible por humanos; usado en contextos de CI/CD e infraestructura
XMLIntegración empresarialVerboso; preferido por Claude como formato de estructura de prompt, no de salida
MarkdownInformes legibles, documentaciónMalo para parsing downstream; mejor para consumidores humanos

¿Cuáles son las consideraciones globales y regionales para el control de salida?

Las empresas europeas que construyen pipelines LLM que procesan datos personales deben aplicar el Artículo 25 del RGPD (privacidad por diseño) al diseño del esquema de salida — las salidas que exponen campos de datos personales en payloads JSON requieren una base legal bajo el Artículo 6 del RGPD. La CNIL (autoridad francesa de protección de datos) emitió directrices en enero de 2026 indicando que las salidas de toma de decisiones automatizadas — incluidas las salidas LLM estructuradas usadas en workflows de puntuación o elegibilidad — pueden activar los derechos de revisión humana del Artículo 22 del RGPD.

Para equipos de la UE que requieren inferencia on-premise con control de salida estructurada, Mistral AI (Francia) soporta constrained decoding basado en vLLM con parámetros JSON guiados — habilitando cumplimiento garantizado de JSON Schema completamente dentro de la infraestructura de la UE, satisfaciendo los requisitos de residencia de datos del RGPD bajo el Artículo 46. Mistral Large funciona on-premise con soporte de salida estructurada.

Las empresas chinas usan Qwen 2.5 (Alibaba) y DeepSeek V3 (DeepSeek AI) para pipelines de producción con control de salida. Ambos modelos soportan modo JSON y son desplegables localmente en infraestructura empresarial china bajo las Medidas Provisionales de IA Generativa de China (2023). Las empresas japonesas que ejecutan inferencia local vía Ollama — LLaMA 3.1 7B con 8 GB de RAM, LLaMA 3.1 13B con 16 GB de RAM — se benefician de Outlines y XGrammar para constrained decoding en modelos auto-alojados, produciendo cumplimiento garantizado de JSON Schema sin llamadas a API externas.

Errores comunes con el control de salida

Configurar tanto Temperature como Top-P en valores altos

Why it hurts: Se combinan — T=1,5 + Top-P=0,95 produce salida más errática que cualquier parámetro por sí solo.

Fix: Usa uno u otro como tu control principal de aleatoriedad, no ambos.

Forzar JSON en tareas de razonamiento complejo

Why it hurts: El constrained decoding reduce la precisión entre 2–10 %. El modelo sacrifica calidad de razonamiento para mantener el cumplimiento del schema.

Fix: Usa el enfoque de dos etapas: razonamiento libre primero, luego extracción estructurada.

Escribir "devuelve JSON" sin mostrar el schema exacto

Why it hurts: El modelo adivina los nombres de campos, tipos y anidamiento — produciendo JSON inválido o malformado.

Fix: Proporciona siempre el schema completo con tipos de campos y valores de enumeración.

Confiar en constraints negativas del cuerpo del prompt para el formato crítico

Why it hurts: "No incluyas markdown" puede ser ignorado por el modelo, especialmente con temperature alta.

Fix: Usa stop sequences a nivel de API — son el único mecanismo de terminación determinista.

Copiar configuraciones de temperature entre modelos

Why it hurts: T=0,7 en GPT-4o y T=0,7 en Claude producen distribuciones de probabilidad diferentes.

Fix: Prueba cada configuración de parámetro por modelo en tu pipeline de producción.

Lecturas relacionadas

Cómo controlar el formato de salida de la IA

  1. 1
    Especifica siempre el formato de salida deseado explícitamente en el prompt. En lugar de "resume esto", di: "Resume como una lista de 5–7 puntos, cada uno de 1–2 oraciones. Usa voz activa. No incluyas opiniones." Sé específico sobre la estructura: puntos, tablas, JSON, markdown, texto plano.
  2. 2
    Usa JSON schema para aplicar salida estructurada cuando esté disponible (OpenAI, Anthropic). Si estás extrayendo datos o generando contenido legible por máquina, define el schema: nombres de campos, tipos, campos requeridos, constraints de enumeración. El modelo formateará la salida para que coincida automáticamente.
  3. 3
    Proporciona un ejemplo del formato de salida exacto que quieres. Muéstrale al modelo un ejemplo concreto: "Formatea así: { \"topic\": \"...\", \"key_points\": ..., \"confidence\": \"high|medium|low\" }." Los ejemplos son más potentes que las descripciones solas.
  4. 4
    Usa lenguaje basado en constraints: "Debes X, no debes Y, siempre Z." Evita el lenguaje suave ("intenta", "apunta a"). Di: "Devuelve exactamente 3 pasos, ni más ni menos. No uses jerga técnica. Siempre incluye una advertencia si la recomendación tiene limitaciones."
  5. 5
    Prueba tu especificación de formato de salida en un ejemplo antes de ejecutarla a escala. Genera una salida, comprueba si coincide con tu especificación, ajusta el prompt si es necesario. Esto evita descubrir problemas de formato después de procesar 100 elementos.

Preguntas frecuentes

¿Cuál es la diferencia entre Temperature y Top-P en los LLMs?

Temperature (T) escala toda la distribución de probabilidad softmax de predicciones del siguiente token: T = 0,0 siempre selecciona el token de mayor probabilidad (determinista); T = 1,0 conserva la distribución natural; T = 2,0 la aplana hacia la aleatoriedad. Top-P (muestreo de núcleo) selecciona del conjunto mínimo de tokens cuya probabilidad acumulada alcanza P. Controlan aspectos diferentes y no deben configurarse ambos en valores altos simultáneamente.

¿Forzar la salida JSON reduce la calidad de respuesta de la IA?

Sí — mediblemente. El benchmark de BAML en BFCL mostró que el parsing de texto libre alineado con schema alcanzó el 93,63 % de precisión vs. 91,37 % para el constrained decoding estricto — una reducción de 2,26 puntos. Para tareas de razonamiento complejo, el enfoque de dos etapas (texto libre → estructuración especializada) preserva la calidad logrando el 100 % de cumplimiento de formato.

¿Qué es el constrained decoding y cómo garantiza la salida JSON?

El constrained decoding aplica una FSM sobre el proceso de generación de tokens. En cada paso, la FSM evalúa qué tokens producirían salida compatible con el schema en la posición actual — y enmascara todos los demás a probabilidad cero. OpenAI lo implementa vía `response_format: { type: "json_schema", strict: true }`. Anthropic vía Strict Tool Use Mode.

¿Qué formato de salida debo usar para pipelines LLM de producción?

JSON es el estándar para pipelines LLM de producción. Usa JSONL para flujos de eventos y procesamiento por lotes. Usa CSV solo para compatibilidad con sistemas legados. La arquitectura recomendada para 2026: TOON para eficiencia de tokens de entrada + JSON con constrained decoding solo para la salida de la Etapa 2.

¿En qué se diferencian las stop sequences de las constraints negativas en los prompts?

Las stop sequences se aplican a nivel de API — el modelo se detiene en el instante en que aparece la cadena especificada, sin excepciones. Las constraints negativas en el cuerpo del prompt no son vinculantes — el modelo puede violarlas. Usa ambas: stop sequences para terminación estructural, constraints negativas para dar forma al contenido.

Fuentes y lecturas adicionales

Aplica estas técnicas en más de 25 modelos de IA simultáneamente con PromptQuorum.

Prueba PromptQuorum gratis →

← Volver a Prompt Engineering

Controla el formato de salida de la IA y el cumplimiento de schema (2026)