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.
Fase de indexación (offline):
El RAG básico funciona bien, pero el RAG de producción usa técnicas adicionales:
# 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?"))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