LocalMind es un sistema de Retrieval-Augmented Generation (RAG) completamente privado y on-premise que permite hacer preguntas sobre documentos PDF y TXT utilizando modelos de lenguaje locales.
- 100% Privado: Todos los datos permanecen en tu infraestructura
- Búsqueda Vectorial: Utiliza PostgreSQL con pgvector para búsquedas semánticas eficientes
- LLM Local: Integración con Ollama para generación de embeddings y respuestas
- Interfaz Intuitiva: UI web con Streamlit en español
- Procesamiento de Documentos: Soporta PDF y TXT con chunking inteligente
- Arquitectura Modular: Backend separado del frontend para fácil mantenimiento
- Docker y Docker Compose instalados
- Al menos 8GB de RAM disponible (recomendado 16GB)
- 10GB de espacio en disco para modelos
git clone <repository-url>
cd LocalMindcp .env.example .envEdita el archivo .env con tus credenciales:
POSTGRES_DB=localmind_db
POSTGRES_USER=localmind_user
POSTGRES_PASSWORD=your_secure_password
POSTGRES_HOST=db
POSTGRES_PORT=5432
LLM_MODEL=qwen2.5:7b
EMBEDDING_MODEL=mxbai-embed-large
OLLAMA_HOST=http://ollama:11434Antes de iniciar la aplicación, descarga los modelos necesarios:
# Iniciar solo el servicio de Ollama
docker-compose up -d ollama
# Descargar modelo de embeddings (requerido)
docker exec -it localmind_ollama ollama pull mxbai-embed-large
# Descargar modelo de generación (requerido)
docker exec -it localmind_ollama ollama pull qwen2.5:7bModelos alternativos disponibles:
- Embeddings:
nomic-embed-text,all-minilm - Generación:
llama2,mistral,qwen2.5:14b
# Construir e iniciar todos los servicios
docker-compose up --build
# O en modo detached
docker-compose up -d --buildLa aplicación estará disponible en: http://localhost:8501
- Abre la aplicación en tu navegador
- En la barra lateral, haz clic en "Subir documento"
- Selecciona un archivo PDF o TXT
- Haz clic en "🔄 Procesar Documento"
- Espera a que se complete el procesamiento
- Una vez procesados los documentos, escribe tu pregunta en el chat
- El sistema buscará fragmentos relevantes en la base de datos
- Generará una respuesta basada en el contexto encontrado
- La respuesta se mostrará de forma streaming
LocalMind/
├── src/
│ ├── app.py # Streamlit frontend
│ ├── config/
│ │ └── settings.py # Configuración de entorno
│ └── backend/
│ ├── database.py # PostgreSQL + pgvector
│ ├── llm.py # Cliente Ollama
│ └── ingestion.py # Pipeline de procesamiento
├── docker-compose.yml # Orquestación de servicios
├── Dockerfile # Imagen de la aplicación
├── requirements.txt # Dependencias Python
└── .env # Variables de entorno
- PostgreSQL + pgvector: Base de datos vectorial para almacenar embeddings
- Ollama: Servidor local de LLM para embeddings y generación
- Streamlit: Interfaz de usuario web
- LangChain: Framework para procesamiento de documentos
# Todos los servicios
docker-compose logs -f
# Solo la aplicación
docker-compose logs -f app
# Solo Ollama
docker-compose logs -f ollama# Reiniciar todo
docker-compose restart
# Reiniciar solo la app
docker-compose restart app# Detener servicios
docker-compose stop
# Detener y eliminar contenedores
docker-compose down
# Detener y eliminar todo (incluidos volúmenes)
docker-compose down -vdocker exec -it localmind_db psql -U localmind_user -d localmind_db
# Consultar documentos
SELECT id, substring(content, 1, 50) as preview, metadata
FROM documents
LIMIT 10;- Tipado Estricto: Todo el código usa type hints (PEP 484)
- Idioma: Código en inglés, UI en español
- Linting: Compatible con Ruff y Mypy
- Modular: Separación clara entre backend y frontend
# Instalar dependencias de desarrollo
pip install -r requirements.txt
# Ejecutar linters
ruff check src/
mypy src/- Los datos nunca salen de tu infraestructura
- Base de datos aislada en red interna
- Variables sensibles en
.env(no versionado) - Comunicación interna entre contenedores
- Chunking: 1000 caracteres con 200 de overlap
- Índice HNSW: Búsqueda vectorial optimizada
- Streaming: Respuestas en tiempo real
- Batch Processing: Procesamiento por lotes de documentos
- Verifica que el servicio
dbesté corriendo:docker-compose ps - Revisa las credenciales en
.env - Comprueba los logs:
docker-compose logs db
- Asegúrate de haber descargado el modelo de embeddings
- Verifica que Ollama esté corriendo:
docker-compose logs ollama - Comprueba la conectividad:
docker exec -it localmind_app curl http://ollama:11434
- Considera usar modelos más pequeños (ej:
llama2:7ben lugar de versiones más grandes) - Aumenta los recursos asignados a Docker
- Verifica el uso de CPU/RAM:
docker stats
Este proyecto es de código abierto. Consulta el archivo LICENSE para más detalles.
Las contribuciones son bienvenidas. Por favor:
- Fork el repositorio
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Para preguntas y soporte, abre un issue en el repositorio.
LocalMind - Tu asistente RAG privado y seguro 🧠