rag2 min read

RAG para Agentes: Memoria Aumentada

Cómo implementar Retrieval-Augmented Generation para dotar a tus agentes de conocimiento contextual y memoria a largo plazo.

¿Qué es RAG?

Retrieval-Augmented Generation (RAG) es un patrón que combina la búsqueda de información relevante con la generación de texto por un LLM. Para agentes, RAG funciona como una memoria a largo plazo que les permite acceder a conocimiento específico.

Arquitectura básica de RAG

from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
 
class AgentMemory:
    def __init__(self):
        self.embeddings = OpenAIEmbeddings()
        self.vectorstore = Chroma(
            embedding_function=self.embeddings
        )
 
    def store(self, text: str, metadata: dict):
        self.vectorstore.add_texts(
            texts=[text],
            metadatas=[metadata]
        )
 
    def recall(self, query: str, k: int = 5):
        return self.vectorstore.similarity_search(
            query, k=k
        )

Chunking Strategies

La forma en que dividimos los documentos impacta directamente la calidad del retrieval:

Fixed-size chunks

Dividir por número fijo de tokens. Simple pero puede cortar contexto.

Semantic chunking

Dividir por unidades semánticas (párrafos, secciones). Mejor coherencia.

Recursive chunking

Dividir jerárquicamente, preservando la estructura del documento.

Combinar búsqueda semántica con búsqueda por keywords para mejores resultados:

  • Dense retrieval: Búsqueda por embeddings (similitud semántica)
  • Sparse retrieval: BM25 o TF-IDF (coincidencia de keywords)
  • Hybrid: Combinar ambos con reciprocal rank fusion

Evaluación de RAG

Métricas clave para evaluar tu pipeline de RAG:

  1. Relevancia del contexto: ¿Los chunks recuperados son relevantes?
  2. Fidelidad: ¿La respuesta es fiel al contexto recuperado?
  3. Respuesta: ¿La respuesta es útil y completa?

Conclusión

RAG es un componente esencial para agentes que necesitan acceder a conocimiento específico. La clave está en optimizar cada etapa del pipeline: ingesta, chunking, embedding, retrieval y generación.