⚡️ ¿Por qué me interesa?
¿Estás cansado de que tus modelos de IA generen alucinaciones o no sepan nada sobre tus propios documentos? ¿Te preocupa la privacidad cuando envías datos sensibles a la nube? ¡Tenemos la solución punk definitiva! Hoy vamos a montar un sistema RAG (Recuperación Aumentada por Recuperación) en tu propio servidor casero.
Con un sistema RAG local, tus modelos de IA podrán responder preguntas con precisión basándose en tu propia información, sin depender de lo que aprendieron durante su entrenamiento. Es como darle a tu IA un cerebro extra con tus propios conocimientos.
Si ya tienes Ollama instalado o has montado Docker siguiendo nuestra guía rápida para instalar Docker sin miedo, estás a medio camino de tener tu propio sistema RAG corriendo en casa.
1️⃣ ¿Qué es RAG y por qué mola tanto?
RAG (Retrieval-Augmented Generation) es una técnica que combina lo mejor de dos mundos: la potencia creativa de los modelos generativos y la precisión de la búsqueda de información. Funciona en dos pasos principales:
- Recuperación: El sistema busca y encuentra información relevante en tus documentos o bases de datos.
- Generación: La IA usa esa información como contexto para generar respuestas precisas y contextualizadas.
Es como si tu IA tuviera a mano un bibliotecario personal que le pasa la información exacta que necesita para responder tus preguntas.
2️⃣ Ventajas de montar RAG en tu servidor casero
- Privacidad total: Tus datos nunca salen de tu red local.
- Control absoluto: Decides qué modelos usar y qué documentos incluir.
- Sin costes por API: Una vez montado, no hay que pagar por uso.
- Acceso a información propia: Tus modelos pueden consultar documentación interna, proyectos personales o información privada.
- Actualizaciones fáciles: Puedes añadir nuevos documentos en cualquier momento para mantener tu sistema al día.
- Incrustación y recuperación más rápidas: Al estar todo local, los tiempos de respuesta son mejores.
3️⃣ Componentes necesarios para tu sistema RAG
Para montar un RAG casero necesitamos varios componentes claves:
- Un modelo de lenguaje (LLM): Usaremos Ollama con modelos como Llama 3 o Mixtral.
- Un modelo de embeddings: Para convertir texto en vectores (representaciones numéricas que capturan el significado).
- Una base de datos vectorial: Para almacenar y consultar rápidamente los vectores. Usaremos ChromaDB por su sencillez.
- Herramientas de procesamiento: Para cargar, dividir y preparar los documentos.
- Una interfaz para consultas: Para interactuar con tu sistema RAG.
4️⃣ Instalación paso a paso
Vamos a montar nuestro sistema RAG usando Python, Ollama, LangChain y ChromaDB. Esto es ideal para notebooks o servidores domésticos con Python instalado.
Paso 1: Instalar Ollama
Si no lo tienes ya, instala Ollama siguiendo las instrucciones de su página web o con este comando:
curl -fsSL https://ollama.com/install.sh | sh
Paso 2: Descargar modelos necesarios
Necesitarás un modelo para generar respuestas y otro para crear embeddings:
ollama pull llama3
ollama pull all-minilm
Paso 3: Instalar dependencias de Python
Instala las bibliotecas necesarias:
pip install langchain langchain-ollama langchain_community langchain_chroma langchainhub python-dotenv
Paso 4: Crea un script para tu sistema RAG
Crea un archivo rag_system.py
con el siguiente código:
from langchain import hub
from langchain.vectorstores import Chroma
from langchain_community.document_loaders import PyPDFLoader, DirectoryLoader
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_core.prompts.chat import ChatPromptTemplate
from langchain_ollama import ChatOllama, OllamaEmbeddings
# Configurar modelos
llm = ChatOllama(model="llama3")
embeddings = OllamaEmbeddings(model="all-minilm")
# Cargar documentos (reemplaza con tu ruta)
loader = DirectoryLoader("./documentos", glob="**/*.pdf")
documents = loader.load()
# Dividir documentos en fragmentos manejables
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(documents)
# Crear base de datos vectorial
vectorstore = Chroma.from_documents(documents=splits, embedding=embeddings)
# Configurar el sistema RAG
retriever = vectorstore.as_retriever()
template = """
Eres un asistente experto que responde preguntas basándose en la documentación proporcionada.
Usa sólo el contexto dado para responder. Si no encuentras la respuesta en el contexto, di que no lo sabes.
Contexto: {context}
Pregunta: {question}
Respuesta:
"""
prompt = ChatPromptTemplate.from_template(template)
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
# Construir la cadena RAG
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# Interfaz simple para consultas
def consulta(pregunta):
return rag_chain.invoke(pregunta)
if __name__ == "__main__":
while True:
pregunta = input("\nHaz una pregunta (o 'salir' para terminar): ")
if pregunta.lower() == "salir":
break
print("\nBuscando respuesta...\n")
respuesta = consulta(pregunta)
print(respuesta)
5️⃣ Desplegar tu RAG en entornos más robustos
Si prefieres un despliegue más serio con Docker, puedes usar este enfoque:
1. Crear un archivo docker-compose.yml
version: '3'
services:
ollama:
image: ollama/ollama
volumes:
- ollama-data:/root/.ollama
ports:
- "11434:11434"
restart: unless-stopped
chromadb:
image: chromadb/chroma
volumes:
- chroma-data:/chroma/data
ports:
- "8000:8000"
restart: unless-stopped
rag-app:
build: .
volumes:
- ./documentos:/app/documentos
ports:
- "8080:8080"
depends_on:
- ollama
- chromadb
environment:
- OLLAMA_HOST=http://ollama:11434
- CHROMA_HOST=chromadb:8000
volumes:
ollama-data:
chroma-data:
2. Crear un Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
6️⃣ Casos de uso prácticos para tu RAG casero
- Asistente de documentación personal: Carga todos tus manuales, guías y documentación técnica para consultarlas con lenguaje natural.
- Chatbot para proyectos o hobbies: Un asistente que conoce tus proyectos personales, recetas, notas, etc.
- Búsqueda inteligente en biblioteca digital: Consulta tu colección de libros, papers o artículos con preguntas específicas.
- Asistente para estudios: Carga tus libros y apuntes para hacerle preguntas específicas.
- Análisis de documentos familiares: Organiza y consulta documentos familiares, históricos o personales.
7️⃣ Optimizando tu sistema RAG
- Ajusta el tamaño de los chunks: Prueba diferentes tamaños para dividir tus documentos (500-1500 caracteres suele funcionar bien).
- Elige el modelo adecuado: Para servidores modestos, prueba modelos como Phi-2 o Gemma. Para máquinas más potentes, Llama 3 o Mixtral.
- Mejora los prompts: Un buen prompt puede mejorar drásticamente las respuestas.
- Considera la memoria RAM: Los embeddings consumen memoria, así que dimensiona tu sistema según la cantidad de documentos.
- Implementa un sistema de caché: Para preguntas frecuentes y mejorar la velocidad de respuesta.
8️⃣ Integrando RAG con otras herramientas
Tu sistema RAG puede integrarse con otras herramientas que ya tengas en tu servidor:
- n8n: Automatiza flujos de trabajo con tu RAG usando nuestra guía de n8n.
- Home Assistant: Conecta tu RAG para responder preguntas sobre tu casa inteligente.
- Telegram/Discord: Crea un bot que responda consultas usando tu RAG.
- Watchtower: Mantén actualizados los contenedores de tu RAG usando nuestra guía de Watchtower.
🎸 Despedida punk
Montar tu propio sistema RAG es un paso gigante hacia la soberanía digital y el control de tu ecosistema de IA. Ya no dependes de servicios en la nube que pueden cambiar sus términos o dejar de funcionar en cualquier momento.
Con RAG local, tus modelos responderán basándose en TU información, con TUS reglas, en TU servidor. ¿Hay algo más punk que eso?
¿Ya has probado implementar un sistema RAG? ¿Qué documentos has cargado en tu base de conocimiento personal? Cuéntanos tu experiencia y sigue explorando el lado más DIY de la inteligencia artificial.
Recursos y enlaces útiles
- Comparativa de plataformas de automatización e IA
- Watchtower para Docker: olvídate de actualizar contenedores a mano
- Automatiza todo en tu servidor casero con n8n
- Repositorio de LangChain en GitHub
- Sitio oficial de Ollama
- Documentación de ChromaDB
Preguntas Frecuentes
¿Qué es RAG y cómo mejora la IA generativa en mi homelab?
RAG (Retrieval-Augmented Generation) combina búsqueda semántica en tus documentos con generación de respuestas por LLMs. En lugar de que GPT/Claude/Ollama respondan solo con conocimiento entrenado (outdated, genérico), RAG busca primero en tu biblioteca de PDFs, manuales, notas, código, recupera fragmentos relevantes, y los incluye en el prompt para respuesta contextualizada. Resultado: IA con acceso a tu conocimiento específico, actualizado, privado. Para homelabs: consulta docs técnicas de servicios instalados, busca configs antiguas, explora research papers, todo con lenguaje natural.
¿Qué ventaja tiene RAG local vs simplemente usar ChatGPT?
Ventajas clave: 1) Conocimiento privado: ChatGPT no tiene acceso a tus docs internos, manuales custom, código propietario; RAG sí. 2) Actualización: ChatGPT conocimiento hasta fecha de corte (ej: enero 2024); RAG incorpora docs de hoy mismo. 3) Fuentes verificables: RAG muestra fragmentos recuperados; puedes auditar respuesta. 4) Privacidad: con RAG + Ollama local, tus datos NUNCA salen del servidor. 5) Coste: ChatGPT cobra por token; RAG local costo cero tras setup. RAG no reemplaza ChatGPT, lo complementa con tu contexto único.
¿Qué hardware necesito para correr RAG con IA en servidor casero?
Mínimo funcional: 16GB RAM, CPU moderna (4+ cores), SSD 256GB. Sin GPU puedes hacer embeddings (CPU, rápido) + usar LLM vía API cloud (OpenAI). Recomendado: 32GB RAM, 8+ cores, SSD 512GB, GPU con 8GB+ VRAM (RTX 3060, 4060 Ti) para Ollama local. Ideal: 64GB RAM, GPU con 12GB+ (RTX 4070, 3090) para modelos grandes (Llama 70B, Mixtral). Para 10,000+ documentos, ChromaDB corre en hardware modesto. El cuello de botella es el LLM; con API external, RAG corre en Raspberry Pi 8GB.
¿Qué tipos de documentos puedo indexar en mi sistema RAG?
LangChain (librería RAG popular) tiene loaders para: PDFs (papers, ebooks, manuales), TXT/Markdown (notas, docs), Word/LibreOffice, HTML (docs online descargadas), Jupyter Notebooks, CSV/Excel (convierte a texto), código fuente (Python, JS, etc.), emails (mbox), YouTube transcripts, Notion exports, Confluence, MediaWiki. Prácticamente todo texto. Para imágenes/diagramas en PDFs necesitas OCR (Tesseract) o modelos multimodales. Casos típicos homelab: manuales de software instalado, papers de research, código commented, logs históricos.
¿Mi sistema RAG local mantiene 100% privacidad de datos?
Sí, con stack completo local: embeddings con sentence-transformers (local), vector DB con ChromaDB (local), LLM con Ollama (local). NADA sale de tu red. Comparado con ChatGPT (tus prompts van a OpenAI), RAG local es caja negra cerrada. Importante: si usas OpenAI API para LLM (por mejor calidad), tus queries y contexto recuperado VAN a OpenAI. Para privacidad absoluta (GDPR, datos médicos, secretos empresariales), usa solo Ollama. Para datos no sensibles, OpenAI + embeddings locales es balance razonable (solo queries van afuera, no todos los docs).
¿Cuántos documentos puedo indexar en ChromaDB para RAG?
ChromaDB local escala bien: 10,000 documentos (millones de chunks) corren en laptop con 16GB RAM. Para 100,000+ documentos, considera Qdrant (Rust, más rápido) o Pinecone (cloud, managed). Factores que afectan: 1) Tamaño de embedding model (all-MiniLM-L6-v2 genera vectores de 384 dims, ligero; BGE-large son 1024 dims, más pesado pero mejor). 2) Chunk size (chunks de 1000 tokens vs 500, más chunks = más vectores). 3) RAM disponible (índice en memoria es más rápido). Para homelab típico, 50,000 chunks (5,000-10,000 documentos medianos) es sweet spot.
¿Cómo actualizo la base de conocimiento de RAG con nuevos documentos?
Proceso: 1) Agrega documentos nuevos a carpeta monitoreada, 2) Script de indexación: carga docs con loaders, split en chunks, genera embeddings, inserta en ChromaDB. 3) Re-ejecuta queries. ChromaDB soporta upsert incremental (solo añadir nuevos, no reindexar todo). Automatización: n8n workflow con File Trigger (detecta archivos nuevos) → ejecuta script de indexación → notifica por Telegram «Indexados 3 PDFs nuevos». Para documentos que cambian (Notion, wiki), re-indexa periódicamente (cron semanal). Embeddings son rápidos (10-50 docs/segundo en CPU), actualizar no es costoso.
¿Cuánto cuesta operar un sistema RAG 24/7 en homelab?
Costes: 1) Hardware: inversión inicial (400-800€ servidor con GPU, amortizable), o 0€ si reutilizas PC existente. 2) Electricidad: servidor con GPU consumiendo 150W 24/7 = ~15€/mes (varía según tarifa). Sin GPU (solo embeddings + API LLM): ~5€/mes (30W). 3) Software: 0€ (todo open source). 4) Mantenimiento: tu tiempo, gratis. Comparado con soluciones cloud (Pinecone ~70€/mes, OpenAI API 50-200€/mes según uso), RAG local se amortiza en 3-6 meses si usas intensivamente. Para uso ligero (<100 queries/día), API cloud puede ser más barato inicialmente.