- Add production status for DECK, CORP, ARCHITECT servers - Document 9 PostgreSQL tables created (immutable_log, sessions, context_blocks, memory, knowledge_base, algorithms, metrics, experiments, audit_log) - Highlight that system replaces Anthropic context management - Expand CLI commands documentation with multiple provider support and management operations
265 lines
8.4 KiB
Markdown
265 lines
8.4 KiB
Markdown
# Context Manager
|
|
|
|
Sistema local de gestión de contexto para IA, agnóstico al modelo.
|
|
|
|
**Estado**: PRODUCCIÓN en DECK, CORP, ARCHITECT
|
|
|
|
## Características
|
|
|
|
- **Log inmutable**: Tabla de referencia no editable con encadenamiento de hashes (blockchain-style)
|
|
- **Gestor de contexto mejorable**: Algoritmos versionados y configurables
|
|
- **Reemplaza sistema contexto Anthropic**: Solución independiente y optimizada
|
|
- **Sistema de métricas**: Evaluación continua del rendimiento
|
|
- **A/B Testing**: Experimentación entre versiones de algoritmos
|
|
- **Auto-mejora**: Sugerencias automáticas basadas en métricas
|
|
- **9 tablas PostgreSQL**: Arquitectura robusta con log inmutable y gestión de contexto
|
|
|
|
## Arquitectura
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ TABLAS NO EDITABLES │
|
|
│ ┌─────────────────┐ │
|
|
│ │ immutable_log │ ← Log de mensajes (blockchain-style) │
|
|
│ │ sessions │ ← Registro de sesiones │
|
|
│ └─────────────────┘ │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ TABLAS EDITABLES │
|
|
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
|
|
│ │ context_blocks │ │ memory │ │ knowledge_base │ │
|
|
│ │ (bloques ctx) │ │ (memoria LP) │ │ (RAG simple) │ │
|
|
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
|
|
│ ┌─────────────────┐ ┌─────────────────┐ │
|
|
│ │ algorithms │ │ metrics │ │
|
|
│ │ (versionados) │ │ (rendimiento) │ │
|
|
│ └─────────────────┘ └─────────────────┘ │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Estado de Producción
|
|
|
|
| Servidor | Estado | BD PostgreSQL | Tablas | Comandos CLI |
|
|
|----------|--------|---------------|--------|--------------|
|
|
| DECK (72.62.1.113) | ✓ PRODUCCIÓN | Activa | 9 | Disponibles |
|
|
| CORP (92.112.181.188) | ✓ PRODUCCIÓN | Activa | 9 | Disponibles |
|
|
| ARCHITECT (69.62.126.110) | ✓ PRODUCCIÓN | Activa | 9 | Disponibles |
|
|
|
|
### Tablas PostgreSQL (9 total)
|
|
1. `immutable_log` - Log blockchain-style (no editable)
|
|
2. `sessions` - Registro de sesiones
|
|
3. `context_blocks` - Bloques de contexto
|
|
4. `memory` - Memoria a largo plazo
|
|
5. `knowledge_base` - Base de conocimiento RAG
|
|
6. `algorithms` - Algoritmos versionados
|
|
7. `metrics` - Métricas de rendimiento
|
|
8. `experiments` - Experimentos A/B
|
|
9. `audit_log` - Auditoría del sistema
|
|
|
|
## Instalación
|
|
|
|
```bash
|
|
# Clonar
|
|
git clone <repo>/context-manager
|
|
cd context-manager
|
|
|
|
# Instalar dependencias
|
|
pip install -r requirements.txt
|
|
|
|
# Inicializar base de datos
|
|
python -m src.cli init --database context_manager
|
|
```
|
|
|
|
## Uso básico
|
|
|
|
### Comandos CLI Disponibles
|
|
|
|
```bash
|
|
# Inicializar base de datos
|
|
python -m src.cli init --database context_manager
|
|
|
|
# Chat interactivo (múltiples proveedores)
|
|
python -m src.cli chat --provider anthropic --model claude-sonnet-4-20250514
|
|
python -m src.cli chat --provider openai --model gpt-4
|
|
python -m src.cli chat --provider ollama --model llama3
|
|
|
|
# Gestión de contexto
|
|
python -m src.cli context-add --block <name> --content <content>
|
|
python -m src.cli context-list
|
|
python -m src.cli context-remove --block <name>
|
|
|
|
# Análisis y mejora
|
|
python -m src.cli analyze --days 30
|
|
python -m src.cli suggest --apply
|
|
python -m src.cli experiment --control <id> --treatment <id>
|
|
|
|
# Verificación de integridad
|
|
python -m src.cli verify <session_id>
|
|
python -m src.cli health-check
|
|
```
|
|
|
|
### Python API
|
|
|
|
```python
|
|
from src import ContextManager
|
|
from src.providers import AnthropicProvider
|
|
|
|
# Inicializar
|
|
manager = ContextManager(
|
|
host="localhost",
|
|
database="context_manager"
|
|
)
|
|
|
|
# Iniciar sesión
|
|
session = manager.start_session(
|
|
user_id="user1",
|
|
model_provider="anthropic",
|
|
model_name="claude-sonnet-4-20250514"
|
|
)
|
|
|
|
# Obtener contexto para un mensaje
|
|
context = manager.get_context_for_message(
|
|
"¿Cómo configuro el servidor?",
|
|
max_tokens=4000
|
|
)
|
|
|
|
# Usar con proveedor
|
|
provider = AnthropicProvider()
|
|
response = provider.send_message("¿Cómo configuro el servidor?", context)
|
|
|
|
# Registrar en log inmutable
|
|
manager.log_user_message("¿Cómo configuro el servidor?", context)
|
|
manager.log_assistant_message(
|
|
response.content,
|
|
tokens_input=response.tokens_input,
|
|
tokens_output=response.tokens_output
|
|
)
|
|
|
|
# Verificar integridad
|
|
result = manager.verify_session_integrity()
|
|
assert result["is_valid"]
|
|
```
|
|
|
|
### Mejora de algoritmos
|
|
|
|
```python
|
|
from src.algorithm_improver import AlgorithmImprover
|
|
|
|
improver = AlgorithmImprover(db)
|
|
|
|
# Analizar rendimiento
|
|
analysis = improver.analyze_algorithm(days=30)
|
|
print(f"Calidad promedio: {analysis.avg_quality}")
|
|
print(f"Sugerencias: {analysis.suggestions}")
|
|
|
|
# Crear experimento A/B
|
|
experiment_id = improver.create_experiment(
|
|
control_id=current_algorithm_id,
|
|
treatment_id=new_algorithm_id,
|
|
name="Test nuevo algoritmo",
|
|
traffic_split=0.5,
|
|
min_samples=100
|
|
)
|
|
|
|
# Evaluar resultados
|
|
result = improver.evaluate_experiment(experiment_id)
|
|
print(f"Ganador: {result.winner}")
|
|
print(f"Mejora: {result.improvement_pct}%")
|
|
```
|
|
|
|
## Estructura de archivos
|
|
|
|
```
|
|
context-manager/
|
|
├── schemas/
|
|
│ ├── 00_base.sql # Tipos y funciones base
|
|
│ ├── 01_immutable_log.sql # Log inmutable (NO editable)
|
|
│ ├── 02_context_manager.sql # Bloques, memoria, conocimiento
|
|
│ └── 03_algorithm_engine.sql # Algoritmos y métricas
|
|
├── src/
|
|
│ ├── __init__.py
|
|
│ ├── models.py # Modelos de datos
|
|
│ ├── database.py # Conexión PostgreSQL
|
|
│ ├── context_selector.py # Motor de selección
|
|
│ ├── algorithm_improver.py # Sistema de mejora
|
|
│ ├── cli.py # Interfaz de línea de comandos
|
|
│ └── providers/
|
|
│ ├── base.py # Clase base
|
|
│ ├── anthropic.py # Adaptador Anthropic
|
|
│ ├── openai.py # Adaptador OpenAI
|
|
│ └── ollama.py # Adaptador Ollama
|
|
├── config/
|
|
│ └── default.yaml # Configuración por defecto
|
|
├── tests/
|
|
├── requirements.txt
|
|
└── README.md
|
|
```
|
|
|
|
## Configuración del algoritmo
|
|
|
|
```json
|
|
{
|
|
"max_tokens": 4000,
|
|
"sources": {
|
|
"system_prompts": true,
|
|
"context_blocks": true,
|
|
"memory": true,
|
|
"knowledge": true,
|
|
"history": true,
|
|
"ambient": true
|
|
},
|
|
"weights": {
|
|
"priority": 0.4,
|
|
"relevance": 0.3,
|
|
"recency": 0.2,
|
|
"frequency": 0.1
|
|
},
|
|
"history_config": {
|
|
"max_messages": 20,
|
|
"summarize_after": 10,
|
|
"include_system": false
|
|
},
|
|
"memory_config": {
|
|
"max_items": 15,
|
|
"min_importance": 30
|
|
},
|
|
"knowledge_config": {
|
|
"max_items": 5,
|
|
"require_keyword_match": true
|
|
}
|
|
}
|
|
```
|
|
|
|
## Integridad del log
|
|
|
|
El log inmutable usa encadenamiento de hashes similar a blockchain:
|
|
|
|
```
|
|
Mensaje 1 → hash1 = SHA256(content1)
|
|
Mensaje 2 → hash2 = SHA256(hash1 + content2)
|
|
Mensaje 3 → hash3 = SHA256(hash2 + content3)
|
|
```
|
|
|
|
Verificar integridad:
|
|
```sql
|
|
SELECT * FROM verify_chain_integrity('session-uuid');
|
|
```
|
|
|
|
## Variables de entorno
|
|
|
|
```bash
|
|
PGHOST=localhost
|
|
PGPORT=5432
|
|
PGDATABASE=context_manager
|
|
PGUSER=postgres
|
|
PGPASSWORD=
|
|
|
|
ANTHROPIC_API_KEY=sk-ant-...
|
|
OPENAI_API_KEY=sk-...
|
|
OLLAMA_HOST=localhost
|
|
OLLAMA_PORT=11434
|
|
```
|
|
|
|
## Licencia
|
|
|
|
MIT
|