247 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🤖 AI Chat Platform - "Kairon"
**Asistente personal de IA completamente offline y privado**
---
## Descripción
**Kairon** es una aplicación de chat con inteligencia artificial que funciona completamente offline. Utiliza un modelo
de lenguaje local para generar respuestas naturales y contextuales, manteniendo todas las conversaciones en tu
dispositivo sin enviar datos a servicios externos.
La aplicación está construida con una arquitectura hexagonal moderna, separando claramente las responsabilidades entre
el frontend (Vue.js), el backend (Spring Boot) y el motor de IA (Llama). Esto permite un código mantenible, escalable y
fácil de extender.
---
## Características
- 💬 **Chat inteligente** - Conversaciones naturales con memoria de contexto
- 🔒 **100% Privado** - Todas las conversaciones permanecen en tu dispositivo
- 🌐 **Funciona offline** - No requiere conexión a internet
- 📱 **Interfaz moderna** - Frontend responsive construido con Vue.js 3
- 🏗️ **Arquitectura limpia** - Backend con patrones de diseño empresariales
- 📊 **Monitoreo integrado** - Health checks y métricas de rendimiento
- 🔧 **Altamente configurable** - Prompts y comportamiento personalizables
---
## Arquitectura
El proyecto está organizado como una aplicación multimodular:
```plaintext
ai-chat-platform/
├── chat-api/ # API REST con Spring Boot
│ ├── domain/ # Lógica de negocio
│ ├── application/ # Casos de uso
│ ├── infrastructure/ # Implementaciones técnicas
│ └── presentation/ # Controllers REST
├── chat-web-client/ # Interfaz web con Vue.js
│ ├── src/components/ # Componentes reutilizables
│ ├── src/views/ # Páginas principales
│ └── src/stores/ # Estado global
└── models/ # Modelos de IA (Llama)
```
### Stack Tecnológico
**Backend:**
- Java 21 con Spring Boot 3
- Arquitectura hexagonal con DDD
- SQLite para persistencia
- Llama.cpp para inferencia de IA
- OpenAPI para documentación
**Frontend:**
- Vue.js 3 con Composition API
- TypeScript para tipado estático
- Pinia para gestión de estado
- Vite como bundler
```plaintext
┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐
│ Frontend (Vue.js) │ │ Backend (Spring) │ │ AI Engine │
│ │ │ │ │ │
│ • Vue 3 + TypeScript│◄──►│ • Hexagonal Arch │◄──►│ • Llama Model │
│ • Pinia Store │ │ • Domain-Driven │ │ • Offline Inference │
│ • Modern UI/UX │ │ • REST API │ │ • Custom Prompts │
└─────────────────────┘ └─────────────────────┘ └─────────────────────┘
│ │ │
└───────────────────────────┼───────────────────────────┘
┌─────────────────────┐
│ SQLite Database │
│ │
│ • Conversations │
│ • Messages │
│ • User Preferences │
└─────────────────────┘
```
---
## Instalación
### Requisitos
- Java 21+
- Node.js 18+
- Maven 3.8+
- 8GB RAM (16GB recomendado)
- 4GB espacio libre
### Instalación Rápida
```shellscript
# Clonar repositorio
git clone https://github.com/pablotj/ai-chat-platform.git
cd ai-chat-platform
# Descargar modelo de IA
mkdir models
cd models
wget https://huggingface.co/TheBloke/openchat-3.5-0106-GGUF/resolve/main/openchat-3.5-0106.Q4_K_M.gguf
# Ejecutar backend
cd ../chat-api
mvn spring-boot:run
# En otra terminal, ejecutar frontend
cd ../chat-web-client
npm install
npm run dev
```
### Con Docker
```shellscript
docker-compose up -d
```
---
## Uso
1. **Acceder a la aplicación**: `http://localhost:3000`
2. **Crear nueva conversación** o seleccionar una existente
3. **Escribir mensaje** y recibir respuesta de la IA
4. **Historial automático** - Las conversaciones se guardan localmente
### API REST
La aplicación expone una API REST completa:
| Endpoint | Método | Descripción
|---------------------------------------|--------|-----------------------
| `/api/v1/conversations` | GET | Listar conversaciones
| `/api/v1/conversations` | POST | Crear conversación
| `/api/v1/conversations/{id}/messages` | GET | Obtener mensajes
| `/api/v1/conversations/{id}/messages` | POST | Enviar mensaje
**Documentación completa**: `http://localhost:8080/api/v1/swagger-ui.html`
## Capturas de Pantalla
### **Interfaz de Chat**
![demo.gif](demo.gif)
---
## Configuración
### Personalización del Asistente
Edita `chat-api/src/main/resources/prompts/system_prompt.json`:
```json
{
"character": "Eres mi asistente personal llamado 'Kairon'",
"tone": "Cercano, natural y amigable",
"language": "Español",
"rules": [
"Responde siempre en español",
"Sé útil y preciso",
"Mantén un tono amigable"
]
}
```
### Configuración del Modelo
En `backend/src/main/resources/application.yml`:
```yaml
ai:
model:
name: openchat-3.5-0106.Q4_K_M
path: models/${ai.model.name}.gguf
inference:
max-tokens: 2048
temperature: 0.7
gpu:
enabled: true
layers: 35
```
---
## Testing
```shellscript
# Tests del backend
cd chat-api
mvn test
# Tests del frontend
cd chat-web-client
npm run test
npm run test:e2e
```
---
## Monitoreo
La aplicación incluye endpoints de monitoreo:
- **Health Check**: `http://localhost:8080/api/actuator/health`
- **Métricas**: `http://localhost:8080/api/actuator/metrics`
- **Info**: `http://localhost:8080/api/actuator/info`
---
## Contribuir
Las contribuciones son bienvenidas. Para contribuir:
1. Fork el proyecto
2. Crea una rama feature (`git checkout -b feature/nueva-funcionalidad`)
3. Commit los cambios (`git commit -m 'Añadir nueva funcionalidad'`)
4. Push a la rama (`git push origin feature/nueva-funcionalidad`)
5. Abre un Pull Request
---
## Licencia
Este proyecto está bajo la Licencia MIT. Ver [LICENSE](LICENSE) para más detalles.
---
## Recursos
- **[llama.cpp](https://github.com/ggerganov/llama.cpp)** - Motor de inferencia IA
- **[Spring Boot](https://spring.io/projects/spring-boot)** - Framework backend
- **[Vue.js](https://vuejs.org/)** - Framework frontend
- **[OpenChat](https://huggingface.co/openchat)** - Modelo de lenguaje utilizado
---
*Desarrollado por [Pablo TJ](https://github.com/pablotj)*