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.
Hybrid Search
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:
- Relevancia del contexto: ¿Los chunks recuperados son relevantes?
- Fidelidad: ¿La respuesta es fiel al contexto recuperado?
- 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.