RAGs & Recuperación

¿Qué es RAG? Retrieval-Augmented Generation para Empresas

Por Carlos Montiel | Arquitecto de Soluciones IA Empresarial | guatemalia.com
✍️ Carlos Montiel 📂 RAGs & Recuperación ⌛ 12 min de lectura
Guía completa sobre RAG: cómo funciona, arquitectura de indexación y consulta, embeddings, vector stores y casos de uso empresariales con código real.

El problema que resuelve RAG

Los LLMs no conocen los documentos internos de tu empresa y su conocimiento tiene fecha de corte. Sin RAG, si le preguntas a un LLM sobre tu catálogo actualizado, manual de RRHH o estado de un contrato específico, el modelo puede inventar la respuesta (alucinar).

RAG resuelve esto conectando el LLM con una base de conocimiento actualizable en tiempo real. En lugar de "recordar" información del entrenamiento, el modelo la busca y lee justo antes de responder. Resultado: respuestas precisas sobre tus datos, sin reentrenamiento.

Arquitectura: indexación y consulta

Fase de indexación (offline):

  1. Cargar documentos (PDF, Word, bases de datos, emails)
  2. Dividir en fragmentos (chunks) de 512-1024 tokens
  3. Generar embeddings para cada chunk
  4. Almacenar en base de datos vectorial (pgVector, Pinecone, Chroma)
Fase de consulta (online):
  1. El usuario hace una pregunta
  2. Se genera el embedding de la pregunta
  3. Se buscan los chunks más similares por distancia vectorial
  4. Los chunks relevantes se inyectan como contexto al LLM
  5. El LLM genera una respuesta basándose en el contexto

Técnicas avanzadas de RAG

El RAG básico funciona bien, pero el RAG de producción usa técnicas adicionales:

Casos de uso empresariales de RAG

Ejemplo de código

# Pipeline RAG completo con LangChain + pgVector
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import PGVector
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# 1. Cargar y dividir
loader = PyPDFLoader("contrato_empresa.pdf")
chunks = RecursiveCharacterTextSplitter(
    chunk_size=1000, chunk_overlap=200
).split_documents(loader.load())

# 2. Crear vector store
vectorstore = PGVector.from_documents(
    documents=chunks,
    embedding=embeddings,
    connection_string="postgresql://user:pass@localhost/db",
    collection_name="contratos"
)

# 3. RAG chain
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})
llm = ChatAnthropic(model="claude-sonnet-4-6")

prompt = ChatPromptTemplate.from_template(
    "Contexto del documento:\n{context}\n\nPregunta: {question}\n\nRespuesta:"
)
chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt | llm | StrOutputParser()
)
print(chain.invoke("¿Cuales son las penalidades por incumplimiento?"))

¿Necesitas implementar esto en tu empresa?

Carlos Montiel es arquitecto de soluciones IA empresarial con experiencia en LLMs, Agentes, RAG y orquestación en Guatemala y Latinoamérica.

Contactar a Carlos Montiel
Carlos Montiel
Arquitecto de Soluciones IA Empresarial · guatemalia.com

Especialista en LLMs, Agentes IA, RAG, LangChain y LangGraph para empresas en Guatemala y Latinoamérica. Para consultas de implementación: guatemalia.com/#contacto