Inteligencia Artificial · Serie LLMs y n8n
JSON perfecto o nada: cómo controlar la salida de tu LLM
La diferencia entre una demo frágil y un producto fiable está en la salida estructurada. Si el modelo no devuelve JSON válido y conforme al esquema, todo lo demás se rompe.
En el post anterior habilitamos herramientas y APIs. Para orquestar acciones, el LLM debe hablar JSON impecable. Aquí tienes un compendio práctico para lograrlo en producción.
¿Por qué “JSON perfecto o nada”?
- Automatización: convierte la respuesta en acciones reales (APIs, DB, n8n) sin parsers frágiles.
- Observabilidad: facilita trazas, métricas y auditoría.
- Seguridad: reduces la superficie de alucinaciones fuera de contrato.
Estrategias que funcionan (en orden de fuerza)
- Contratos de salida y “function calling / structured outputs”
Si tu proveedor lo soporta, publica un schema y exige que el modelo devuelva los campos exactos. Minimiza prompts y postprocesado. - JSON Schema + validación estricta
Define tipos, obligatorios, enums y formatos (fechas ISO). Rechaza cualquier extra y devuelve errores claros al modelo para corrección. - Decoding restringido (gramáticas/regex, stop sequences, temperatura baja)
Fuerza el alfabeto/estructura permitida; temperatura 0–0.2; detén al cerrar llaves o al encontrar separadores. - Plantillas robustas
Indica “Devuelve SOLO JSON válido, sin comentarios, sin backticks” y muestra 1 ejemplo minimalista correcto. - Reintentos inteligentes
Si la validación falla, reintenta con el diff del error (“falta campo X”, “tipo Y inválido”), no rehagas todo el prompt. Máximo 1–2 reintentos. - Autocorrección acotada
Reparar problemas sintácticos triviales (comas finales, comillas escapadas) antes de reintentar; nunca inventes campos faltantes. - Streaming seguro
Acumula en buffer y solo parsea cuando braces estén balanceados. Si fragmenta, espera siguiente chunk. - JSONL vs JSON
Para listas largas, considera NDJSON (una entidad por línea) y valida item a item. - Evolución de esquema
Versiona:schema_v1,schema_v2. Mantén compatibilidad y migraciones claras.
Errores comunes (y cómo evitarlos)
- Texto fuera del JSON (saludos, explicaciones) → “solo JSON” + función/gramática.
- Comas finales o comillas mal escapadas → autocorrección acotada + validación.
- Campos faltantes o tipos erróneos → difundir el error exacto y reintentar una vez.
- Listas gigantes → usar JSONL y paginación para evitar timeouts.
Micro-workflow n8n: “JSON perfecto o reintento”
- Webhook → recibe
{task, payload}y el schema requerido. - LLM → prompt con ejemplo mínimo y regla “salida SOLO JSON”.
- Function → valida contra JSON Schema.
- Si ok → continúa.
- Si error → compone mensaje con errores exactos.
- LLM (retry) → reintento con los errores formateados (máx. 1).
- IF → si vuelve a fallar → responde “formato inválido” con guía de corrección y registra incidente.
- Database → guarda costo, latencia, tasa de error de JSON, diffs y versión de esquema.
Tip Laravel/PHP
- Parsing robusto:
json_validate()(PHP ≥8.3) para chequear rápido; luegojson_decode(..., associative:true, flags: JSON_THROW_ON_ERROR)dentro detry/catch. - Validación:
Validator::make($data, [...])con reglas (required,array,date_format:Y-m-d,in:, etc.). - Schemas: guarda versiones en DB (
schemas) y usa un validador JSON Schema en el backend si lo prefieres. - Tuning: fija
max_tokens, baja temperatura y añadestopal cierre del objeto para limitar verborrea.
Plantilla mínima de prompt (solo JSON)
Rol: Eres un generador estricto de JSON.
Reglas:
- Devuelve SOLO JSON válido sin comentarios ni texto adicional.
- Sigue exactamente este esquema:
{
"title": "string",
"date_iso": "YYYY-MM-DD|null",
"labels": ["string"]
}
Entrada:
{TEXTO}
Salida:
Conclusión
“JSON perfecto o nada” es un principio de ingeniería: contrato claro, validación, reintentos acotados y telemetría. Con esto, tus integraciones con herramientas y APIs serán predecibles y auditables.
← Anterior: Toolformer mental: cómo lograr que el modelo use tus herramientas y APIs