Inicio > Cursos > Agentes de IA > RAG: IA con tus propios datos
Agentes de IARAG y MemoriaLección 4 de 7

RAG: IA con tus propios datos

RAG (Retrieval Augmented Generation) permite que la IA responda preguntas usando TUS documentos en vez de solo su conocimiento general. Es la tecnologia detras de chatbots de soporte, asistentes legales, y herramientas de busqueda empresarial.

Problema que resuelve: • Los LLMs solo saben lo que aprendieron en su entrenamiento • No conocen TUS datos: manuales, politicas, productos, clientes • RAG "conecta" tus documentos al LLM

Flujo de RAG: 1. INDEXAR (una sola vez): a. Cargar documentos (PDF, web, base de datos, Notion, etc.) b. Dividir en chunks de ~500-1000 caracteres c. Convertir cada chunk a un embedding (vector numerico) d. Guardar en base de datos vectorial (Chroma, Pinecone, Weaviate)

2. CONSULTAR (cada pregunta): a. Convertir la pregunta del usuario a embedding b. Buscar los 3-5 chunks mas similares en la base vectorial c. Pasar los chunks + pregunta al LLM d. El LLM responde basandose en los documentos

Que son los embeddings?

Un embedding es una representacion numerica de texto. Convierte palabras y frases en vectores (listas de numeros) donde textos similares tienen vectores cercanos.

Ejemplo simplificado: • "perro" → [0.8, 0.2, 0.1] • "gato" → [0.7, 0.3, 0.1] (cercano a perro) • "programacion" → [0.1, 0.1, 0.9] (lejos de perro)

Cuando el usuario pregunta "como es la politica de devolucion?", el sistema: 1. Convierte la pregunta a embedding 2. Busca en la base vectorial los chunks con embeddings mas cercanos 3. Encuentra chunks del manual que hablan de devoluciones 4. Se los pasa al LLM junto con la pregunta

Modelos de embedding: • OpenAI text-embedding-3-small: $0.02 / 1M tokens, bueno y barato • Cohere embed-v3: Gratuito hasta cierto punto • Sentence-transformers: Open source, gratis, corres local

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA

# 1. Cargar documentos
loader = PyPDFLoader("manual_empresa.pdf")
docs = loader.load()
print(f"Paginas cargadas: {len(docs)}")

# 2. Dividir en chunks
splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,  # Overlap evita cortar ideas a la mitad
)
chunks = splitter.split_documents(docs)
print(f"Chunks creados: {len(chunks)}")

# 3-4. Crear embeddings y guardar
db = Chroma.from_documents(
    chunks,
    OpenAIEmbeddings(model="text-embedding-3-small"),
    persist_directory="./chroma_db"  # Persiste en disco
)

# 5-7. Crear cadena de QA
qa = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-4o-mini"),
    retriever=db.as_retriever(search_kwargs={"k": 3}),
    return_source_documents=True,
)

# Preguntar
result = qa.invoke("Cual es la politica de devolucion?")
print(result["result"])
for doc in result["source_documents"]:
    print(f"  Fuente: pagina {doc.metadata.get('page', '?'")
Consejochunk_overlap=200 es clave: si cortas un parrafo exactamente por la mitad, pierdes contexto. El overlap hace que los chunks compartan 200 caracteres, preservando ideas completas.
← Agentes con LangChainMemoria para agentes →

Practica esta lección

Resuelve los ejercicios del curso de Agentes de IA en la app, gratis y con corrección automática.

Empezar a practicar