Inteligencia Artificial · Serie LLMs y n8n
RAG con feedback humano: mejora continua para tu asistente inteligente
Tu asistente mejora cuando el usuario opina y tú actúas con método. Diseña un ciclo de feedback que corrija recuperación, ranking, prompts y el propio corpus.
En el post anterior vimos cómo contener alucinaciones. Hoy cerramos el círculo: feedback humano en RAG para identificar fallas y convertirlas en mejoras persistentes del sistema.
Qué feedback recoger (y cómo usarlo)
- Explícito: 👍/👎, razón seleccionable (p. ej., “faltó evidencia”, “cita incorrecta”, “desactualizado”), edición de la respuesta, suggested answer.
- Implícito: clic en documento, tiempo de lectura (dwell), scroll, abandono, reformulación de la misma pregunta.
- Débil pero útil: escalado a humano, tickets creados, reintentos con más contexto.
Dónde aplicar las mejoras
- Recuperación: sinónimos y expansiones de consulta, filtros por metadatos, Top-K, reranking.
- Ranking: ajustar pesos (título > cuerpo), priorizar frescura o autoridad.
- Prompting: exigir citas, política de abstención y formato; añadir ejemplos few-shot con casos fallados.
- Chunking/ingesta: tamaños y solapes; títulos y anclas; división por secciones reales.
- Corpus: subir/actualizar documentos faltantes; retirar fuentes engañosas; normalizar versiones.
Diagnóstico de causa raíz (plantilla)
{
"request_id": "uuid",
"vote": "up|down",
"reason": "missing_context|wrong_citation|hallucination|outdated|tone|format|latency",
"signals": {"clicks":[{"docId":"...","dwell_ms":4200}], "reformulated": true},
"gold_decision": "supported|insufficient|refuted|null",
"action_suggested": ["add_doc","fix_chunking","expand_query","lower_topk","update_prompt"]
}
La clave es normalizar razones para generar acciones automáticas.
Micro-workflow en n8n: “Feedback → Mejora”
- Webhook → recibe
{request_id, vote, reason, signals}. - Function (triage) → mapea
reasona acciones:missing_context→ expand_query (sinónimos, HyDE), subirTop-Ktemporal.wrong_citation→ re-rank forzado por source=trusted; revisar fragmentos.outdated→ crear tarea “actualizar doc” y marcar colección para reindex.hallucination→ reforzar abstención y exigir citas.
- HTTP/DB → registra feedback y enlaza a
request_id, usuario y versión de pipeline. - Branch:
- Si expand_query → vuelve a ejecutar RAG con expansión + rerank y guarda el delta de calidad.
- Si add_doc → crea ticket en backlog “corpus” (con URL/fuente sugerida).
- Si update_prompt → abre PR de plantilla (A/B listo).
- Notifier → avisa al owner del corpus cuando haya ≥N votos negativos sobre el mismo tema.
- Database → agrega métricas: win-rate post-corrección, groundedness y costo.
Métricas de mejora continua
- Acceptance rate (👍 / total) y su evolución por tema.
- Groundedness (% de hechos con cita válida) y Recall@K post-expand_query.
- Time-to-fix (de feedback a corrección efectiva).
- Click-through a documentos citados y dwell medio.
- Coste/latencia del pipeline con y sin correcciones automáticas.
A/B de correcciones
No “confíes” en tu cambio: pruébalo. Mantén dos variantes (pipeline.vN vs pipeline.vN+1) y mide: aceptación, groundedness, costo y p95. Promociona solo si mejora sin romper seguridad.
Anti-patrones
- Feedback libre no estructurado (texto suelto) → difícil de accionar. Usa razones normalizadas.
- Sobreajuste a casos raros → exige N ejemplos antes de cambiar el prompt o el corpus.
- Reintentos ciegos → reintenta con differences concretas (qué falló) o abstente.
- Sin versión de pipeline → imposible saber qué cambio ayudó o dañó.
Tips para Laravel/PHP
- Esquema:
feedback(id, request_id, user_id, vote, reason, meta_json, created_at) pipeline_versions(id, name, rag_index_v, embedder_v, prompt_v, chunker_v, created_at) - Endpoints:
POST /feedback(rate limit + auth),GET /feedback/stats(por tema/colección). - Jobs:
RetryRAG(con expansión),ReindexCollection,UpdatePromptVariant. - Política de datos: anonimiza PII, guarda solo metadatos y
docId/URL pública. - Observabilidad: añade
request_idypipeline_versiona cada traza/registro.
Conclusión
El feedback humano convierte un RAG “reactivo” en un sistema que aprende de sus errores. Con razones normalizadas, acciones automáticas y A/B disciplinado, tu asistente mejorará semana a semana.
← Anterior: Cómo detectar y manejar alucinaciones en modelos de lenguaje