← Volver al Blog

Construyendo Sistemas RAG con LangChain

11 de noviembre de 202512 min de lecturapor Francisco París
AIRAGLangChainPython

La Generación Aumentada por Recuperación (RAG) está revolucionando la forma en que construimos aplicaciones de IA. Al combinar grandes modelos de lenguaje con bases de conocimiento externas, podemos crear sistemas que son tanto potentes como fundamentados en información factual.

¿Qué es RAG?

Los sistemas RAG funcionan mediante:

  1. Recuperación de información relevante desde una base de conocimiento
  2. Aumento del prompt del LLM con este contexto
  3. Generación de respuestas basadas tanto en el prompt como en el contexto recuperado

Este enfoque resuelve varios problemas clave de los LLMs por sí solos:

  • Alucinaciones: Al fundamentar las respuestas en hechos recuperados
  • Información desactualizada: Las bases de conocimiento pueden actualizarse sin reentrenar
  • Especificidad de dominio: Fácil añadir conocimiento especializado

Configurando tu Entorno

Primero, instala los paquetes necesarios:

pip install langchain chromadb openai

Construyendo un Sistema RAG Básico

Aquí tienes una implementación básica:

from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# Inicializar embeddings
embeddings = OpenAIEmbeddings()

# Crear vector store
vectorstore = Chroma.from_documents(
    documents=docs,
    embedding=embeddings
)

# Crear cadena de recuperación
qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    chain_type="stuff",
    retriever=vectorstore.as_retriever()
)

# Consultar el sistema
response = qa.run("¿Qué es RAG?")
print(response)

Componentes Clave

1. Carga de Documentos

Usa los document loaders de LangChain para ingerir varios formatos:

from langchain.document_loaders import TextLoader, PDFLoader

loader = PDFLoader("documento.pdf")
documents = loader.load()

2. División de Texto

Divide documentos en chunks para mejor recuperación:

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200
)
chunks = text_splitter.split_documents(documents)

3. Vector Store

Elige la base de datos vectorial adecuada para tus necesidades:

  • ChromaDB: Excelente para desarrollo local
  • Pinecone: Servicio gestionado, escalable
  • Weaviate: Open-source, con todas las funcionalidades

Consideraciones para Producción

Al desplegar sistemas RAG a producción, considera:

  1. Caché: Cachea consultas frecuentes para reducir costos
  2. Monitoreo: Trackea la calidad de recuperación y tiempos de respuesta
  3. Escalabilidad: Usa bases de datos vectoriales gestionadas para datasets grandes
  4. Seguridad: Implementa controles de acceso apropiados para datos sensibles

Técnicas Avanzadas

Multi-Query Retrieval

Mejora la calidad de recuperación generando múltiples variaciones de la consulta:

from langchain.retrievers import MultiQueryRetriever

retriever = MultiQueryRetriever.from_llm(
    retriever=vectorstore.as_retriever(),
    llm=OpenAI()
)

Compresión Contextual

Reduce el uso de tokens comprimiendo el contexto recuperado:

from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor

compressor = LLMChainExtractor.from_llm(llm)
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=vectorstore.as_retriever()
)

Conclusión

Los sistemas RAG son herramientas poderosas para construir aplicaciones de IA que necesitan acceso a conocimiento externo. Con LangChain, implementar estos sistemas es sencillo, pero hay muchas consideraciones para el despliegue en producción.

Empieza simple, mide el rendimiento, e itera basándote en tu caso de uso específico.

Recursos


¿Tienes preguntas sobre sistemas RAG? Contáctame o conectemos en LinkedIn.