Initial commit: Context Manager v1.0.0
Sistema local de gestión de contexto para IA: - Log inmutable (blockchain-style) - Algoritmos versionados y mejorables - Agnóstico al modelo (Anthropic, OpenAI, Ollama) - Sistema de métricas y A/B testing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
235
README.md
Normal file
235
README.md
Normal file
@@ -0,0 +1,235 @@
|
||||
# Context Manager
|
||||
|
||||
Sistema local de gestión de contexto para IA, agnóstico al modelo.
|
||||
|
||||
## Características
|
||||
|
||||
- **Log inmutable**: Tabla de referencia no editable con encadenamiento de hashes (blockchain-style)
|
||||
- **Gestor de contexto mejorable**: Algoritmos versionados y configurables
|
||||
- **Agnóstico al modelo**: Soporta Anthropic, OpenAI, Ollama y cualquier otro proveedor
|
||||
- **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
|
||||
|
||||
## 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) │ │
|
||||
│ └─────────────────┘ └─────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 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
|
||||
|
||||
### CLI
|
||||
|
||||
```bash
|
||||
# Chat interactivo con Anthropic
|
||||
python -m src.cli chat --provider anthropic --model claude-sonnet-4-20250514
|
||||
|
||||
# Chat con Ollama (local)
|
||||
python -m src.cli chat --provider ollama --model llama3
|
||||
|
||||
# Analizar rendimiento del algoritmo
|
||||
python -m src.cli analyze --days 30
|
||||
|
||||
# Sugerir mejoras
|
||||
python -m src.cli suggest --apply
|
||||
|
||||
# Verificar integridad de sesión
|
||||
python -m src.cli verify <session_id>
|
||||
```
|
||||
|
||||
### 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
|
||||
Reference in New Issue
Block a user