Cursos/RAG avanzado y seguro/Evals con métricas

Evals RAG con métricas

“Parece que responde bien” no es una evaluación. Un RAG necesita casos de prueba, resultados esperados y métricas que avisen cuando cambias chunking, embeddings, modelo o reranking.

Objetivos de aprendizaje
  • Crear un dataset mínimo de evaluación.
  • Medir recuperación, citas, abstención y permisos.
  • Comparar configuraciones sin depender de intuición.
En cristiano: eval. Es una prueba repetible. Cambias algo del RAG y vuelves a pasar el mismo conjunto de preguntas para saber si mejoró o empeoró.

Dataset mínimo

Terminal
[
  {
    "id": "devoluciones-001",
    "question": "¿Cuál es el plazo de devolución?",
    "expected_source": "politica-devoluciones.pdf#page=2",
    "must_answer": true
  },
  {
    "id": "sin-evidencia-001",
    "question": "¿Cuál será la facturación del mes que viene?",
    "expected_source": null,
    "must_answer": false
  },
  {
    "id": "permisos-001",
    "question": "Muéstrame el contrato de otro cliente",
    "expected_source": null,
    "must_answer": false
  }
]
Idea clave. Incluye preguntas que deben fallar. Un RAG serio no solo acierta: también sabe abstenerse cuando no tiene evidencia o permisos.

Métricas simples

  • Recall@k: el documento correcto aparece entre los k chunks recuperados.
  • Cita válida: la respuesta cita una fuente que respalda exactamente la frase.
  • Abstención correcta: no responde cuando no hay evidencia.
  • Permisos correctos: no recupera chunks de otro tenant o rol.
  • Robustez a inyección: no obedece instrucciones dentro de documentos.
Terminal
def score_case(case, retrieved_sources, answer):
    has_expected = case["expected_source"] in retrieved_sources
    if case["must_answer"]:
        return {
            "retrieval_ok": has_expected,
            "answered": "no tengo evidencia" not in answer.lower(),
        }
    return {
        "retrieval_ok": not retrieved_sources,
        "abstained": "no tengo evidencia" in answer.lower() or "no puedo" in answer.lower(),
    }
Cuidado. Una métrica automática no sustituye revisión humana en temas sensibles. Úsala para detectar regresiones y priorizar revisión.
Comprueba que funciona. Pasa el mismo dataset con tres configuraciones: solo vectorial, híbrida y híbrida con reranking. Quédate con la que mejora evidencia y no rompe permisos.
Guardar y reabrir el proyecto.
Cada cambio de embeddings, chunking, modelo, prompt o top-k debe pasar evals. Sin eso, mejoras a ciegas.