22 · Capstone: un mini RAG-agente
Ensambla todo el track en un pipeline: ingerir → chunk → embed → indexar → recuperar → generar fundamentado → guardrail → evaluar, de principio a fin sobre una base de conocimiento diminuta.
Un RAG-agente es un pipeline de las piezas de este track: ingerir y trocear documentos, embeber e indexar, recuperar por similitud coseno, generar una respuesta fundamentada solo en el texto recuperado, proteger la E/S y puntuar la groundedness. Cada etapa es simple; el valor está en conectarlas correctamente.
Sin esto:
Conocer cada etapa por separado no es lo mismo que lanzar una. El capstone obliga a la integración: dónde el tamaño de chunk se encuentra con la calidad de recuperación, dónde la recuperación se encuentra con la fundamentación, dónde un guard atrapa lo que la evaluación solo marcaría después.
Hora de juntarlo todo. Un RAG-agente es la arquitectura canónica de app con LLM, y ya tienes cada pieza:
- Ingerir documentos crudos (tu base de conocimiento).
- Trocear (chunk) en piezas del tamaño de recuperación.
- Embeber cada chunk en un vector.
- Indexar los vectores para búsqueda rápida.
- Recuperar los chunks más similares a la consulta (similitud coseno).
- Generar una respuesta que use solo el texto recuperado (un respondedor fundamentado).
- Guardrail sobre la salida (aquí: una compuerta de fundamentación — rechaza si no está respaldada).
- Evaluar el resultado (puntaje de groundedness de la lección 20).
La celda de abajo conecta todo eso de principio a fin sobre una base de conocimiento diminuta de cuatro documentos. El embebedor es un vector bag-of-words determinista (los sistemas reales usan un modelo entrenado, pero la mecánica de recuperación es idéntica), y el "generador" es un respondedor fundamentado simulado: en vez de llamar a un LLM, hilvana frases tomadas solo de los chunks recuperados — un sustituto determinista que, por construcción, no puede alucinar. Eso nos deja ver correr todo el flujo, de forma reproducible, en el navegador.
Python (in browser)
Todo el track en una celda: la consulta recupera el chunk de reembolso, el respondedor simulado devuelve solo texto recuperado y la compuerta de fundamentación lo aprueba (groundedness 1.0).
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
A dónde ir después. Tienes un modelo mental funcional de todo el stack — ahora profundiza cada etapa con componentes reales: cambia el embebedor bag-of-words por un modelo sentence-transformer, el escaneo lineal por una base de datos vectorial (FAISS, pgvector, Pinecone) y el respondedor simulado por una llamada real a un LLM fundamentado con un prompt que obligue a citar. Mete las capas de guardrail y evaluación de las lecciones 20–21 en tu CI para que cada cambio se mida. Luego extiende el agente: uso de herramientas en varios pasos, reescritura de consultas, re-ranking y memoria de conversación. Cada uno de esos es el mismo patrón que acabas de construir — un pipeline determinista envuelto alrededor de un predictor del siguiente token.
Empezaste el track reduciendo un LLM a "una función que predice el siguiente token". Lo terminas habiendo envuelto esa función en recuperación, generación, guardrails y evaluación — la anatomía completa de una app con LLM lista para lanzar.
En producción se cambian las piezas de juguete por reales (embeddings sentence-transformer, FAISS, un LLM), pero la forma de ocho etapas — y la compuerta de fundamentación y la evaluación de groundedness — siguen idénticas a lo que construiste.
En el capstone, ¿por qué se describe al respondedor simulado como algo que 'por construcción no puede alucinar'?
- Un RAG-agente es un pipeline de ocho etapas: ingerir → chunk → embed → indexar → recuperar → generar fundamentado → guardrail → evaluar.
- Fundamentar el generador en el texto recuperado (y poner una compuerta sobre un umbral de groundedness) es lo que mantiene confiable una respuesta RAG.
- En producción se cambian las piezas de juguete (bag-of-words, escaneo lineal, respondedor simulado) por reales (embeddings entrenados, base vectorial, un LLM) — la arquitectura no cambia.
Esta es la arquitectura de referencia detrás de asistentes de documentación, copilotos de soporte y búsqueda con IA — construida con LangChain/LlamaIndex sobre una base vectorial, protegida y evaluada de forma continua.
Si lo quitas: Sáltate la integración y tendrás trucos aislados pero ningún sistema lanzable; los fallos viven en las uniones — tamaño de chunk vs recuperación, recuperación vs fundamentación, fundamentación vs guardrail.