Nexus/CONVERSATION_MEMORY.md

344 lines
9.1 KiB
Markdown
Raw 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.

# 🧠 Sistema de Memoria de Conversación - NexusChat
## ✅ Estado: IMPLEMENTADO Y FUNCIONAL
---
## 📊 Características Implementadas
### 1. 🗄️ Conversaciones Independientes por Agente/Just Chat
- **Cada agente mantiene su propio historial de conversación**
- **Just Chat tiene su conversación independiente**
- **Conversaciones almacenadas en PostgreSQL** con persistencia completa
### 2. 🧠 Memoria de Contexto Continuo
- Al enviar un mensaje, el servidor **carga TODO el historial previo** de la conversación
- El historial completo se **envía al modelo de IA** para mantener contexto
- **Continuidad de conversación** entre sesiones (cerrar/abrir aplicación)
### 3. 📝 Auto-titulado de Conversaciones
- Primera pregunta del usuario se usa como **título automático**
- Títulos generados de los **primeros 60 caracteres** del mensaje
- Facilita identificación de conversaciones en historial
### 4. 💾 Persistencia en Base de Datos
- **Tabla `conversations`**: Conversaciones por usuario/agente
- **Tabla `messages`**: Todos los mensajes con timestamp
- **Tabla `agents`**: Agentes configurables
- **Relaciones**: User → Conversations → Messages
### 5. 🔄 Carga Automática al Cambiar Contexto
- Al seleccionar un agente: carga su conversación activa desde BD
- Al seleccionar Just Chat: carga conversación de Just Chat desde BD
- Sincronización automática sin intervención del usuario
---
## 🔌 API REST para Conversaciones
### Endpoints Disponibles:
```bash
# Listar todas las conversaciones
GET /api/conversations?agentId=xxx
GET /api/conversations?isJustChat=true
# Obtener conversación activa
GET /api/conversations/active?agentId=xxx
GET /api/conversations/active?isJustChat=true
# Obtener mensajes de una conversación
GET /api/conversations/:conversationId/messages
```
### Respuestas:
```json
{
"success": true,
"data": {
"id": "cmlqv9qz600025p1onk963r19",
"userId": "cmlqv8y0800005p1omor7yqxz",
"title": "What is TypeScript?",
"agentId": null,
"modelId": "gpt-4o",
"providerId": "openai",
"createdAt": "2026-02-17T17:18:02.705Z",
"updatedAt": "2026-02-17T18:25:15.123Z",
"messages": [
{
"id": "msg1",
"role": "user",
"content": "What is TypeScript?",
"createdAt": "2026-02-17T17:18:02.705Z"
},
{
"id": "msg2",
"role": "assistant",
"content": "TypeScript is...",
"createdAt": "2026-02-17T17:18:05.123Z"
}
]
}
}
```
---
## 📋 Flujo de Conversación con Memoria
```
1⃣ Usuario selecciona agente o Just Chat
2⃣ Cliente llama a API: GET /api/conversations/active
3⃣ Cliente carga todos los mensajes históricos en UI
4⃣ Usuario envía nuevo mensaje
5⃣ Servidor busca/crea conversación en BD
6⃣ Servidor carga TODOS los mensajes previos de la BD
7⃣ Servidor construye array de contexto:
[System Prompt] + [Mensaje 1] + [Respuesta 1] + ... + [Nuevo Mensaje]
8⃣ Servidor envía array completo al modelo de IA
9⃣ IA responde CON CONOCIMIENTO de toda la conversación previa
🔟 Ambos mensajes (usuario + IA) se guardan en BD
1⃣1⃣ Si es primer mensaje: título se auto-genera
```
---
## 🎯 Ejemplo de Uso Real
### Escenario: Conversación sobre TypeScript
```typescript
// 1. Usuario abre "Just Chat"
// → Se carga historial previo de Just Chat desde BD (vacío si es primera vez)
// 2. Usuario pregunta:
"What is TypeScript?"
// → Se crea nueva conversación con título: "What is TypeScript?"
// → IA responde explicando TypeScript
// → Ambos mensajes guardados en BD
// 3. Usuario pregunta (en la MISMA conversación):
"Give me a code example"
// → Servidor carga historial completo:
// [
// { role: 'user', content: 'What is TypeScript?' },
// { role: 'assistant', content: 'TypeScript is...' },
// { role: 'user', content: 'Give me a code example' }
// ]
// → IA recibe TODO el contexto
// → IA responde con ejemplo de TypeScript (sabe que está hablando de TS)
// → Mensaje guardado en BD
// 4. Usuario cierra aplicación
// → Todo guardado en PostgreSQL
// 5. Usuario reabre aplicación y selecciona "Just Chat"
// → Historial completo se carga desde BD
// → Conversación continúa exactamente donde quedó
```
---
## 🧹 Función de Limpiar Conversación
```typescript
// En useChat hook:
const { clearConversation } = useChat();
// Usar en UI:
<button onClick={clearConversation}>
Start New Conversation
</button>
// Efecto:
// - Limpia mensajes en memoria
// - Limpia localStorage
// - Próximo mensaje creará nueva conversación en BD
```
---
## 🗂️ Estructura de Base de Datos
```sql
-- Tabla de Usuarios
users (
id: cuid PRIMARY KEY,
email: VARCHAR UNIQUE,
name: VARCHAR,
password: VARCHAR,
created_at: TIMESTAMP,
updated_at: TIMESTAMP
)
-- Tabla de Agentes
agents (
id: cuid PRIMARY KEY,
user_id: cuid users(id),
name: VARCHAR,
emoji: VARCHAR,
role: VARCHAR,
description: TEXT,
status: VARCHAR,
created_at: TIMESTAMP,
updated_at: TIMESTAMP
)
-- Tabla de Conversaciones
conversations (
id: cuid PRIMARY KEY,
user_id: cuid users(id),
agent_id: cuid agents(id) NULLABLE,
title: VARCHAR,
model_id: VARCHAR,
provider_id: VARCHAR,
created_at: TIMESTAMP,
updated_at: TIMESTAMP
)
-- Tabla de Mensajes
messages (
id: cuid PRIMARY KEY,
conversation_id: cuid conversations(id),
role: VARCHAR (user|assistant|system),
content: TEXT,
tokens_used: INTEGER,
model: VARCHAR,
created_at: TIMESTAMP
)
```
---
## 🔧 Archivos Clave
### Backend:
- `src/server/WebServer.ts` - Manejo de socket con carga de historial
- `src/server/routes/conversations.ts` - API REST de conversaciones
- `src/server/routes/agents.ts` - CRUD de agentes
- `src/db/prisma.ts` - Cliente Prisma
- `prisma/schema.prisma` - Esquema de base de datos
### Frontend:
- `client/src/hooks/useChat.ts` - Gestión de mensajes y carga desde BD
- `client/src/hooks/useAgents.ts` - Gestión de agentes con API
- `client/src/components/LobeChatArea.tsx` - Área de chat
- `client/src/components/AgentList.tsx` - Lista de agentes
---
## 🚀 Servidor en Ejecución
```bash
# Backend
URL: http://localhost:3000
Estado: ✅ Running
PID: [Ver con: lsof -i:3000]
# Base de datos
Type: PostgreSQL
Host: 192.168.1.20:5433
Database: nexus
Estado: ✅ Connected
# Frontend (Vite dev)
URL: http://localhost:3002
Estado: ✅ Running
```
---
## 🧪 Comandos de Prueba
```bash
# 1. Verificar servidor
curl http://localhost:3000/health
# 2. Listar agentes
curl http://localhost:3000/api/agents | jq '.'
# 3. Crear agente
curl -X POST http://localhost:3000/api/agents \
-H "Content-Type: application/json" \
-d '{"name":"Test Agent","emoji":"🤖","description":"Test agent"}' \
| jq '.'
# 4. Obtener conversación activa de Just Chat
curl "http://localhost:3000/api/conversations/active?isJustChat=true" | jq '.'
# 5. Obtener conversación activa de un agente
curl "http://localhost:3000/api/conversations/active?agentId=AGENT_ID" | jq '.'
# 6. Listar todas las conversaciones
curl "http://localhost:3000/api/conversations" | jq '.'
```
---
## 📈 Beneficios del Sistema
**Persistencia Total**: Nunca se pierde el historial de conversación
**Contexto Continuo**: IA recuerda toda la conversación previa
**Multi-sesión**: Cerrar y abrir la app no afecta el contexto
**Organización**: Cada agente tiene su propio historial
**Escalabilidad**: PostgreSQL soporta miles de conversaciones
**Auto-guardado**: No hay botones "Save", todo se guarda automáticamente
**Títulos Inteligentes**: Fácil identificar conversaciones antiguas
---
## 🎓 Conceptos Implementados
- **Persistencia de Estado**: PostgreSQL + Prisma ORM
- **Context Window Management**: Envío de historial completo al LLM
- **Relational Data Modeling**: Users → Agents → Conversations → Messages
- **Real-time Streaming**: Socket.IO con chunks
- **API REST**: Express con TypeScript
- **React Hooks**: Custom hooks para gestión de estado
- **Optimistic UI**: Actualización inmediata en cliente
- **Fallback Strategy**: localStorage como backup si falla API
---
## 🔮 Próximas Mejoras Sugeridas
1. **Paginación de Historial**: Cargar solo últimos N mensajes para performance
2. **Búsqueda de Conversaciones**: Buscar por contenido o título
3. **Exportar Conversaciones**: Descargar como JSON/Markdown
4. **Compartir Conversaciones**: Link público a conversación
5. **Etiquetas/Tags**: Organizar conversaciones por categorías
6. **Archivar Conversaciones**: Ocultar conversaciones antiguas
7. **Borrar Conversaciones**: Eliminar historial permanentemente
8. **Context Window Optimization**: Comprimir mensajes antiguos (summarization)
---
## ✅ Estado Final
**Sistema completamente funcional** con:
- ✅ Persistencia en PostgreSQL
- ✅ Memoria de conversación continua
- ✅ Streaming de respuestas
- ✅ Auto-guardado automático
- ✅ API REST completa
- ✅ UI integrada con Lobe UI
- ✅ Compilación sin errores
- ✅ Servidor en ejecución
**Todo listo para uso en producción** 🎉