Resumen
El episodio 167 de enCoders explica qué es un RAG (retrieval augmented generation) y cómo evaluar si funciona bien. En la primera parte se construye un mini RAG de juguete de principio a fin. Usa 20 documentos sobre el juego de mesa Gloomhaven, embeddings de OpenAI, similitud coseno para el retrieval y un modelo `gpt-4o-mini` para generar la respuesta. En la segunda parte se revisan métricas de retrieval (precision@k, recall@k, MRR) y métricas con LLM como juez de la librería Ragas (faithfulness, response relevancy, context precision y context recall). Las métricas clásicas son precisas pero exigen un dataset con la verdad de qué documentos son relevantes, que casi nadie entrega. Las de Ragas no lo exigen, pero dependen del criterio de un LLM y pueden dar resultados raros. La conclusión principal es tratar el RAG como un producto de software. Hay que usar datasets de prueba y diseño de experimentos, y también medir latencia, costo y uso real, porque lo que cuenta es el dolor del usuario final y no solo las métricas.
Capítulos
- 00:00IntroSe define RAG como una técnica para aumentar la base de conocimiento de un LLM, por ejemplo con información interna de una empresa para onboarding. El tema del episodio es medirlos, algo que se subestima frente a la parte técnica más entretenida; el código tiene unas 500 líneas, escrito en gran parte con ChatGPT 5.
- 02:56Ejemplo Práctico: RAG para Juegos de MesaMati quiere un chatbot de reglas de Gloomhaven que responda con alta precisión (por ejemplo, cuántos objetos puede llevar un personaje según su nivel). Explica el flujo input → retrieval → generación, que los problemas pueden estar en cualquiera de los dos lados, y que también importan métricas de experiencia como la latencia. Insiste en que las métricas deben apuntar al dolor del usuario final.
- 17:10Embeddings VectorialesToda frase se convierte en un vector (el modelo de OpenAI usado tendría unas 3072 dimensiones). La similitud coseno (producto punto dividido por las normas) vale 1 para vectores iguales y 0 para ortogonales, y permite encontrar los documentos más cercanos. Se discute si el embedding conserva el orden de las palabras y se aclara que guarda significado semántico, gracias a Transformers y Attention.
- 19:19Implementando RAG: Guía Paso a PasoLos 20 documentos se vectorizan en una matriz de 20 × 3072 (la base vectorial) y `retrieve_topk` devuelve los 3 más cercanos a la pregunta. Luego se concatenan como contexto en un prompt para `gpt-4o-mini` con temperatura 0.2 y un máximo de 250 tokens, instruido a responder solo con el contexto. Se muestra un ejemplo con la pregunta de qué pasa si un personaje se queda sin cartas. Se discute el tradeoff de cuántos documentos traer (más contexto cuesta más y puede confundir al modelo, menos puede perder información relevante).
- 39:30Desafíos de la Escalabilidad y SeguridadEl concepto es simple y lo difícil en la práctica es escalabilidad, performance, ciberseguridad y privacidad de datos. Mati menciona preguntas del chat: la librería Atlas (nadie la ha usado), Gemini File Search, Docling (la mejor que probó para parsear PDFs, aunque insuficiente para su caso) y un libro sobre patrones de desarrollo con IA. Responde a Diego que un RAG propio da control, privacidad y flexibilidad frente a subir PDFs a ChatGPT o NotebookLM.
- 43:09MemesSe comentan memes del Discord, incluido uno sobre envenenar imágenes con ruido para engañar a un modelo y otro sobre postular a trabajos sin cumplir todos los requisitos. También se habla de la caída de Cloudflare ese día (que afectó a Canva) y de tener versiones locales de las herramientas. Se menciona una idea de stream sobre un cheat sheet de Positron.
- 48:00RAG de en_coders?Se imagina una herramienta que indique en qué capítulo y en qué minuto se habló de un tema, por ejemplo como comando de Discord. Mati advierte que es difícil por la calidad de la información: no hay datos estructurados, solo videos guardados en un disco duro, y habría que trabajar con las transcripciones. Un RAG puro sería "fome" y haría falta algo más parecido a un agente con flujo.
- 51:30Conversación sobre Boku no Hero AcademiaCharla informal sobre anime: la última temporada de Demon Slayer tiene puntajes sobre 9 en My Anime List, y uno de los presentadores va por la temporada 7 de Boku no Hero Academia y dice que mejora de la 5 en adelante. No es contenido técnico.
- 53:55Encontrar tablas en PDFsRespondiendo una pregunta del chat, se dice que un RAG solo funciona con texto, así que las tablas o imágenes hay que transcribirlas, por ejemplo a Markdown. El problema está en el retrieval y requiere trabajo. Se menciona el formato TOON, que reemplazaría a JSON y ahorraría cerca de 40% de tokens de entrada, pero Mati desaconseja usarlo en producción porque los LLM están más entrenados con JSON. Se añade que los RAG reales se complican por la arquitectura (microservicios, escalabilidad).
- 58:12Métricas de Evaluación: Precisión y RecallSe prueba el RAG y se plantea la pregunta de si funciona bien. Hace falta un dataset de preguntas, respuestas y los IDs de documentos relevantes (ground truth), que nadie entrega y cuesta construir. Se definen precision@k (hits entre los k recuperados) y recall@k (hits entre los relevantes reales) con ejemplos en código, y se explica que subir k aumenta el recall y baja la precisión. También se menciona que el recall suele ser más útil. Al final se mide la latencia.
- 01:16:33Entendiendo el Ranking y el Orden de RecuperaciónSe explica el Mean Reciprocal Rank (MRR), que mide en qué posición aparece el primer documento relevante (1/posición). Mati admite que estas métricas duras son poco prácticas por la dificultad de conseguir el ground truth, aunque son claras y no dependen de un LLM. También señala que vienen de sistemas de búsqueda y recomendadores.
- 01:18:13Evaluación Humana vs. MáquinaSe contrasta la verdad etiquetada por un humano con usar un LLM como juez. Se introduce la librería Ragas (cuyo nombre se atribuye a "retrieval augmented generation assessment"), con documentación desactualizada y métricas deprecadas que le costó adaptar.
- 01:23:29Explorando la Métrica de FidelidadFaithfulness mide el grado de alucinación: número de afirmaciones (claims) de la respuesta que se sustentan en el contexto dividido por el total de afirmaciones. Un LLM juez extrae los claims, así que no es una métrica dura. Se señala que puede basarse en conocimiento del modelo base sin que sea estrictamente alucinación.
- 01:26:42Implementando y Probando MétricasSe arma el dataset para Ragas (pregunta, respuesta, contextos, ground truth) y se usa un modelo juez más potente que el generador (GPT-4.1). Con las preguntas del dataset, faithfulness da 1 en todas. Se explica response relevancy (generar preguntas desde la respuesta y compararlas con la original), que se colgó al implementarla. Context precision y context recall se describen como equivalentes con LLM de precision@k y recall@k, aunque el context recall exige ground truth.
- 01:35:44Ejemplos de estrésSe prueba con preguntas que no están en los documentos. Cuando el modelo responde que no está en el contexto, faithfulness da 0.5, lo que Rodrigo explica como un claim derivado del contexto. En otro caso da 1 a una respuesta parcialmente imposible, y en la pregunta con una parte inventada da 0.4. Mati concluye que la métrica es útil pero tiene rarezas. Recomienda construir datasets de prueba y diseño de experimentos para mejorar chunking y retrieval sin sobreajustar, usar FAQs como fuente y analizar qué preguntan los usuarios. Insiste en considerar costo, latencia y engagement.
- 01:48:13CierreConclusión: pensar el RAG como un producto de software, monitorear el drift de los modelos y medir lo que duele al cliente. Además se recuerda que subir k aumenta recall y faithfulness pero también el costo, y se menciona la técnica de re-ranking (traer muchos chunks y reordenarlos con un segundo modelo). Se adelanta que la próxima semana probablemente seguirán con el tema de evaluación, en su parte de código.