Inteligencia Artificial · Serie LLMs y n8n
Operación integral de IA con n8n: datos de calidad, resiliencia e integración práctica
Tres pilares para que tu IA funcione en la vida real: datos curados, resiliencia ante incidentes y orquestación con n8n que conecte tu asistente con APIs, usuarios y procesos.
En el post anterior versionamos prompts, corpus y evaluaciones. Hoy unificamos tres frentes (antes #27, #28 y #29) en un solo playbook operativo: curación de datasets → respuesta a incidentes → integración con n8n. El objetivo: un sistema con IA útil, estable y auditable.
Pilar 1 — Datos curados que elevan tu RAG
Pipeline mínimo de curación
- Ingesta (PDF/HTML/Markdown/DB) → normaliza a UTF-8, limpia boilerplate.
- Chunking 400–800 tokens con título y ancla por sección real.
- Metadatos útiles:
{source, title, section, updated_at, trust_level, lang}. - Deduplicación por hash de texto normalizado (reduce ruido y costo).
- Etiquetado opcional: intención, entidad, riesgo (para filtros/recall).
Snippets Laravel
// Deduplicación por hash normalizado
function norm(string $t): string { $t = mb_strtolower($t); $t = preg_replace('/\s+/', ' ', $t); return trim($t); }
$chunk_hash = sha1(norm($text));
// Políticas de ingesta (ejemplo)
abort_if($trust_level === 'external' && now()->diffInDays($updated_at) > 365, 422, 'Documento obsoleto');
// Tablas mínimas
collections(id, name, corpus_v, trust_level, updated_at)
documents(id, collection_id, url, hash, title, updated_at, valid_until, lang)
chunks(id, document_id, title, anchor, text, hash, tokens, section, trust_level)
Micro-workflow n8n: “Curador semántico”
- Cron → lista fuentes pendientes.
- HTTP/Drive → descarga documentos.
- LLM → limpia y segmenta en chunks con título + resumen.
- Function → calcula hash, dedup y rellena metadatos.
- Vector DB → embeddings a índice versionado.
- Database → registra
{docId, hash, trust_level, updated_at}. - Notifier → reporte de ingestión y contenido rechazado.
Pilar 2 — Resiliencia: playbook de incidentes
Tipos de incidente (frecuentes)
- Outage de proveedor LLM o vector DB.
- Latencia p95 disparada.
- JSON inválido / contrato roto.
- Groundedness bajo o alucinaciones.
- Costo p95 fuera de presupuesto.
Flujo de respuesta 5 pasos
- Detectar (alertas + señales de usuario).
- Contener (modo degradado, cache, SLM fallback).
- Diagnosticar (trazas,
pipeline_version, cambios recientes). - Recuperar (rollback de
pipeline/índice, límites, reintentos acotados). - Aprender (postmortem con acciones y due date).
Runbooks rápidos
Proveedor LLM caído
- Conmuta a fallback (SLM), acorta contexto y desactiva tools de alto riesgo.
- Banner de degradación visible.
JSON inválido
- Guardrail de salida + retry con dif de errores (1 intento) y
stopal cierre del JSON.
Groundedness bajo
- Reduce Top-K, exige citas u abstención; reindexa colección afectada.
Snippets Laravel (modo degradado)
// Evento de incidente
event(new IncidentRaised(type: 'json_invalid', meta: ['pipeline'=>config('pipeline.pipeline')]));
// Flag de degradado
if (Feature::active('degraded_mode')) {
$router->force('slm-basic'); $rag->setTopK(2); $policy->requireCitations(true);
}
n8n: “Incident Responder”
- Webhook (alerta) →
{type, metrics, pipeline_v}. - IF → enruta a playbook específico.
- HTTP → activa feature flags (router/Top-K/degradado).
- Database → snapshot de métricas antes/después.
- Manual Approval → rollback/promoción.
- Notifier → estado para stakeholders.
Pilar 3 — n8n como pegamento entre IA y tu negocio
Patrón canónico (request → decisión → acción)
- Webhook → recibe
{query, user, tenant}. - Function → normaliza y aplica políticas (PII, riesgo, idioma).
- LLM → produce contrato (JSON) o
{tool,args}. - IF → si requiere herramienta → valida/ejecuta; si informativo → entrega.
- HTTP/DB → integra APIs; captura
{status,id}. - Function → guardrail de salida (JSON válido / safe answer).
- Notifier → envía resultado y auditoría.
Buenas prácticas
- Versiona flujos (
flow_v) y guarda audit trail por paso. - Separa webhooks de jobs pesados (trigger → queue).
- Credenciales seguras en n8n, allowlist de dominios y colecciones.
- Métricas: costo/latencia por nodo y
request_idcorrelado con tu app.
Integración sana con Laravel
// Emite petición desde Laravel
$response = Http::post(env('N8N_WEBHOOK'), [
'query' => $q, 'user' => Auth::id(), 'tenant' => tenant(),
'pipeline' => config('pipeline.pipeline'),
]);
// Callback firmado desde n8n
Route::post('/n8n/callback', function(Request $r){
abort_unless(hash_equals($r->header('X-Signature'), sign($r->getContent())), 401);
// persistir resultado y notificar
});
Plan de adopción en 7 pasos
- Audita corpus actual (dedup, metadatos, frescura).
- Define índice versionado y políticas de ingesta.
- Instrumenta guardrails y contrato de salida.
- Crea el flujo n8n canónico (webhook → decisión → acción).
- Configura “Incident Responder” y modos degradados.
- Observa p95, groundedness, % JSON válido, costos.
- Itera con A/B y feedback (post #18) para mejoras continuas.
Conclusión
La operación integral de IA se apoya en tres columnas: datos curados, resiliencia y orquestación. Con n8n como pegamento y Laravel como base, tu asistente será útil, seguro y mantenible.
← Anterior: MLOps sin dolor: versionado de prompts, datos y evaluaciones