AnythingLLM: RAG listo para producción en local
AnythingLLM (Mintplex Labs) es una plataforma RAG de código abierto que se despliega en pocos minutos mediante Docker y convierte un backend local de Ollama en un asistente documental empresarial. Mientras que un RAG "casero" requiere combinar LlamaIndex + Chroma + una interfaz de usuario, AnythingLLM proporciona toda la pila: espacios de trabajo aislados, soporte para múltiples usuarios, agentes integrados y API REST. Este tutorial de RAG con AnythingLLM muestra la instalación completa con Docker, la conexión con Ollama, la creación de espacios de trabajo, los agentes y cómo exponer la API a tus aplicaciones.
#¿Por qué AnythingLLM?
AnythingLLM ocupa un nicho preciso en el ecosistema RAG local: con un enfoque más definido que Open WebUI en la parte documental, más sencillo que un script propio de LlamaIndex y más preparado para producción que una demo de Streamlit. El proyecto es de código abierto (MIT) y lo impulsa Mintplex Labs, un equipo que realiza commits de forma continua desde 2023.
- Workspaces aislados
- Cada workspace tiene su propio corpus de documentos, su propio LLM, sus propios embeddings y su propio prompt de sistema. Nunca se mezcla el RAG jurídico con el RAG de soporte al cliente.
- Multiusuario nativo
- Autenticación, roles (admin / manager / usuario), permisos por workspace. No hace falta un proxy inverso con autenticación básica como con un RAG implementado directamente en Python.
- Backends LLM intercambiables
- Ollama, LM Studio, llama.cpp server, vLLM, así como las API de nube (OpenAI, Anthropic, etc.). Se puede cambiar el motor sin tocar los documentos indexados.
- Agentes integrados
- Web scraping, ejecución de SQL, cálculos, búsqueda web y guardado de documentos: funciones que puedes invocar con @agent en el chat. No hace falta añadir LangChain por encima.
- API REST nativa
- Un endpoint /api/v1/workspace/{slug}/chat permite conectar cualquier aplicación a un workspace dado. Formato de respuesta estable y documentado.
#Prerrequisitos
Tus documentos, tu IA: un RAG local fiable sobre tus PDF, notas y correos — sin enviar nada a la nube.
- Espacio en línea de por vida
- PDF + archivos
- Reembolsado 30 j
- Docker
- Docker Desktop en Mac/Windows, o Docker Engine en Linux. Compose no es obligatorio — un docker run basta para iniciar.
- Ollama instalado y funcionando
- El daemon debe responder en http://localhost:11434. Compruébalo con ollama list. Si Ollama aún no está instalado, instálalo antes: es el backend predeterminado de este tutorial.
- Un modelo LLM en Ollama
- Como mínimo, un modelo de 8-9B como qwen3.5:9b (256k ctx, visión) o granite4.2:8b. Para obtener calidad en RAG en francés, optar por mistral-small (24B) o qwen3.8:27b si la VRAM lo permite.
- Un modelo de embeddings
- nomic-embed-text (por defecto) o bge-m3 para un procesamiento multilingüe de mayor calidad. Descargar con ollama pull nomic-embed-text.
- RAM / VRAM
- 8 GB de RAM como mínimo para el contenedor; 16 GB para trabajar con comodidad. En cuanto a la GPU, depende del modelo de Ollama elegido (≈6-7 GB para un 9B Q4, ≈14 GB para un 24B Q4).
- 4 GB de espacio en disco
- Para el contenedor, la base SQLite interna, y la base vectorial (LanceDB por defecto). Aumentar según el volumen de documentos.
#1. Instalación Docker
La imagen oficial se publica en Docker Hub bajo mintplexlabs/anythingllm. Mintplex mantiene etiquetas estables (latest, render) y la imagen incluye todo: Node.js, el servidor API, el frontend, LanceDB como base de datos vectorial y el proceso de recopilación.
- 01Crear un directorio de almacenamientoAnythingLLM conserva todo (configuración, vectores, documentos) en un volumen. Crea un directorio dedicado en el equipo anfitrión para no perder nada durante una actualización de la imagen.
- 02Iniciar el contenedorEl comando que aparece a continuación monta el directorio de almacenamiento, expone el puerto 3001 y activa SYS_ADMIN (necesario para que algunos scrapers internos rendericen PDF y páginas web).
- 03Abrir la UIUna vez iniciado el contenedor, la interfaz está disponible en http://localhost:3001. La primera vez que la abras, un asistente de configuración te guiará para configurar la contraseña de administrador y el backend LLM.
#2. Conectar Ollama como backend
Al acceder por primera vez a http://localhost:3001, AnythingLLM inicia un asistente de configuración que solicita el LLM Provider, el modelo de embeddings, la base vectorial y la creación de la cuenta de administrador. La configuración también puede realizarse posteriormente en Settings.
- 01LLM Provider → OllamaSelecciona Ollama en la lista. Introduce la URL base: http://host.docker.internal:11434 (Mac/Windows) o http://172.17.0.1:11434 (Linux por defecto).
- 02Elegir el modelo de chatEl menú desplegable muestra tus modelos Ollama. Elige el LLM principal (por ejemplo: mistral-small (24B) para un buen equilibrio entre calidad y VRAM en francés, o qwen3.5:9b si la VRAM es más limitada). Ajusta la ventana de contexto a 8192 o 16384 si el modelo lo admite.
- 03Embedding Provider → OllamaEl mismo backend para los embeddings, o elegir Native (modelo local integrado) si quieres evitar cargar un modelo de embeddings en Ollama. Para AnythingLLM en francés, nomic-embed-text cumple su función; bge-m3 (a través de Ollama) lo hace mejor.
- 04Vector DatabaseMantén LanceDB como opción predeterminada. Es una base de datos integrada, sin dependencias externas, que ofrece buen rendimiento hasta varios cientos de miles de chunks. Si ya gestionas Qdrant o Chroma en otro lugar, puedes configurarlos aquí.
#3. Espacios de trabajo, documentos y embeddings
Un workspace es la unidad fundamental de AnythingLLM. Agrupa un corpus documental, un LLM, los parámetros de chat y las conversaciones asociadas. Se crea típicamente un workspace por área: Jurídico, Soporte, RRHH, Vigilancia tecnológica.
- 01Crear un workspaceBarra lateral izquierda → New Workspace. Dale un nombre explícito (por ejemplo: "contrats-2026"). El slug se genera automáticamente y se usará en la URL de la API.
- 02Subir documentosHaz clic en el icono de subida en el workspace. AnythingLLM acepta PDF, DOCX, TXT, MD, CSV, EPUB y mucho más. También se puede apuntar a una URL web o a un repositorio GitHub — un scraper interno recupera el contenido.
- 03Move to Workspace + EmbedLos archivos subidos van primero al Document Picker (zona de almacenamiento temporal). Selecciona los que quieras indexar y luego pulsa Move to Workspace. AnythingLLM divide los documentos en fragmentos, calcula los embeddings mediante Ollama y los almacena en LanceDB.
- 04Ajustar el prompt del sistemaWorkspace settings → Chat Settings → Prompt. Aquí se define el rol ("Eres un asistente jurídico. Cita siempre el artículo exacto del contrato"). El top-K de recuperación (Document Similarity Threshold) también se ajusta aquí.
- Chunk size
- Por defecto 1000 caracteres con 20 de superposición. Para contratos jurídicos donde cada cláusula cuenta, reducir a 500. Para documentación técnica con bloques de código, aumentar a 1500.
- Modelo de embeddings
- nomic-embed-text (768 dims) es rápido, pero su rendimiento en francés es mediocre. bge-m3 (1024 dims, multilingüe) gana un 10-15 % de precisión en contenido francés. mxbai-embed-large es una buena opción intermedia.
- Modo chat vs query
- Chat utiliza el historial de conversación + RAG. Query utiliza exclusivamente RAG: si no hay ninguna coincidencia en los documentos, el LLM se niega a responder. Query es el ajuste adecuado para los usos en los que las alucinaciones están prohibidas.
#4. Agentes integrados
Más allá del RAG estricto, AnythingLLM incluye un sistema de agentes: se invoca @agent en el chat y el LLM puede entonces usar habilidades (herramientas) para buscar información fuera de la base documental. No es necesario usar LangChain ni escribir llamadas a herramientas: está integrado.
- web-browsing
- El agente abre una URL y lee la página (el DOM renderizado, no solo el HTML sin procesar). Útil para que el asistente responda sobre información que no está en el RAG.
- web-scraping
- Variante: extrae el contenido de una página y lo añade como documento al espacio de trabajo. Útil para enriquecer el corpus sobre la marcha.
- save-document
- El agente genera un documento (resumen, síntesis) y lo guarda en el workspace. Útil para flujos de trabajo como «leer 10 artículos → producir una nota».
- sql-connector
- Conecta una base de datos PostgreSQL/MySQL y el agente podrá escribir y ejecutar consultas SQL para responder a preguntas analíticas. Por supuesto, hay que usar una cuenta SQL de solo lectura.
- rag-memory
- Memoria de largo plazo entre conversaciones. El agente puede guardar hechos que podrá recuperar en sesiones futuras.
#5. Exponer la API
Para conectar AnythingLLM a tus aplicaciones (chatbot interno, plugin Slack, integración empresarial), la API REST es la interfaz canónica. Cada workspace se convierte en un endpoint limitado a su corpus.
- 01Generar una clave de APISettings → API Keys → Generate New API Key. Anota la clave, solo se muestra una vez. Puedes crear varias, por ejemplo una por aplicación cliente, y revocarlas individualmente.
- 02Identificar el slug del workspaceSe ve en la URL cuando estás en el workspace: .../workspace/contrats-2026 → slug = contrats-2026
- 03Probar con curlEl endpoint principal es POST /api/v1/workspace/{slug}/chat. Encabezado Authorization: Bearer YOUR_KEY, cuerpo JSON con message y mode (chat o query).
#Solución de problemas
- "Could not reach Ollama at ..."
- El error más frecuente. Revisa la URL: desde el contenedor Docker, localhost no apunta al host. Utiliza host.docker.internal en Mac/Win, la IP del bridge o --network host en Linux.
- Embedding muy lento
- El modelo de embeddings se ejecuta en la CPU de forma predeterminada si no has descargado el modelo en Ollama. Fuerza el uso de Ollama como proveedor de embeddings y comprueba ollama ps durante la indexación para ver la GPU en funcionamiento.
- El RAG no encuentra un pasaje evidente
- Tres causas comunes: bloques demasiado grandes (reduce de 1000 a 500 caracteres), un modelo de embeddings débil en francés (cambia a bge-m3) o un valor de Document Similarity Threshold demasiado estricto en la configuración del espacio de trabajo.
- El agente entra en un bucle de llamadas a la herramienta
- El modelo no es lo bastante potente. Pasa a glm-4.7-flash, a qwen3.8:27b si es posible, o a mistral-small. Evita usar para agentes modelos muy pequeños (2-3B) que no hayan recibido fine-tuning para el uso de herramientas.
- El contenedor se termina tras unas horas
- OOM kernel: Docker no tiene suficiente memoria asignada. En Docker Desktop, aumenta el límite de RAM a 8-16 GB (Settings → Resources).
- Actualización de la imagen
- docker pull mintplexlabs/anythingllm:latest puis docker rm -f anythingllm et relancer le run avec les mêmes volumes. Les données dans $HOME/anythingllm sont conservées.
#Para ir más allá
Según la dirección que quieras seguir:
- Comparar AnythingLLM con las alternativas sin código
- «RAG local con Ollama sin programar (Open WebUI, AnythingLLM)» ofrece una comparación directa con Open WebUI usando el mismo backend Ollama.
- Optimizar embeddings FR
- « Los mejores modelos de embeddings FR » compara bge-m3, Solon, E5 y proporciona los ajustes adecuados para AnythingLLM.
- Llevar más lejos la pila de producción
- «Desplegar un LLM en producción con Docker Compose» muestra cómo combinar AnythingLLM con un proxy inverso Traefik, Qdrant externo y copias de seguridad automatizadas.
¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.