Pedir JSON en el prompt devuelve tres sabores de dolor: prosa alrededor del objeto, comillas mal escapadas y valores de enum inventados. El parse se rompe a las 3 de la mañana y quien está de guardia se entera después. Los structured outputs atacan la raíz: en vez de pedir y rezar, restringes la generación token a token contra un JSON Schema.
Constrained decoding: validez durante la generación
El constrained decoding restringe la salida contra el schema a nivel de cada token. La función de structured outputs de OpenAI y el tool use de Anthropic garantizan validez sintáctica del primero al último token. En el mundo open-source, motores basados en gramática como Outlines y las grammars de llama.cpp compilan el schema en máscaras de token y hacen lo mismo corriendo en tu propia infraestructura.
Reglas de diseño de schema
- La estructura plana le gana al anidamiento profundo; cada nivel extra aumenta la chance de confusión
- Los enums vencen a los strings libres; el modelo llena el campo ambiguo con un valor plausible y equivocado
- Campos obligatorios explícitos y
additionalProperties: false; los modelos respetan mejor los constraints que las instrucciones en texto
La validación sigue siendo tuya
El constrained decoding cubre la forma; la semántica queda de tu cuenta. Una fecha de checkout anterior a la fecha de creación del pedido pasa limpia por el schema y explota en el reporte contable. Rangos de fecha coherentes, integridad referencial y reglas de negocio quedan fuera del alcance del decoding. Una capa de validación con zod, pydantic o JSON Schema validators atrapa lo que se escapa, y sus errores alimentan el retry.
Retry con el error en la mano
¿Falló la validación? Reenvía el prompt incluyendo el mensaje de error del validador y la salida rechazada, para que el modelo vea qué corregir. Un retry resuelve la mayoría de los casos; tres fallos seguidos indican un prompt o un schema enfermos y merecen ruta de fallback o cola humana. Sin ese límite, el loop de retry quema tokens sobre un error determinístico.
Versionado de schemas
Agregar campos debe mantener compatibilidad retroactiva: respuestas en cache de semanas atrás tienen que validar contra el parser nuevo. Agrega campos al final del objeto, márcalos como opcionales y promuévelos a obligatorios después; un número de versión en el envelope del payload ayuda a escalonar la migración por cohortes.
Prueba los bordes del schema
Los tests property-based generan prompts adversarios que sondean límites: enums vacíos, fechas límite, textos llenos de caracteres de escape. Introdúcelos en la suite de evals, junto a las métricas de calidad; la regresión de formato también es regresión.
¿Te gustó el contenido?
Construyo productos web y soluciones con IA de la manera correcta — arquitectura sólida, código sostenible y entrega real.
Hablemos