Update to Skynet v7 - Complete documentation restructure
- Nueva estructura de carpetas según Skynet v7 - Añadidos schemas SQL completos - Documentación de entidades, componentes e integraciones - Modelo de seguridad actualizado - Infraestructura y operaciones reorganizadas
This commit is contained in:
262
03_MODELO_DATOS/context-tables.md
Normal file
262
03_MODELO_DATOS/context-tables.md
Normal file
@@ -0,0 +1,262 @@
|
||||
# Tablas de Contexto
|
||||
|
||||
**Estado:** Implementado
|
||||
**Base de datos:** PostgreSQL (ARCHITECT)
|
||||
|
||||
---
|
||||
|
||||
## Descripción
|
||||
|
||||
Tablas que proporcionan contexto a las instancias Claude.
|
||||
|
||||
---
|
||||
|
||||
## Diagrama de Relaciones
|
||||
|
||||
```
|
||||
instancias ──┬── memoria
|
||||
│
|
||||
└── conversaciones ──── mensajes_v2
|
||||
│
|
||||
└── memoria (conversacion_origen)
|
||||
|
||||
conocimiento (independiente, compartido)
|
||||
|
||||
contexto_ambiental (independiente, periódico)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## instancias
|
||||
|
||||
Identidad de cada instancia Claude.
|
||||
|
||||
```sql
|
||||
CREATE TABLE instancias (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
nombre VARCHAR(100),
|
||||
system_prompt TEXT NOT NULL,
|
||||
personalidad JSONB DEFAULT '{
|
||||
"tono": "profesional",
|
||||
"idioma": "es",
|
||||
"verbosidad": "conciso"
|
||||
}',
|
||||
permisos JSONB DEFAULT '{
|
||||
"puede_ejecutar_bash": false,
|
||||
"puede_acceder_red": false,
|
||||
"puede_modificar_archivos": false,
|
||||
"servidores_permitidos": []
|
||||
}',
|
||||
modelo VARCHAR(50) DEFAULT 'sonnet',
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
**Uso:** Define quién es cada Claude, su personalidad, y qué puede hacer.
|
||||
|
||||
### Instancias Activas
|
||||
|
||||
| ID | Nombre | Modelo | Servidor |
|
||||
|----|--------|--------|----------|
|
||||
| architect | Architect | sonnet | ARCHITECT |
|
||||
| hst | HST | sonnet | HST |
|
||||
| deck | Deck | sonnet | DECK |
|
||||
| corp | Corp | sonnet | CORP |
|
||||
| runpod | Runpod | sonnet | RunPod |
|
||||
| locker | Locker | haiku | R2/Storage |
|
||||
|
||||
---
|
||||
|
||||
## memoria
|
||||
|
||||
Memoria a largo plazo por instancia.
|
||||
|
||||
```sql
|
||||
CREATE TABLE memoria (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
instancia_id VARCHAR(50) REFERENCES instancias(id),
|
||||
tipo VARCHAR(50) NOT NULL,
|
||||
contenido TEXT NOT NULL,
|
||||
importancia INT DEFAULT 5,
|
||||
usos INT DEFAULT 0,
|
||||
ultimo_uso TIMESTAMP,
|
||||
conversacion_origen UUID REFERENCES conversaciones(id),
|
||||
expira_at TIMESTAMP,
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_memoria_instancia ON memoria(instancia_id, importancia DESC);
|
||||
CREATE INDEX idx_memoria_tipo ON memoria(instancia_id, tipo);
|
||||
```
|
||||
|
||||
### Tipos de Memoria
|
||||
|
||||
| Tipo | Descripción |
|
||||
|------|-------------|
|
||||
| preferencia | Preferencias del usuario |
|
||||
| hecho | Hechos aprendidos |
|
||||
| decision | Decisiones tomadas |
|
||||
| aprendizaje | Lecciones aprendidas |
|
||||
| procedimiento | Procedimientos aprendidos |
|
||||
|
||||
---
|
||||
|
||||
## conocimiento
|
||||
|
||||
Base de conocimiento compartida (RAG).
|
||||
|
||||
```sql
|
||||
CREATE TABLE conocimiento (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
categoria VARCHAR(50) NOT NULL,
|
||||
titulo VARCHAR(200),
|
||||
contenido TEXT NOT NULL,
|
||||
tags TEXT[],
|
||||
instancias_permitidas VARCHAR(50)[],
|
||||
prioridad INT DEFAULT 0,
|
||||
fuente VARCHAR(200),
|
||||
hash_contenido VARCHAR(64),
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_conocimiento_categoria ON conocimiento(categoria);
|
||||
CREATE INDEX idx_conocimiento_prioridad ON conocimiento(prioridad DESC);
|
||||
CREATE INDEX idx_conocimiento_tags ON conocimiento USING GIN(tags);
|
||||
```
|
||||
|
||||
### Categorías
|
||||
|
||||
| Categoría | Descripción |
|
||||
|-----------|-------------|
|
||||
| infraestructura | Documentación de infra |
|
||||
| proyecto | Información de proyectos |
|
||||
| personal | Datos personales |
|
||||
| procedimiento | Procedimientos operativos |
|
||||
|
||||
---
|
||||
|
||||
## conversaciones
|
||||
|
||||
Sesiones de chat.
|
||||
|
||||
```sql
|
||||
CREATE TABLE conversaciones (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
instancia_id VARCHAR(50) REFERENCES instancias(id),
|
||||
usuario VARCHAR(50) NOT NULL,
|
||||
titulo VARCHAR(200),
|
||||
activa BOOLEAN DEFAULT TRUE,
|
||||
total_tokens INT DEFAULT 0,
|
||||
total_mensajes INT DEFAULT 0,
|
||||
resumen TEXT,
|
||||
resumen_updated_at TIMESTAMP,
|
||||
contexto_ambiental JSONB DEFAULT '{
|
||||
"proyecto_activo": null,
|
||||
"archivos_abiertos": [],
|
||||
"ultimo_comando": null,
|
||||
"hora_local": null
|
||||
}',
|
||||
created_at TIMESTAMP DEFAULT NOW(),
|
||||
updated_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_conversaciones_instancia ON conversaciones(instancia_id, activa);
|
||||
CREATE INDEX idx_conversaciones_usuario ON conversaciones(usuario, activa);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## mensajes_v2
|
||||
|
||||
Mensajes con soporte para compactación.
|
||||
|
||||
```sql
|
||||
CREATE TABLE mensajes_v2 (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
conversacion_id UUID REFERENCES conversaciones(id),
|
||||
role VARCHAR(20) NOT NULL CHECK (role IN ('user', 'assistant', 'system')),
|
||||
contenido TEXT NOT NULL,
|
||||
archivos JSONB DEFAULT '[]',
|
||||
tokens_estimados INT,
|
||||
compactado BOOLEAN DEFAULT FALSE,
|
||||
resumen_compactado TEXT,
|
||||
metadata JSONB DEFAULT '{}',
|
||||
created_at TIMESTAMP DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_mensajes_v2_conversacion ON mensajes_v2(conversacion_id, created_at);
|
||||
CREATE INDEX idx_mensajes_v2_no_compactados ON mensajes_v2(conversacion_id, compactado)
|
||||
WHERE compactado = FALSE;
|
||||
```
|
||||
|
||||
**Nota:** Los mensajes antiguos se compactan (resumen) para ahorrar tokens.
|
||||
|
||||
---
|
||||
|
||||
## contexto_ambiental
|
||||
|
||||
Estado actual del sistema (captura periódica).
|
||||
|
||||
```sql
|
||||
CREATE TABLE contexto_ambiental (
|
||||
id SERIAL PRIMARY KEY,
|
||||
capturado_at TIMESTAMP DEFAULT NOW(),
|
||||
servidores JSONB,
|
||||
servicios JSONB,
|
||||
tareas_pendientes JSONB,
|
||||
alertas JSONB,
|
||||
git_estado JSONB,
|
||||
expira_at TIMESTAMP DEFAULT NOW() + INTERVAL '1 hour'
|
||||
);
|
||||
|
||||
CREATE INDEX idx_contexto_ambiental_tiempo ON contexto_ambiental(capturado_at DESC);
|
||||
```
|
||||
|
||||
### Estructura JSONB
|
||||
|
||||
```json
|
||||
{
|
||||
"servidores": {
|
||||
"architect": {"status": "online", "uptime": "5d"},
|
||||
"deck": {"status": "online", "uptime": "3d"}
|
||||
},
|
||||
"servicios": {
|
||||
"gitea": "running",
|
||||
"windmill": "running",
|
||||
"directus": "running"
|
||||
},
|
||||
"tareas_pendientes": [
|
||||
{"id": 1, "descripcion": "...", "prioridad": "alta"}
|
||||
],
|
||||
"alertas": [
|
||||
{"tipo": "warning", "mensaje": "...", "severidad": "medium"}
|
||||
],
|
||||
"git_estado": {
|
||||
"branch": "main",
|
||||
"commits_ahead": 0,
|
||||
"uncommitted_changes": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Flujo de Contexto
|
||||
|
||||
Cuando Claude recibe un mensaje:
|
||||
|
||||
```
|
||||
1. System Prompt ← instancias.system_prompt
|
||||
2. Personalidad ← instancias.personalidad
|
||||
3. Memorias ← memoria WHERE instancia_id = X
|
||||
ORDER BY importancia DESC LIMIT 20
|
||||
4. Conocimiento ← conocimiento WHERE instancias_permitidas
|
||||
IS NULL OR X = ANY(instancias_permitidas)
|
||||
5. Contexto Ambiental ← contexto_ambiental
|
||||
ORDER BY capturado_at DESC LIMIT 1
|
||||
6. Historial ← mensajes_v2 WHERE compactado = FALSE
|
||||
ORDER BY created_at
|
||||
7. Resumen ← conversaciones.resumen (mensajes compactados)
|
||||
```
|
||||
Reference in New Issue
Block a user