🤖 Proyecto IA - Asistente Personal "Asistente Pablo"
🚀 Descripción
Este proyecto implementa un asistente personal basado en IA totalmente offline, integrado en una aplicación Spring Boot. Utiliza un modelo de lenguaje local (llama.cpp
/ llama-java
) para ofrecer respuestas naturales, útiles y personalizadas, con un diseño centrado en la arquitectura limpia y extensible.
El asistente está pensado para entender tus gustos, estilo y necesidades, respondiendo siempre en español con un tono cercano y amigable.
🧩 Características principales
- 🧠 Modelo LLM local (
openchat-3.5-0106.Q4_K_M.gguf
) ejecutado en CPU o GPU (Metal en Macs M1/M2). - 🏗️ Arquitectura limpia basada en capas: dominio, aplicación, infraestructura y presentación.
- 📜 Historial de conversación gestionado en sesión HTTP (con opción a persistencia futura).
- 📝 Construcción dinámica de prompts a partir de definiciones JSON estructuradas y multilingües.
- 🌐 API REST para interacción con el asistente.
- 💻 Frontend con Thymeleaf para una interfaz web simple y eficaz.
- 📊 Logging avanzado con Log4j2, con logs a consola y fichero.
- 🔄 Extensible para múltiples perfiles de prompt y configuración personalizada.
⚙️ Requisitos técnicos
- Java 21+
- Maven 4+
- Spring Boot 3+
- Dependencias principales:
llama-java
para LLM local- Jackson para JSON
- Log4j2 para logging
- Modelo
openchat-3.5-0106.Q4_K_M.gguf
en carpetamodels/
🛠️ Instalación y ejecución
-
Clonar el repositorio:
git clone https://github.com/tuusuario/ia-asistente-personal.git cd ia-asistente-personal
-
Colocar el modelo en
models/
:mkdir models # Copia aquí openchat-3.5-0106.Q4_K_M.gguf
-
Compilar con Maven:
mvn clean package
-
Crear carpeta de logs:
mkdir logs
-
Ejecutar la aplicación:
java -jar target/ia-asistente-personal.jar
-
Abrir en el navegador:
http://localhost:8080/
🎯 Uso
- En la web puedes chatear con tu asistente personalizado.
- El historial de la conversación se mantiene en sesión.
- Las respuestas se generan localmente, sin conexión a internet.
- Puedes cambiar el perfil de prompt editando los JSON en
src/main/resources/prompts/
.
🎥 Demostración
Reemplaza la URL anterior con el enlace a tu GIF de demostración.
🧪 Configuración avanzada
- GPU Metal en macOS M1/M2: configura el backend llama.cpp con soporte Metal y coloca el shader
ggml-metal.metal
en la ruta correcta. - Logs: configurados con Log4j2, salida a consola y a
logs/app.log
. - Múltiples perfiles: cambia el prompt cargando otros JSONs como
developer_prompt.json
.
📚 Recursos
Herramienta | Enlace |
---|---|
llama.cpp | https://github.com/ggerganov/llama.cpp |
llama-java | https://github.com/kherud/llama-java |
Spring Boot | https://spring.io/projects/spring-boot |
🤝 Contribuciones
¿Quieres mejorar el proyecto? ¡Bienvenido!
Por favor, abre un issue o pull request con tus mejoras.
⚠️ Licencia
MIT License © Pablo de la Torre Jamardo
¡Gracias por usar el Asistente Pablo!