20 · Evaluar apps con LLM
No puedes lanzar lo que no puedes medir. Exact-match para tareas deterministas, recall@k para recuperación y groundedness para generación convierten 'se siente bien' en números que puedes seguir.
La evaluación hace que una app con LLM sea lanzable: las tareas deterministas usan exact-match / contains, la recuperación usa recall@k y la generación usa groundedness (¿la respuesta está respaldada por el contexto recuperado?). LLM-como-juez escala la calificación subjetiva pidiéndole a un modelo fuerte que puntúe las salidas contra una rúbrica.
Sin esto:
Sin métricas cambias un prompt, 'sientes' que mejoró y empeoras en silencio en los casos que no miraste. Con un set de evaluación cada cambio se vuelve un número que puedes defender.
Una app con LLM es un producto, y los productos necesitan una suite de pruebas. Pero a diferencia del código normal, la salida es texto, así que "¿pasó?" necesita una métrica. El truco es elegir la métrica correcta por tipo de tarea — no hay un único número que capture todo.
1. Tareas deterministas → exact-match / contains. Clasificación, extracción, matemáticas, código: sí hay una respuesta correcta. Compara la salida del modelo con la etiqueta dorada por coincidencia exacta de string (normalizada: minúsculas, sin espacios) o un chequeo más laxo de contains. Esto te da una exactitud simple que puedes graficar.
2. Recuperación → recall@k. Antes de generar, RAG recupera los top-k chunks. La métrica de recuperación pregunta: de los documentos que deberían haberse encontrado (el conjunto relevante), ¿cuántos aparecen en el top-k? Esa fracción es recall@k. Si recall@k es bajo, ningún ajuste de prompt arreglará la respuesta — el modelo nunca vio el texto correcto.
3. Generación → groundedness / fidelidad. Incluso con el contexto correcto, el modelo puede alucinar — afirmar cosas que el contexto no respalda. Groundedness mide la fracción del contenido de la respuesta que realmente está respaldado por el contexto recuperado. Un proxy simple es el solapamiento de tokens: ¿qué porción de las palabras-de-contenido de la respuesta aparece en el contexto? Los sistemas reales usan un modelo de entailment o un juez LLM, pero la idea es la misma — penalizar afirmaciones que el contexto no puede justificar.
4. LLM-como-juez. Para cualidades subjetivas (utilidad, tono, completitud) le preguntas a un modelo fuerte: "Dada esta pregunta, contexto y respuesta, puntúa la fidelidad de 1 a 5 y explica." Escala el juicio humano a miles de casos. Lo describimos aquí (necesita una llamada a API) pero no lo ejecutaremos.
Calculemos las dos métricas que deciden si una respuesta RAG es confiable: recall@k para la recuperación y un puntaje de groundedness por solapamiento de tokens para la generación. Las corremos sobre dos casos de ejemplo — uno donde la respuesta se ciñe al contexto recuperado (grounded) y otro donde el modelo inventó algo (alucinado). Observa cómo groundedness separa limpiamente ambos aunque los dos suenen fluidos.
Python (in browser)
recall@k sube al ampliar la ventana de recuperación; el groundedness por solapamiento de tokens separa limpiamente una respuesta fiel de una alucinada.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Las librerías de evaluación de producción (Ragas, TruLens, OpenAI evals) reemplazan nuestro proxy de solapamiento de tokens con un juez LLM, pero miden lo mismo: ¿cada afirmación está respaldada por el contexto?
Tu app RAG da una respuesta incorrecta. Mides recall@5 = 0.2 (el chunk relevante normalmente no se recupera). ¿Dónde deberías enfocarte primero?
- Elige la métrica por tarea: exact-match/contains para tareas deterministas, recall@k para recuperación, groundedness para generación.
- recall@k = (docs relevantes encontrados en top-k) / (todos los docs relevantes); recall bajo significa arreglar el recuperador antes que el prompt.
- Groundedness/fidelidad mide cuánto de la respuesta respalda realmente el contexto — la primera línea contra la alucinación. LLM-como-juez escala la calificación subjetiva.
Todo despliegue serio de RAG sigue tableros de recall@k y puntajes de fidelidad en CI; las librerías de evaluación (Ragas, TruLens, OpenAI evals) y LLM-como-juez controlan los cambios de prompt y modelo.
Si lo quitas: Sin evaluación optimizas por intuición, no atrapas regresiones y lanzas alucinaciones que nunca mediste.