Initial commit
This commit is contained in:
214
docs/archive/old-summaries/FIX_WORKFLOW_MATCHING_CONFIDENCE.md
Normal file
214
docs/archive/old-summaries/FIX_WORKFLOW_MATCHING_CONFIDENCE.md
Normal file
@@ -0,0 +1,214 @@
|
||||
# Fix: Confiance de Matching Trop Faible (38%)
|
||||
|
||||
**Date**: 2025-11-19
|
||||
**Problème**: Workflows détectés mais confiance à 0.38 au lieu de > 0.80
|
||||
**Cause**: Incompatibilité des types d'actions (`mouse_click` vs `click`)
|
||||
**Statut**: ✓ CORRIGÉ
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Problème Identifié
|
||||
|
||||
### Symptômes dans les Logs
|
||||
```json
|
||||
{"action": "workflows_matched", "num_matches": 7, "best_confidence": 0.38}
|
||||
```
|
||||
|
||||
- ✓ 7 workflows détectés
|
||||
- ✗ Confiance à 0.38 (38%)
|
||||
- ✗ Seuil requis : 0.80 (80%)
|
||||
- ✗ Aucune suggestion créée
|
||||
|
||||
### Analyse des Workflows
|
||||
|
||||
Les workflows enregistrés utilisent :
|
||||
```json
|
||||
{
|
||||
"action_type": "mouse_click"
|
||||
}
|
||||
```
|
||||
|
||||
Mais les actions capturées utilisent probablement :
|
||||
```json
|
||||
{
|
||||
"action_type": "click"
|
||||
}
|
||||
```
|
||||
|
||||
### Impact
|
||||
|
||||
Le WorkflowMatcher compare les types d'actions de manière stricte :
|
||||
```python
|
||||
action_type_match = (
|
||||
action.get("action_type") == step.get("action_type")
|
||||
)
|
||||
```
|
||||
|
||||
Résultat : `"mouse_click" != "click"` → Pas de match sur le type → Score réduit de 40%
|
||||
|
||||
---
|
||||
|
||||
## ✅ Solution Implémentée
|
||||
|
||||
### Normalisation des Types d'Actions
|
||||
|
||||
Ajout d'une méthode `_normalize_action_type()` dans WorkflowMatcher :
|
||||
|
||||
```python
|
||||
def _normalize_action_type(self, action_type: str) -> str:
|
||||
"""Normalise les types d'actions pour le matching."""
|
||||
type_mapping = {
|
||||
"mouse_click": "click",
|
||||
"mouse_move": "move",
|
||||
"key_press": "type",
|
||||
"keyboard": "type",
|
||||
}
|
||||
|
||||
return type_mapping.get(action_type, action_type)
|
||||
```
|
||||
|
||||
### Modification de _calculate_step_similarity()
|
||||
|
||||
```python
|
||||
# Avant
|
||||
action_type_match = (
|
||||
action.get("action_type") == step.get("action_type")
|
||||
)
|
||||
|
||||
# Après
|
||||
action_type = self._normalize_action_type(action.get("action_type", ""))
|
||||
step_type = self._normalize_action_type(step.get("action_type", ""))
|
||||
|
||||
action_type_match = (action_type == step_type)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Test de la Correction
|
||||
|
||||
### Avant
|
||||
- `"mouse_click"` vs `"click"` → Pas de match → Score -40%
|
||||
- Confiance finale : 0.38 (38%)
|
||||
|
||||
### Après
|
||||
- `"mouse_click"` → normalisé → `"click"`
|
||||
- `"click"` → normalisé → `"click"`
|
||||
- Match réussi → Score +40%
|
||||
- Confiance attendue : ~0.78-0.85 (78-85%)
|
||||
|
||||
---
|
||||
|
||||
## 📊 Calcul du Score
|
||||
|
||||
### Poids des Critères
|
||||
- Type d'action : 40%
|
||||
- Position : 30%
|
||||
- Fenêtre : 30%
|
||||
|
||||
### Exemple de Calcul
|
||||
|
||||
**Avant normalisation** :
|
||||
- Type : 0% (pas de match)
|
||||
- Position : 30% (match avec tolérance)
|
||||
- Fenêtre : 30% (match)
|
||||
- **Total : 60%** → Avec bonus : ~0.62
|
||||
|
||||
Mais si plusieurs étapes ne matchent pas bien : **0.38**
|
||||
|
||||
**Après normalisation** :
|
||||
- Type : 40% (match !)
|
||||
- Position : 30% (match avec tolérance)
|
||||
- Fenêtre : 30% (match)
|
||||
- **Total : 100%** → Avec bonus : ~1.0
|
||||
|
||||
Score réaliste avec petites variations de position : **0.80-0.90**
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Re-test
|
||||
|
||||
```bash
|
||||
# Relancer en mode assist
|
||||
python3 geniusia2/main.py --mode assist --headless
|
||||
|
||||
# Suivre les logs
|
||||
tail -f geniusia2/data/logs/logs_$(date +%Y-%m-%d).json | grep -E "confidence|suggestion"
|
||||
```
|
||||
|
||||
### Résultats Attendus
|
||||
|
||||
```json
|
||||
{"action": "workflows_matched", "num_matches": 7, "best_confidence": 0.85}
|
||||
{"action": "workflow_suggestion_created", "workflow_id": "...", "confidence": 0.85}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 Types d'Actions Normalisés
|
||||
|
||||
| Type Original | Type Normalisé |
|
||||
|---------------|----------------|
|
||||
| `mouse_click` | `click` |
|
||||
| `mouse_move` | `move` |
|
||||
| `key_press` | `type` |
|
||||
| `keyboard` | `type` |
|
||||
| Autres | Inchangé |
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Vérification
|
||||
|
||||
### Commandes de Debug
|
||||
|
||||
```bash
|
||||
# Analyser les workflows
|
||||
python3 debug_workflow_matching.py
|
||||
|
||||
# Vérifier les types d'actions dans les logs
|
||||
tail -100 geniusia2/data/logs/logs_*.json | grep action_type
|
||||
|
||||
# Tester le matcher directement
|
||||
python3 test_workflow_matcher.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Autres Problèmes Détectés
|
||||
|
||||
### Erreur d'Embedding (Non Bloquante)
|
||||
|
||||
```json
|
||||
{"action": "context_capture_error", "error": "'VisionAnalysis' object has no attribute 'generate_embedding'"}
|
||||
```
|
||||
|
||||
**Impact** : Empêche les suggestions d'actions classiques (FAISS), mais pas les suggestions de workflows.
|
||||
|
||||
**Solution** : À corriger séparément si besoin des suggestions classiques.
|
||||
|
||||
---
|
||||
|
||||
## ✅ Checklist de Validation
|
||||
|
||||
Après le fix, vérifie que :
|
||||
|
||||
- [ ] La confiance est > 0.80
|
||||
- [ ] Des suggestions sont créées
|
||||
- [ ] Les logs montrent `workflow_suggestion_created`
|
||||
- [ ] Le type d'action est bien normalisé
|
||||
|
||||
---
|
||||
|
||||
## 📚 Fichiers Modifiés
|
||||
|
||||
- `geniusia2/core/workflow_matcher.py` - Ajout normalisation des types
|
||||
|
||||
## 📚 Fichiers Créés
|
||||
|
||||
- `debug_workflow_matching.py` - Script de diagnostic
|
||||
- `FIX_WORKFLOW_MATCHING_CONFIDENCE.md` - Cette documentation
|
||||
|
||||
---
|
||||
|
||||
**Fix appliqué**: 2025-11-19
|
||||
**Testé**: À re-tester
|
||||
**Statut**: ✓ Prêt pour validation
|
||||
Reference in New Issue
Block a user