Add preliminary README
This commit is contained in:
parent
60f6f9e55a
commit
88dd89a3ed
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,4 @@
|
|||||||
HELP.md
|
README.md
|
||||||
|
|
||||||
.mvn
|
.mvn
|
||||||
|
|
||||||
|
130
README.md
Normal file
130
README.md
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
# 🤖 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 carpeta `models/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Instalación y ejecución
|
||||||
|
|
||||||
|
1. Clonar el repositorio:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/tuusuario/ia-asistente-personal.git
|
||||||
|
cd ia-asistente-personal
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Colocar el modelo en `models/`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir models
|
||||||
|
# Copia aquí openchat-3.5-0106.Q4_K_M.gguf
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Compilar con Maven:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mvn clean package
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Crear carpeta de logs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir logs
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Ejecutar la aplicación:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
java -jar target/ia-asistente-personal.jar
|
||||||
|
```
|
||||||
|
|
||||||
|
6. 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](https://github.com/ggerganov/llama.cpp) |
|
||||||
|
| llama-java | [https://github.com/kherud/llama-java](https://github.com/kherud/llama-java) |
|
||||||
|
| Spring Boot | [https://spring.io/projects/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!*
|
||||||
|
|
@ -1 +1 @@
|
|||||||
[1751134161] warming up the model with an empty run
|
[1751135918] warming up the model with an empty run
|
||||||
|
@ -4,18 +4,22 @@ import com.pablotj.ia.chat.boot.domain.exception.BusinessLogicException;
|
|||||||
import de.kherud.llama.LlamaModel;
|
import de.kherud.llama.LlamaModel;
|
||||||
import de.kherud.llama.ModelParameters;
|
import de.kherud.llama.ModelParameters;
|
||||||
import jakarta.annotation.PostConstruct;
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class LlmModelLoader implements AutoCloseable {
|
public class LlmModelLoader implements AutoCloseable {
|
||||||
|
|
||||||
|
@Value(value = "${model.gguf.name}")
|
||||||
|
private String modelName;
|
||||||
|
|
||||||
private LlamaModel model;
|
private LlamaModel model;
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() {
|
public void init() {
|
||||||
try {
|
try {
|
||||||
ModelParameters params = new ModelParameters()
|
ModelParameters params = new ModelParameters()
|
||||||
.setModelFilePath("models/openchat-3.5-0106.Q4_K_M.gguf")
|
.setModelFilePath(String.format("models/%s.gguf", modelName))
|
||||||
.setSeed(42)
|
.setSeed(42)
|
||||||
.setNThreads(8)
|
.setNThreads(8)
|
||||||
.setNGpuLayers(0)
|
.setNGpuLayers(0)
|
||||||
|
@ -1,2 +1,5 @@
|
|||||||
spring.application.name = ia-chat-boot
|
spring.application.name = ia-chat-boot
|
||||||
server.port = 8080
|
server.port = 8080
|
||||||
|
|
||||||
|
! Model
|
||||||
|
model.gguf.name = openchat-3.5-0106.Q4_K_M
|
Loading…
x
Reference in New Issue
Block a user