DocuMind es una solución Full Stack de Retrieval-Augmented Generation (RAG) diseñada para permitir a los usuarios hacer preguntas sobre documentos privados y no estructurados (manuales, contratos, etc.).
Este proyecto es una demostración de arquitectura moderna API-First que enfatiza la soberanía de datos y el costo cero al utilizar exclusivamente tecnologías Open Source para el procesamiento de IA local.
- Arquitectura Monorepo: Gestión unificada de Spring Boot (Backend) y Angular (Frontend).
- IA 100% Local: Uso de Ollama para correr modelos LLM (Llama 3) y Embeddings (
nomic-embed-text) sin incurrir en costos de APIs externas. - Persistencia Vectorial: Integración de PostgreSQL con pgvector para la búsqueda semántica de alta eficiencia.
- Soporte Multi-Formato: Capacidad de procesar y extraer texto de documentos PDF y DOCX (usando Apache POI).
El sistema se basa en el patrón RAG para asegurar que la IA responde utilizando solo la información contenida en los documentos subidos por el usuario, minimizando las "alucinaciones" (respuestas inventadas).
El usuario sube un archivo (PDF/DOCX). El Backend lo lee, lo divide en pequeños chunks, convierte cada chunk en un vector numérico (embedding) usando Ollama, y guarda el vector en la Base de Datos pgvector junto con los metadatos.
El usuario hace una pregunta. El Backend convierte la pregunta en un vector y consulta pgvector para encontrar los chunks más relevantes. Estos chunks se inyectan como "contexto" en el prompt enviado al LLM (Llama 3), generando una respuesta precisa basada en el contenido original.
| Componente | Tecnología | Rol |
|---|---|---|
| Backend Core | Spring Boot 3.5.8 & Java 21 | Lógica de negocio, Seguridad (Spring Security) y API REST. |
| Frontend | Angular & TypeScript | Interfaz de usuario dinámica (SPA) para la subida de archivos y chat. |
| Integración IA | Spring AI | Capa de abstracción para la comunicación con Ollama. |
| Servidor IA | Ollama | Contenedor local para correr Llama 3 y nomic-embed-text. |
| Base de Datos | PostgreSQL & pgvector | Almacenamiento de metadatos y vectores para la búsqueda semántica. |
| Utilidades | Apache POI | Extracción de texto de documentos Word (.docx). |
Este proyecto está diseñado para ser levantado al 100% con Docker.
- Docker y Docker Compose instalados.
- Java 21 y Maven (solo si desea compilar fuera de Docker).