Agentes RAG: qué son y cómo se implementan

¿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