- Execute all 6 migrations on Desk CRM production database - Create missing tables: cr_lsps, cr_agent_lsps, cr_lsp_usage - Create archive tables: cr_*_usage_archive (4 tables) - Create system tables: cr_migrations, cr_maintenance_log - Make all scripts executable (chmod +x) - Total cr_* tables: 38 Migration files: - 001_initial_schema.sql - 002_add_lsps.sql - 003_add_relationships.sql - 004_add_telemetry.sql - 005_add_archive_tables.sql - 006_add_maintenance_log.sql Scripts: - session-init.sh, session-end.sh - inject-context.sh, inject-agent-context.sh - record-usage.sh, db-backup.sh, sync-to-mysql.sh Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
287 lines
12 KiB
Markdown
287 lines
12 KiB
Markdown
---
|
|
name: decision-trees
|
|
description: >
|
|
Gestão das árvores de decisão para selecção automática de agentes.
|
|
Listar, criar, ajustar confidence, testar e recalibrar.
|
|
argument-hint: "[list|show|create|adjust|test|recalibrate] [tree-name] [args]"
|
|
---
|
|
|
|
# /descomplicar:decision-trees
|
|
|
|
Gestão das árvores de decisão para selecção automática de agentes.
|
|
|
|
## Objectivo
|
|
|
|
Visualizar, criar e ajustar as decision trees que determinam qual agente usar para cada tipo de tarefa.
|
|
|
|
## Sintaxe
|
|
|
|
```
|
|
/descomplicar:decision-trees [action] [args]
|
|
```
|
|
|
|
## Acções Disponíveis
|
|
|
|
### 1. Listar Decision Trees
|
|
|
|
```
|
|
/descomplicar:decision-trees list
|
|
```
|
|
|
|
**Query:**
|
|
```sql
|
|
SELECT
|
|
dt.id,
|
|
dt.name,
|
|
a.slug as agent,
|
|
dt.trigger_keywords,
|
|
dt.confidence_score,
|
|
dt.usage_count,
|
|
dt.status
|
|
FROM cr_decision_trees dt
|
|
JOIN cr_agents a ON dt.agent_id = a.id
|
|
ORDER BY dt.usage_count DESC;
|
|
```
|
|
|
|
**Output:**
|
|
```
|
|
╔══════════════════════════════════════════════════════════════════════╗
|
|
║ DECISION TREES (5 activas) ║
|
|
╠══════════════════════════════════════════════════════════════════════╣
|
|
║ ID │ Nome │ Agent │ Conf │ Uses ║
|
|
║ ─────────────────────────────────────────────────────────────────── ║
|
|
║ 1 │ wordpress-tasks │ wordpress-plugin-dev │ 0.92 │ 156 ║
|
|
║ 2 │ marketing-campaigns │ marketing-planning-exp │ 0.88 │ 134 ║
|
|
║ 3 │ seo-optimization │ seo-specialist │ 0.85 │ 87 ║
|
|
║ 4 │ php-development │ php-fullstack-engineer │ 0.90 │ 98 ║
|
|
║ 5 │ infrastructure-tasks │ easypanel-specialist │ 0.82 │ 38 ║
|
|
╚══════════════════════════════════════════════════════════════════════╝
|
|
```
|
|
|
|
### 2. Ver Detalhes
|
|
|
|
```
|
|
/descomplicar:decision-trees show wordpress-tasks
|
|
```
|
|
|
|
**Query:**
|
|
```sql
|
|
SELECT
|
|
dt.*,
|
|
a.slug as agent_slug,
|
|
a.name as agent_name,
|
|
a.category as agent_category
|
|
FROM cr_decision_trees dt
|
|
JOIN cr_agents a ON dt.agent_id = a.id
|
|
WHERE dt.name = 'wordpress-tasks';
|
|
```
|
|
|
|
**Output:**
|
|
```
|
|
╔══════════════════════════════════════════════════════════════════════╗
|
|
║ DECISION TREE: wordpress-tasks ║
|
|
╠══════════════════════════════════════════════════════════════════════╣
|
|
║ Agent: wordpress-plugin-developer ║
|
|
║ Category: dev ║
|
|
║ Confidence: 0.92 ║
|
|
║ Usage Count: 156 ║
|
|
║ Status: active ║
|
|
╠══════════════════════════════════════════════════════════════════════╣
|
|
║ TRIGGER KEYWORDS ║
|
|
║ ├── Primary: wordpress, wp, plugin, tema, theme ║
|
|
║ ├── Secondary: woocommerce, elementor, gutenberg ║
|
|
║ └── Negative: performance (→ wordpress-performance-specialist) ║
|
|
╠══════════════════════════════════════════════════════════════════════╣
|
|
║ TRIGGER CONDITIONS ║
|
|
║ { ║
|
|
║ "keywords": ["wordpress", "wp", "plugin", "tema"], ║
|
|
║ "exclude_keywords": ["performance", "speed", "cache"], ║
|
|
║ "min_confidence": 0.7, ║
|
|
║ "fallback_agent": "dev-helper" ║
|
|
║ } ║
|
|
╠══════════════════════════════════════════════════════════════════════╣
|
|
║ PERFORMANCE (30 dias) ║
|
|
║ ├── Invocações: 156 ║
|
|
║ ├── Success Rate: 96% ║
|
|
║ └── Avg Duration: 52s ║
|
|
╚══════════════════════════════════════════════════════════════════════╝
|
|
```
|
|
|
|
### 3. Criar Decision Tree
|
|
|
|
```
|
|
/descomplicar:decision-trees create
|
|
```
|
|
|
|
Modo interactivo:
|
|
1. Nome da tree
|
|
2. Agente a recomendar
|
|
3. Keywords primárias
|
|
4. Keywords secundárias (opcional)
|
|
5. Keywords negativas (opcional)
|
|
6. Confidence inicial (default: 0.75)
|
|
|
|
**Query:**
|
|
```sql
|
|
INSERT INTO cr_decision_trees
|
|
(name, agent_id, trigger_keywords, trigger_condition, confidence_score, status, created_at)
|
|
VALUES (
|
|
'new-tree-name',
|
|
(SELECT id FROM cr_agents WHERE slug = 'target-agent'),
|
|
'keyword1, keyword2, keyword3',
|
|
'{"keywords": ["keyword1", "keyword2"], "min_confidence": 0.7}',
|
|
0.75,
|
|
'active',
|
|
NOW()
|
|
);
|
|
```
|
|
|
|
### 4. Ajustar Confidence
|
|
|
|
```
|
|
/descomplicar:decision-trees adjust wordpress-tasks +0.05
|
|
/descomplicar:decision-trees adjust wordpress-tasks 0.95
|
|
```
|
|
|
|
**Query:**
|
|
```sql
|
|
UPDATE cr_decision_trees
|
|
SET confidence_score = 0.95, updated_at = NOW()
|
|
WHERE name = 'wordpress-tasks';
|
|
```
|
|
|
|
### 5. Testar Selecção
|
|
|
|
```
|
|
/descomplicar:decision-trees test "criar plugin wordpress para formulários"
|
|
```
|
|
|
|
**Processo:**
|
|
1. Extrair keywords do input
|
|
2. Comparar com todas as decision trees activas
|
|
3. Calcular score para cada match
|
|
4. Retornar agente com maior confidence
|
|
|
|
**Query:**
|
|
```sql
|
|
SELECT
|
|
dt.name as tree,
|
|
a.slug as agent,
|
|
dt.confidence_score,
|
|
-- Simular match score
|
|
(
|
|
LENGTH(dt.trigger_keywords) -
|
|
LENGTH(REPLACE(LOWER(dt.trigger_keywords), 'wordpress', ''))
|
|
) / LENGTH('wordpress') as keyword_matches
|
|
FROM cr_decision_trees dt
|
|
JOIN cr_agents a ON dt.agent_id = a.id
|
|
WHERE dt.status = 'active'
|
|
AND (
|
|
LOWER(dt.trigger_keywords) LIKE '%wordpress%'
|
|
OR LOWER(dt.trigger_keywords) LIKE '%plugin%'
|
|
OR LOWER(dt.trigger_keywords) LIKE '%formulário%'
|
|
)
|
|
ORDER BY dt.confidence_score * keyword_matches DESC
|
|
LIMIT 3;
|
|
```
|
|
|
|
**Output:**
|
|
```
|
|
╔══════════════════════════════════════════════════════════════════════╗
|
|
║ TEST: "criar plugin wordpress para formulários" ║
|
|
╠══════════════════════════════════════════════════════════════════════╣
|
|
║ MATCHES ║
|
|
║ ─────────────────────────────────────────────────────────────────── ║
|
|
║ #1 │ wordpress-tasks │ wordpress-plugin-dev │ 0.92 │ ████ ║
|
|
║ #2 │ php-development │ php-fullstack-engineer │ 0.65 │ ██░░ ║
|
|
║ #3 │ (fallback) │ dev-helper │ 0.50 │ █░░░ ║
|
|
╠══════════════════════════════════════════════════════════════════════╣
|
|
║ RECOMENDAÇÃO: wordpress-plugin-developer (confidence: 0.92) ║
|
|
╚══════════════════════════════════════════════════════════════════════╝
|
|
```
|
|
|
|
### 6. Actualizar Baseado em Telemetria
|
|
|
|
```
|
|
/descomplicar:decision-trees recalibrate
|
|
```
|
|
|
|
Actualiza confidence scores baseado no success rate real:
|
|
|
|
**Query:**
|
|
```sql
|
|
UPDATE cr_decision_trees dt
|
|
SET
|
|
confidence_score = GREATEST(0.5, LEAST(0.99,
|
|
(SELECT
|
|
AVG(CASE WHEN au.success = 1 THEN 1.0 ELSE 0.3 END) *
|
|
(1 + LOG10(COUNT(*) + 1) / 10)
|
|
FROM cr_agent_usage au
|
|
WHERE au.agent_id = dt.agent_id
|
|
AND au.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY))
|
|
)),
|
|
updated_at = NOW()
|
|
WHERE dt.status = 'active';
|
|
```
|
|
|
|
### 7. Desactivar/Activar
|
|
|
|
```
|
|
/descomplicar:decision-trees disable wordpress-tasks
|
|
/descomplicar:decision-trees enable wordpress-tasks
|
|
```
|
|
|
|
## Integração com Selecção de Agentes
|
|
|
|
Quando o Claude recebe uma tarefa, o sistema:
|
|
|
|
1. Extrai keywords do prompt
|
|
2. Query decision trees activas
|
|
3. Calcula score: `confidence * keyword_match_ratio`
|
|
4. Selecciona agente com maior score
|
|
5. Regista em telemetria
|
|
6. Incrementa usage_count
|
|
|
|
```python
|
|
# Pseudo-código do context-builder.py
|
|
def select_agent(task_description):
|
|
keywords = extract_keywords(task_description)
|
|
|
|
query = """
|
|
SELECT a.slug, dt.confidence_score, dt.trigger_keywords
|
|
FROM cr_decision_trees dt
|
|
JOIN cr_agents a ON dt.agent_id = a.id
|
|
WHERE dt.status = 'active'
|
|
"""
|
|
|
|
trees = db.execute(query)
|
|
|
|
best_match = None
|
|
best_score = 0
|
|
|
|
for tree in trees:
|
|
match_ratio = calculate_keyword_match(keywords, tree.trigger_keywords)
|
|
score = tree.confidence_score * match_ratio
|
|
|
|
if score > best_score:
|
|
best_score = score
|
|
best_match = tree.agent_slug
|
|
|
|
return best_match or 'dev-helper' # fallback
|
|
```
|
|
|
|
## Output Esperado
|
|
|
|
```
|
|
╔══════════════════════════════════════════════════════════════════════╗
|
|
║ DECISION TREES (5 activas) ║
|
|
╠══════════════════════════════════════════════════════════════════════╣
|
|
║ ID │ Nome │ Agent │ Conf │ Uses ║
|
|
║ 1 │ wordpress-tasks │ wordpress-plugin-dev │ 0.92 │ 156 ║
|
|
║ 2 │ marketing-campaigns │ marketing-planning-exp │ 0.88 │ 134 ║
|
|
║ 3 │ seo-optimization │ seo-specialist │ 0.85 │ 87 ║
|
|
╠══════════════════════════════════════════════════════════════════════╣
|
|
║ Telemetria-based confidence recalibration: ON ║
|
|
╚══════════════════════════════════════════════════════════════════════╝
|
|
```
|