Ir al contenido principal

Tutorial RAG desde Cero: Crea una Base de Conocimiento IA para tu Empresa [2026]

1 de febrero de 2026
25 min

Aprende a implementar RAG desde cero. Tutorial práctico para crear chatbots que responden con TU información: documentos, manuales, FAQs. Con código Python.

Javier Santos

Especialista en IA & Machine Learning

📧¿Te gusta este contenido?

Únete a 547+ profesionales que reciben tips de IA cada semana. Sin spam, cancela cuando quieras.

Tutorial RAG desde Cero: Crea una Base de Conocimiento IA para tu Empresa [2026]

🎓 ¿Quieres implementar RAG en tu empresa? En La Escuela de IA hacemos implementaciones prácticas de RAG con casos reales. Desde chatbots de soporte hasta asistentes internos. Únete por $29/mes.

TL;DR - Resumen Rápido

  • RAG = Retrieval Augmented Generation = ChatGPT + TUS documentos
  • Problema que resuelve: LLMs no conocen tu información privada
  • Cómo funciona: Busca info relevante → La pasa al LLM → Respuesta contextualizada
  • Stack recomendado 2026: LangChain + OpenAI + Pinecone/Qdrant
  • Tiempo de implementación: 2-4 horas para un MVP básico
  • Coste: Desde $0 (modelos locales) hasta ~$50/mes (cloud)


Qué es RAG y Por Qué lo Necesitas en 2026

El Problema

ChatGPT es increíble, pero tiene una limitación enorme: no conoce tu información.

Imagina que quieres un chatbot que:

  • Responda preguntas sobre tus productos
  • Ayude a empleados con procesos internos
  • Atienda clientes con info actualizada de tu empresa

ChatGPT no puede hacer esto porque:

  1. No tiene acceso a tus documentos
  2. Su conocimiento tiene fecha de corte
  3. Se inventa cosas cuando no sabe (alucinaciones)

La Solución: RAG

RAG (Retrieval Augmented Generation) resuelve esto añadiendo un paso previo:

code
1Usuario pregunta → Buscar info relevante en TUS documentos → Pasar contexto al LLM → Respuesta basada en TU información

Es como darle a ChatGPT un "chuleta" con la información que necesita para responder correctamente.

Casos de Uso Reales

Caso de UsoDocumentosBeneficio
Soporte al clienteFAQs, manuales, tickets previos-70% tickets repetitivos
Asistente internoPolíticas, procesos, wikisEmpleados encuentran info en segundos
VentasCatálogos, fichas técnicasVendedores responden al instante
LegalContratos, normativasBúsqueda instantánea en 1000s de docs
OnboardingGuías, tutorialesNuevos empleados autónomos

Arquitectura RAG Explicada

Los 4 Componentes

code
1┌─────────────────────────────────────────────────────────────┐
2│ ARQUITECTURA RAG │
3├─────────────────────────────────────────────────────────────┤
4│ │
5│ 1. DOCUMENTOS 2. EMBEDDINGS 3. VECTOR DB │
6│ ┌──────────┐ ┌──────────────┐ ┌───────────┐ │
7│ │ PDFs │ │ text-embed- │ │ Pinecone │ │
8│ │ Docs │───────▶ │ ding-3-large │────▶ │ Qdrant │ │
9│ │ Web │ │ (OpenAI) │ │ Chroma │ │
10│ └──────────┘ └──────────────┘ └─────┬─────┘ │
11│ │ │
12│ ▼ │
13│ 4. GENERACIÓN Búsqueda │
14│ ┌──────────────┐ ┌──────────────┐ semántica │
15│ │ Usuario │────▶│ Embedding │──────────┘ │
16│ │ pregunta │ │ de query │ │
17│ └──────────────┘ └──────┬───────┘ │
18│ │ │
19│ ▼ │
20│ ┌─────────────────┐ │
21│ │ Contexto + LLM │ │
22│ │ (GPT-4/Claude) │ │
23│ └────────┬────────┘ │
24│ │ │
25│ ▼ │
26│ ┌─────────────────┐ │
27│ │ Respuesta │ │
28│ │ fundamentada │ │
29│ └─────────────────┘ │
30│ │
31└─────────────────────────────────────────────────────────────┘

1. Documentos (Tu Información)

Todo lo que quieres que el chatbot "sepa":

  • PDFs (manuales, contratos, reportes)
  • Documentos Word/Google Docs
  • Páginas web (tu sitio, documentación)
  • Bases de datos (productos, clientes)
  • Emails, tickets de soporte previos

2. Embeddings (Vectores Numéricos)

Los embeddings convierten texto en números que capturan el significado semántico.

python
1# "Cómo devolver un producto" y "proceso de devolución"
2# tienen embeddings MUY similares aunque las palabras sean diferentes

Modelos de embedding recomendados 2026:

ModeloProveedorDimensionesPrecioCalidad
text-embedding-3-largeOpenAI3072$0.13/1M tokens⭐⭐⭐⭐⭐
text-embedding-3-smallOpenAI1536$0.02/1M tokens⭐⭐⭐⭐
voyage-large-2Voyage AI1536$0.12/1M tokens⭐⭐⭐⭐⭐
bge-large-en-v1.5BAAI1024Gratis (local)⭐⭐⭐⭐

3. Vector Database (Almacenamiento)

Donde guardas los embeddings para búsqueda rápida.

Opciones 2026:

DatabaseTipoPrecioMejor Para
PineconeCloudGratis hasta 100K vectoresProducción, scaling
QdrantSelf-hosted/CloudGratis self-hostedControl total
ChromaLocal/EmbebidoGratisPrototipos, MVPs
WeaviateCloud/Self-hostedTier gratisMultimodal
pgvectorExtensión PostgresTu coste PostgresYa usas Postgres

4. LLM (Generación)

El modelo que genera la respuesta final con el contexto.

Modelos recomendados:

ModeloMejor ParaPrecio
GPT-4oCalidad máxima$5/1M input
GPT-4o-miniBalance coste/calidad$0.15/1M input
Claude 3.5 SonnetContexto largo$3/1M input
Llama 3.1 70BSelf-hosted, privacidadGratis (compute)

Tutorial Práctico: RAG en 30 Minutos

Vamos a crear un chatbot que responda preguntas sobre documentación técnica.

Requisitos Previos

bash
1# Python 3.10+
2python --version
3 
4# Crear entorno virtual
5python -m venv rag-env
6source rag-env/bin/activate # Linux/Mac
7# rag-env\Scripts\activate # Windows
8 
9# Instalar dependencias
10pip install langchain langchain-openai langchain-community
11pip install chromadb pypdf python-dotenv

Estructura del Proyecto

code
1rag-tutorial/
2├── .env # API keys
3├── documents/ # Tus PDFs/docs
4│ ├── manual.pdf
5│ └── faqs.txt
6├── ingest.py # Procesar documentos
7├── query.py # Hacer preguntas
8└── requirements.txt

Paso 1: Configurar API Keys

bash
1# .env
2OPENAI_API_KEY=sk-tu-api-key-aqui

Paso 2: Procesar Documentos (ingest.py)

python
1"""
2ingest.py - Procesa documentos y crea la base de conocimiento
3"""
4import os
5from dotenv import load_dotenv
6from langchain_community.document_loaders import (
7 PyPDFLoader,
8 TextLoader,
9 DirectoryLoader
10)
11from langchain.text_splitter import RecursiveCharacterTextSplitter
12from langchain_openai import OpenAIEmbeddings
13from langchain_community.vectorstores import Chroma
14 
15load_dotenv()
16 
17# 1. Cargar documentos
18def load_documents(docs_path: str = "./documents"):
19 """Carga PDFs y archivos de texto"""
20
21 # Loader para PDFs
22 pdf_loader = DirectoryLoader(
23 docs_path,
24 glob="**/*.pdf",
25 loader_cls=PyPDFLoader
26 )
27
28 # Loader para texto
29 txt_loader = DirectoryLoader(
30 docs_path,
31 glob="**/*.txt",
32 loader_cls=TextLoader
33 )
34
35 documents = []
36 documents.extend(pdf_loader.load())
37 documents.extend(txt_loader.load())
38
39 print(f"✅ Cargados {len(documents)} documentos")
40 return documents
41 
42# 2. Dividir en chunks
43def split_documents(documents):
44 """Divide documentos en fragmentos manejables"""
45
46 splitter = RecursiveCharacterTextSplitter(
47 chunk_size=1000, # Tamaño de cada chunk
48 chunk_overlap=200, # Solapamiento para contexto
49 separators=["\n\n", "\n", ".", "!", "?", ",", " "]
50 )
51
52 chunks = splitter.split_documents(documents)
53 print(f"✅ Creados {len(chunks)} chunks")
54 return chunks
55 
56# 3. Crear embeddings y guardar en vector store
57def create_vectorstore(chunks, persist_directory: str = "./chroma_db"):
58 """Crea embeddings y guarda en ChromaDB"""
59
60 embeddings = OpenAIEmbeddings(
61 model="text-embedding-3-small" # Más barato para empezar
62 )
63
64 vectorstore = Chroma.from_documents(
65 documents=chunks,
66 embedding=embeddings,
67 persist_directory=persist_directory
68 )
69
70 print(f"✅ Vector store creado en {persist_directory}")
71 return vectorstore
72 
73# Ejecutar pipeline
74if __name__ == "__main__":
75 print("🚀 Iniciando ingesta de documentos...")
76
77 docs = load_documents()
78 chunks = split_documents(docs)
79 vectorstore = create_vectorstore(chunks)
80
81 print("✅ ¡Base de conocimiento lista!")

Paso 3: Crear el Chatbot (query.py)

python
1"""
2query.py - Chatbot RAG que responde preguntas
3"""
4import os
5from dotenv import load_dotenv
6from langchain_openai import OpenAIEmbeddings, ChatOpenAI
7from langchain_community.vectorstores import Chroma
8from langchain.chains import RetrievalQA
9from langchain.prompts import PromptTemplate
10 
11load_dotenv()
12 
13# Cargar vector store existente
14def load_vectorstore(persist_directory: str = "./chroma_db"):
15 embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
16 return Chroma(
17 persist_directory=persist_directory,
18 embedding_function=embeddings
19 )
20 
21# Crear cadena de RAG
22def create_rag_chain(vectorstore):
23
24 # Prompt personalizado
25 template = """Eres un asistente experto de nuestra empresa.
26 Usa SOLO la siguiente información para responder.
27 Si no encuentras la respuesta en el contexto, di "No tengo información sobre eso".
28
29 Contexto:
30 {context}
31
32 Pregunta: {question}
33
34 Respuesta útil y concisa:"""
35
36 prompt = PromptTemplate(
37 template=template,
38 input_variables=["context", "question"]
39 )
40
41 # Configurar LLM
42 llm = ChatOpenAI(
43 model="gpt-4o-mini", # Buena relación calidad/precio
44 temperature=0 # Respuestas consistentes
45 )
46
47 # Crear cadena
48 qa_chain = RetrievalQA.from_chain_type(
49 llm=llm,
50 chain_type="stuff",
51 retriever=vectorstore.as_retriever(
52 search_kwargs={"k": 4} # Top 4 documentos relevantes
53 ),
54 chain_type_kwargs={"prompt": prompt},
55 return_source_documents=True
56 )
57
58 return qa_chain
59 
60# Interfaz de chat
61def chat():
62 print("🤖 Chatbot RAG iniciado. Escribe 'salir' para terminar.\n")
63
64 vectorstore = load_vectorstore()
65 qa_chain = create_rag_chain(vectorstore)
66
67 while True:
68 question = input("Tú: ").strip()
69
70 if question.lower() in ['salir', 'exit', 'quit']:
71 print("👋 ¡Hasta luego!")
72 break
73
74 if not question:
75 continue
76
77 # Obtener respuesta
78 result = qa_chain.invoke({"query": question})
79
80 print(f"\n🤖 Asistente: {result['result']}\n")
81
82 # Mostrar fuentes (opcional)
83 if result.get('source_documents'):
84 print("📚 Fuentes consultadas:")
85 for i, doc in enumerate(result['source_documents'][:2], 1):
86 source = doc.metadata.get('source', 'Desconocido')
87 print(f" {i}. {source}")
88 print()
89 
90if __name__ == "__main__":
91 chat()

Paso 4: Probar

bash
1# Primero, procesar documentos
2python ingest.py
3 
4# Luego, chatear
5python query.py

Ejemplo de conversación:

code
1Tú: ¿Cuál es la política de devoluciones?
2 
3🤖 Asistente: Según nuestra política, los clientes pueden devolver
4productos en un plazo de 30 días desde la compra. El producto debe
5estar sin usar y en su embalaje original. Para iniciar una devolución,
6contacta con soporte@empresa.com con tu número de pedido.
7 
8📚 Fuentes consultadas:
9 1. documents/politicas.pdf
10 2. documents/faqs.txt


Optimizaciones Avanzadas

1. Chunking Inteligente

El chunking básico corta por número de caracteres. Mejor:

python
1from langchain.text_splitter import MarkdownTextSplitter
2 
3# Para documentación en Markdown
4splitter = MarkdownTextSplitter(
5 chunk_size=1000,
6 chunk_overlap=100
7)
8 
9# Respeta la estructura de headers

2. Hybrid Search (Keyword + Semantic)

Combina búsqueda tradicional con semántica:

python
1from langchain.retrievers import BM25Retriever, EnsembleRetriever
2 
3# BM25 para keywords exactos
4bm25_retriever = BM25Retriever.from_documents(documents)
5bm25_retriever.k = 4
6 
7# Semantic para significado
8semantic_retriever = vectorstore.as_retriever(search_kwargs={"k": 4})
9 
10# Combinar ambos
11ensemble_retriever = EnsembleRetriever(
12 retrievers=[bm25_retriever, semantic_retriever],
13 weights=[0.3, 0.7] # 70% semántico, 30% keywords
14)

3. Reranking para Mejor Precisión

python
1from langchain.retrievers import ContextualCompressionRetriever
2from langchain_cohere import CohereRerank
3 
4# Reranker de Cohere
5reranker = CohereRerank(model="rerank-multilingual-v3.0")
6 
7compression_retriever = ContextualCompressionRetriever(
8 base_compressor=reranker,
9 base_retriever=vectorstore.as_retriever(search_kwargs={"k": 20})
10)
11 
12# Busca 20 docs, reordena, devuelve top 4

4. Metadata Filtering

python
1# Al ingestar, añade metadata
2doc.metadata["department"] = "ventas"
3doc.metadata["year"] = 2026
4 
5# Al buscar, filtra
6retriever = vectorstore.as_retriever(
7 search_kwargs={
8 "k": 4,
9 "filter": {"department": "ventas"}
10 }
11)


Stack de Producción Recomendado 2026

Para una implementación seria en producción:

ComponenteDesarrolloProducción
Vector DBChromaDB (local)Pinecone / Qdrant Cloud
Embeddingstext-embedding-3-smalltext-embedding-3-large
LLMGPT-4o-miniGPT-4o / Claude 3.5
FrameworkLangChainLangChain + LangSmith
HostingLocalAWS/GCP + Docker
MonitoringPrintsLangSmith + Sentry

Costes Estimados (1000 queries/día)

ComponenteCoste Mensual
OpenAI Embeddings~$5
OpenAI LLM (GPT-4o-mini)~$15
Pinecone (1M vectores)$70
Hosting (pequeño)~$20
Total~$110/mes

Con GPT-4o en vez de mini: ~$200/mes


Errores Comunes y Cómo Evitarlos

Error 1: Chunks Demasiado Pequeños/Grandes

Problema: Chunks pequeños = contexto insuficiente. Grandes = ruido.

Solución:

  • Empieza con 1000 chars, 200 overlap
  • Ajusta según resultados
  • Considera semantic chunking

Error 2: No Actualizar la Base de Conocimiento

Problema: Documentos cambian, vector store queda obsoleto.

Solución: Pipeline de actualización periódica o webhooks.

Error 3: Ignorar las Alucinaciones

Problema: El LLM a veces se inventa cosas.

Solución:

  • Prompt estricto: "Solo usa el contexto proporcionado"
  • Temperatura = 0
  • Mostrar siempre las fuentes
  • Validación humana para casos críticos

Error 4: No Medir el Rendimiento

Problema: No sabes si las respuestas son buenas.

Solución:

  • Crea un set de test con preguntas y respuestas correctas
  • Mide hit rate, precision, user satisfaction
  • Usa LangSmith para trazabilidad


Caso Práctico: Chatbot de Soporte

🎓 Este caso práctico completo está disponible en La Escuela de IA con código completo, deployment y métricas.

Contexto

  • Empresa: E-commerce de electrónica
  • Problema: 500 tickets/día, 70% son preguntas repetitivas
  • Objetivo: Reducir tickets en 50%

Documentos Indexados

  • FAQs (200 preguntas)
  • Manual de usuario (50 páginas)
  • Políticas (devoluciones, garantías, envíos)
  • Especificaciones de productos (500 productos)

Resultados

MétricaAntesDespués
Tickets/día500180
Tiempo respuesta4 horasInstantáneo
Satisfacción cliente3.2/54.5/5
Coste soporte mensual€8,000€3,500
ROI: La implementación costó €2,000 y se amortizó en 2 semanas.


Próximos Pasos

Si Eres Developer

  1. Implementa el tutorial básico (30 min)
  2. Prueba con tus propios documentos
  3. Añade las optimizaciones una por una
  4. Mide y mejora

Si Quieres Implementarlo en tu Empresa

  1. Identifica el caso de uso con mayor ROI
  2. Recopila documentos relevantes
  3. Prototipa con este tutorial
  4. Mide resultados antes de escalar

Si Quieres Ir Más Rápido

En La Escuela de IA tienes:

  • Código completo de producción
  • Templates para diferentes casos de uso
  • Tutoriales en video paso a paso
  • Soporte directo para tu implementación
  • Comunidad de +100 profesionales

Precio: $29/mes (sube cada 50 miembros)

Acceder a La Escuela de IA →


Recursos Adicionales

Artículos Relacionados

Herramientas


¿Dudas sobre cómo implementar RAG en tu empresa? Pregunta en La Escuela de IA — te ayudo a diseñar la arquitectura.

📬

¿Te ha gustado? Hay más cada semana

Únete a "IA Sin Humo" — la newsletter donde comparto lo que realmente funciona en inteligencia artificial. Sin teoría innecesaria, sin postureo.

📚

1 Tutorial

Paso a paso, práctico

🛠️

3 Herramientas

Probadas y útiles

💡

0 Bullshit

Solo lo que importa

+547 suscriptores • Cada martes • Cancela cuando quieras