247 lines
7.2 KiB
Markdown
247 lines
7.2 KiB
Markdown
# 🤖 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**
|
||
|
||

|
||
|
||
---
|
||
|
||
## ️ 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)* |