Inteligencia Artificial · Serie LLMs y n8n
Guardrails de salida: filtra y valida respuestas antes de usarlas
La respuesta del modelo no va directo al usuario ni a tus sistemas. Antes, pasa por guardrails de salida que validan formato, seguridad y cumplimiento.
En el post anterior blindamos el system prompt. Ahora añadimos la última barrera: un filtro de salida que decide si la respuesta es utilizable, si requiere corrección o si debe reemplazarse por una versión segura.
¿Qué es un guardrail de salida?
Es un pipeline determinista que recibe la salida del LLM y ejecuta validaciones y transformaciones antes de entregar o actuar. Su objetivo es bloquear o corregir respuestas que violen formato, políticas o seguridad.
- Formato: JSON válido, HTML sanitizado, longitudes máximas.
- Seguridad: PII/secretos, contenido prohibido, instrucciones peligrosas.
- Cumplimiento: tono/idioma requeridos, citas si aplica, contratos de salida.
Checklist de validación de salida
- Contrato de salida: JSON Schema o function calling (prohíbe texto extra).
- Tipos y rangos: fechas ISO, enums, máximos de longitud, listas no vacías si son requeridas.
- PII/Secretos: emails, teléfonos, tarjetas, claves/tokens/ARNs/URLs internas → redactar o bloquear.
- Contenido: categorías de riesgo (violencia, hate, sexual, autolesión, etc.).
- HTML (si aplica): sanitize/escape, allowlist de tags/atributos, bloquea JS.
- Política de citas (RAG): si no hay evidencia suficiente → exigir abstención.
Estrategia en tres pasos
- Validar: contrato (schema/gramática), longitud, categorías de riesgo, PII/secretos.
- Corregir: autocorrecciones acotadas (comillas/comas), redacción de PII, sanitización HTML.
- Decidir:
- approved → entregar/ejecutar.
- retry → reintentar con errores concretos (1 intento).
- safe_response → plantilla segura y pedir más contexto.
- block → registrar y notificar para revisión humana.
// Ejemplo de veredicto de salida
{
"status": "approved|retry|safe_response|block",
"errors": ["schema.missing_field: citations", "policy.pii: email detectado"],
"output": { ... } // solo si approved o safe_response
}
Micro-workflow en n8n: “Filtro de salida”
- Webhook → recibe
{request_id, candidate_output}desde tu backend. - Function → valida JSON Schema / gramática y límites (longitud, enums).
- Function → detector de PII/secretos y clasificador de riesgo (rápido).
- IF → si schema ok y sin riesgo → approved.
- IF → si hay errores reparables → retry (manda diff exacto al LLM).
- IF → si hay PII/HTML → safe_response (redacta/sanitize y añade aviso).
- Else → block + notificación y registro para auditoría.
- Database → guarda status, errores, costo, latencia y versión de schema.
Plantillas útiles
1) Reintento guiado por errores
Rol: Reparador de formato.
Tarea: Corrige SOLO los errores listados sin cambiar el contenido.
Errores:
- Falta campo "citations"
- "date_iso" no cumple YYYY-MM-DD
Salida: SOLO JSON válido según el esquema.
Entrada (JSON actual):
{CANDIDATE}
2) Respuesta segura (fallback)
{
"answer": "No puedo mostrar ciertos datos. Aquí tienes una versión segura de la información solicitada.",
"notes": ["Se ocultó PII", "Se acortó la longitud para cumplir política"]
}
Tips para Laravel/PHP
- Validación JSON: usa
json_validate()(PHP ≥8.3) y luegojson_decode(..., associative:true, flags: JSON_THROW_ON_ERROR). - Schema: valida con rules de
Validator(tipos,date_format:Y-m-d,in:,array|min:1). - PII/secretos: regex/heurísticas → enmascara y agrega
reason_codesa logs. - HTML: pasa por un sanitizador (allowlist de tags/attrs) o devuelve solo texto plano.
- Telemetría: tabla
llm_guardrailscon{request_id,status,errors[],schema_version,lat_ms,cost_usd}.
Errores comunes (y cómo evitarlos)
- Aceptar texto libre cuando exiges JSON → define y aplica Schema/gramática.
- Intentar “arreglarlo todo” en post → solo autocorrecciones mínimas; si no, reintento o safe.
- Ignorar PII/secretos en plantillas y ejemplos → demuestra el formato correcto.
- No registrar decisiones → sin auditoría no puedes mejorar umbrales ni explicar incidentes.
Conclusión
Un buen sistema no solo “pide bien”, también entrega bien. Con guardrails de salida controlas formato, seguridad y cumplimiento, y aseguras que nada llegue a usuarios o APIs sin pasar la última inspección.
← Anterior: Sistema de instrucciones de hierro: diseña prompts imposibles de romper