¿Qué es un agente RAG?
Un agente RAG (Retrieval-Augmented Generation) es un sistema que combina dos capacidades: recuperar información desde una fuente externa y generar una respuesta utilizando un modelo de lenguaje.
La idea principal es que el modelo no responda únicamente con lo que aprendió durante su entrenamiento, sino que consulte primero una base de conocimiento propia y después use esa información como contexto para responder.
Podemos representarlo así:
Pregunta del usuario
->
Recuperación de información
->
Contexto relevante
->
Modelo de lenguaje
->
Respuesta final
1. El problema que resuelve
Un modelo de lenguaje, por sí solo, no conoce los documentos privados de una empresa, no sabe qué se actualizó ayer y puede inventar información cuando no tiene datos suficientes.
RAG resuelve parte de este problema haciendo que el modelo consulte primero documentos reales antes de responder.
Así la respuesta no proviene únicamente del entrenamiento del modelo, sino también del contenido que el sistema le proporciona en el momento.
2. Componentes principales
Un agente RAG suele estar formado por:
- Fuente de conocimiento: documentos, PDFs, artículos, bases de datos o páginas que contienen la información.
- Sistema de indexación: procesa los documentos y los prepara para ser buscados.
- Base vectorial: almacena representaciones numéricas de los textos para permitir búsquedas por similitud.
- Recuperador (Retriever): busca los fragmentos más relevantes para la pregunta.
- Modelo de lenguaje (LLM): genera la respuesta final usando el contexto recuperado.
- Orquestador (agente): decide cuándo buscar, cuántos documentos recuperar y cómo construir la respuesta.
3. Flujo de un agente RAG
El flujo típico puede resumirse en estos pasos:
1. El usuario hace una pregunta
2. La pregunta se convierte en un vector
3. Se buscan fragmentos similares en la base vectorial
4. Los fragmentos relevantes se envían al LLM
5. El LLM redacta la respuesta usando ese contexto
Cada paso tiene una función concreta. El objetivo no es que el modelo "recuerde" el contenido, sino que lo lea en el momento y lo use para responder.
4. Indexación: preparar los documentos
Antes de poder recuperar información, los documentos deben procesarse.
Los pasos habituales son:
- Carga: leer los archivos (PDF, HTML, TXT, Markdown, etc.).
- División (chunking): partir el texto en fragmentos pequeños, por ejemplo de 500 a 1000 caracteres.
- Vectorización (embedding): convertir cada fragmento en un vector numérico usando un modelo de embeddings.
- Almacenamiento: guardar el vector junto con el texto original en una base vectorial.
El chunking es importante porque el modelo no puede recibir un documento entero. Se trabaja con fragmentos que contengan suficiente contexto, pero que no excedan el límite de tokens.
5. Embeddings y búsqueda por similitud
Un embedding es una representación numérica de un texto. Textos con significado parecido producen vectores cercanos en el espacio.
Cuando el usuario hace una pregunta, esa pregunta también se convierte en un vector. Después se buscan los vectores más cercanos dentro de la base vectorial.
"¿Cuál es la política de vacaciones?"
-> vector
-> comparación con vectores guardados
-> fragmentos más similares
Las métricas más comunes para medir esta cercanía son similitud coseno, producto punto o distancia euclidiana.
6. El recuperador (Retriever)
El retriever es el componente que busca los fragmentos relevantes.
Existen varias estrategias:
- Búsqueda semántica: usa embeddings para encontrar textos con significado parecido.
- Búsqueda por palabras clave: usa índices tradicionales como BM25.
- Búsqueda híbrida: combina ambas para mejorar los resultados.
Muchos agentes aplican también un paso de reranking donde un modelo más pequeño reordena los resultados según su relevancia real.
7. El rol del modelo de lenguaje
Una vez recuperados los fragmentos, se construye un prompt aumentado que incluye:
- La pregunta del usuario.
- Los fragmentos de contexto recuperados.
- Instrucciones sobre cómo responder.
Un ejemplo simplificado sería:
Responde la pregunta usando únicamente el contexto.
Contexto:
[Fragmento 1]
[Fragmento 2]
Pregunta:
¿Cuál es la política de vacaciones?
El modelo genera la respuesta basándose en ese contexto, en lugar de inventar.
8. ¿Por qué se llama "agente"?
Un RAG básico solo recupera y responde. Un agente RAG añade decisiones: puede elegir qué herramienta usar, decidir si necesita buscar más información, reformular la pregunta, o iterar varias veces antes de responder.
Pregunta
->
¿Necesito buscar?
-> sí
Recuperar contexto
->
¿Es suficiente?
-> no
Reformular y buscar otra vez
->
Responder
Este comportamiento se asemeja al de un agente que razona sobre sus acciones.
9. Implementación paso a paso
Un agente RAG puede implementarse de forma sencilla con este flujo:
Paso 1. Recolectar documentos
docs/ -> manual.pdf, faq.md, guia.txt
Paso 2. Dividir el texto en fragmentos
const chunks = splitText(documento, 800, 100);
Paso 3. Generar embeddings
const vector = await embeddingModel.embed(chunk);
Paso 4. Guardar en la base vectorial
await vectorStore.add({ vector, texto: chunk });
Paso 5. Recuperar fragmentos relevantes
const resultados = await vectorStore.search(pregunta, 5);
Paso 6. Construir el prompt aumentado y consultar al LLM
const respuesta = await llm.generate({
prompt: construirPrompt(pregunta, resultados)
});
10. Ejemplo conceptual de un agente RAG
Entrada: "¿Cómo pido vacaciones?"
->
Embedding de la pregunta
->
Búsqueda en base vectorial
->
Fragmentos sobre políticas de RRHH
->
LLM con contexto
->
Respuesta: "Debes solicitarlas desde el portal..."
El agente no memoriza la respuesta. La construye cada vez leyendo los documentos.
11. Buenas prácticas
- Fragmentos bien delimitados: evitar cortes en medio de ideas.
- Metadata: guardar origen, fecha y sección de cada fragmento.
- Búsqueda híbrida: combinar semántica y palabras clave.
- Reranking: reordenar resultados antes de enviarlos al modelo.
- Citas: incluir la fuente de cada fragmento en la respuesta.
- Control de alucinaciones: indicar al modelo que responda solo con el contexto.
- Evaluación: medir precisión del retriever y calidad de la respuesta.
12. Limitaciones
RAG no elimina todos los problemas de un LLM. Si el retriever falla, la respuesta será mala. Si los documentos son contradictorios, el modelo puede mezclar información. Si los fragmentos no contienen la respuesta, el modelo puede inventarla.
Por eso el diseño del sistema de recuperación es tan importante como el modelo que genera la respuesta.
Consideraciones
Un agente RAG combina búsqueda de información con generación de lenguaje. No se trata solo de conectar un modelo a una base de datos, sino de diseñar un flujo donde la recuperación, el contexto y la generación trabajen juntos.
La clave está en entender que el modelo no aprende los documentos: los consulta. Y que la calidad final depende tanto del modelo como de la calidad de la información recuperada.
© Arturo Juárez Monroy