Initial commit
This commit is contained in:
269
docs/implementation/MODE_ASSISTE_CONCEPTION.md
Normal file
269
docs/implementation/MODE_ASSISTE_CONCEPTION.md
Normal file
@@ -0,0 +1,269 @@
|
||||
# 🤝 Mode Assisté - Conception
|
||||
|
||||
## 🎯 Objectif
|
||||
|
||||
Intégrer le système de rejeu dans l'Orchestrator pour fournir des **suggestions en temps réel** basées sur les tâches apprises.
|
||||
|
||||
## 🔄 Flux du Mode Assisté
|
||||
|
||||
```
|
||||
1. Utilisateur effectue une action
|
||||
↓
|
||||
2. EventCapture détecte l'action
|
||||
↓
|
||||
3. Orchestrator capture le contexte (screenshot, fenêtre)
|
||||
↓
|
||||
4. Recherche de tâches similaires dans FAISS
|
||||
↓
|
||||
5. Si correspondance trouvée (similarité > 0.75)
|
||||
↓
|
||||
6. Afficher suggestion visuelle
|
||||
↓
|
||||
7. Attendre validation utilisateur
|
||||
├─ Entrée → Exécuter l'action suggérée
|
||||
├─ Échap → Ignorer
|
||||
└─ Alt+C → Corriger
|
||||
↓
|
||||
8. Mettre à jour les scores de confiance
|
||||
```
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
### Composants à Modifier
|
||||
|
||||
1. **Orchestrator** (`orchestrator.py`)
|
||||
- Ajouter `TaskReplayEngine`
|
||||
- Ajouter méthode `_suggest_next_action()`
|
||||
- Ajouter méthode `_handle_suggestion_response()`
|
||||
|
||||
2. **GUI** (`minimal_gui.py`)
|
||||
- Ajouter overlay de suggestion
|
||||
- Ajouter gestion des touches (Entrée/Échap/Alt+C)
|
||||
|
||||
3. **LearningManager** (`learning_manager.py`)
|
||||
- Ajouter méthode `find_similar_tasks()`
|
||||
- Améliorer `suggest_action()`
|
||||
|
||||
### Nouveaux Composants
|
||||
|
||||
1. **SuggestionManager** (nouveau)
|
||||
- Gère les suggestions en temps réel
|
||||
- Calcule les scores de confiance
|
||||
- Gère les timeouts
|
||||
|
||||
## 📝 Implémentation
|
||||
|
||||
### Étape 1 : Intégrer TaskReplayEngine dans Orchestrator
|
||||
|
||||
```python
|
||||
from .task_replay import TaskReplayEngine
|
||||
|
||||
class Orchestrator:
|
||||
def __init__(self, ...):
|
||||
# ... code existant ...
|
||||
|
||||
# Moteur de rejeu pour suggestions
|
||||
self.replay_engine = TaskReplayEngine(
|
||||
learning_manager,
|
||||
embeddings_manager,
|
||||
vision_utils,
|
||||
input_utils,
|
||||
logger,
|
||||
config
|
||||
)
|
||||
```
|
||||
|
||||
### Étape 2 : Ajouter la Détection de Contexte
|
||||
|
||||
```python
|
||||
def _capture_context(self) -> Dict[str, Any]:
|
||||
"""Capture le contexte actuel pour suggestions."""
|
||||
screenshot = capture_screen()
|
||||
window = get_active_window()
|
||||
|
||||
# Générer embedding du contexte
|
||||
embedding = self.vision_analyzer.generate_embedding(screenshot)
|
||||
|
||||
return {
|
||||
"screenshot": screenshot,
|
||||
"window": window,
|
||||
"embedding": embedding,
|
||||
"timestamp": datetime.now()
|
||||
}
|
||||
```
|
||||
|
||||
### Étape 3 : Recherche de Tâches Similaires
|
||||
|
||||
```python
|
||||
def _find_similar_tasks(self, context: Dict[str, Any]) -> List[Dict]:
|
||||
"""Recherche les tâches similaires au contexte actuel."""
|
||||
embedding = context["embedding"]
|
||||
|
||||
# Rechercher dans FAISS
|
||||
results = self.learning_manager.embeddings_manager.search_similar(
|
||||
embedding,
|
||||
k=3
|
||||
)
|
||||
|
||||
# Filtrer par seuil de similarité
|
||||
similar_tasks = [
|
||||
r for r in results
|
||||
if r["similarity"] >= 0.75
|
||||
]
|
||||
|
||||
return similar_tasks
|
||||
```
|
||||
|
||||
### Étape 4 : Générer et Afficher Suggestion
|
||||
|
||||
```python
|
||||
def _suggest_next_action(self, context: Dict[str, Any]):
|
||||
"""Génère et affiche une suggestion d'action."""
|
||||
# Rechercher tâches similaires
|
||||
similar_tasks = self._find_similar_tasks(context)
|
||||
|
||||
if not similar_tasks:
|
||||
return
|
||||
|
||||
# Prendre la meilleure correspondance
|
||||
best_match = similar_tasks[0]
|
||||
task_id = best_match["metadata"]["task_id"]
|
||||
|
||||
# Charger la tâche
|
||||
task = self.learning_manager.load_task(task_id)
|
||||
|
||||
if not task:
|
||||
return
|
||||
|
||||
# Obtenir la prochaine action suggérée
|
||||
suggestion = self.learning_manager.suggest_action(context)
|
||||
|
||||
if suggestion and suggestion["confidence"] >= 0.75:
|
||||
# Afficher dans la GUI
|
||||
if self.gui:
|
||||
self.gui.show_suggestion(suggestion)
|
||||
```
|
||||
|
||||
### Étape 5 : Gestion des Réponses
|
||||
|
||||
```python
|
||||
def _handle_suggestion_response(self, response: str, suggestion: Dict):
|
||||
"""Gère la réponse de l'utilisateur à une suggestion."""
|
||||
if response == "accept":
|
||||
# Exécuter l'action suggérée
|
||||
self._execute_suggested_action(suggestion)
|
||||
|
||||
# Mettre à jour la confiance (positif)
|
||||
self.learning_manager.confirm_action({
|
||||
"type": "accept",
|
||||
"task_id": suggestion["task_id"]
|
||||
})
|
||||
|
||||
elif response == "reject":
|
||||
# Ne rien faire
|
||||
|
||||
# Mettre à jour la confiance (négatif)
|
||||
self.learning_manager.confirm_action({
|
||||
"type": "reject",
|
||||
"task_id": suggestion["task_id"]
|
||||
})
|
||||
|
||||
elif response == "correct":
|
||||
# Ouvrir dialogue de correction
|
||||
if self.gui:
|
||||
self.gui.show_correction_dialog(suggestion)
|
||||
```
|
||||
|
||||
## 🎨 Interface Utilisateur
|
||||
|
||||
### Overlay de Suggestion
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ 💡 Suggestion │
|
||||
│ │
|
||||
│ Action : Clic sur "Enregistrer" │
|
||||
│ Confiance : 89% │
|
||||
│ │
|
||||
│ [Entrée] Accepter │
|
||||
│ [Échap] Refuser │
|
||||
│ [Alt+C] Corriger │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Touches Clavier
|
||||
|
||||
| Touche | Action |
|
||||
|--------|--------|
|
||||
| **Entrée** | Accepter et exécuter |
|
||||
| **Échap** | Refuser |
|
||||
| **Alt+C** | Ouvrir dialogue de correction |
|
||||
|
||||
## 📊 Métriques
|
||||
|
||||
### Scores de Confiance
|
||||
|
||||
```python
|
||||
confidence = (
|
||||
0.6 * vision_similarity + # Similarité visuelle CLIP
|
||||
0.3 * llm_score + # Score LLM
|
||||
0.1 * historical_success # Taux de succès historique
|
||||
)
|
||||
```
|
||||
|
||||
### Seuils
|
||||
|
||||
- **Afficher suggestion** : confidence >= 0.75
|
||||
- **Exécution auto** : confidence >= 0.95 (Mode Autopilot)
|
||||
- **Rollback** : confidence < 0.85 (retour en Mode Assisté)
|
||||
|
||||
## 🔄 Transitions de Mode
|
||||
|
||||
```
|
||||
Shadow (observation)
|
||||
↓ (5+ observations)
|
||||
Assisté (suggestions)
|
||||
↓ (20+ obs + 95% concordance)
|
||||
Autopilot (automatique)
|
||||
↓ (confiance < 85%)
|
||||
Assisté (retour)
|
||||
```
|
||||
|
||||
## 🧪 Tests
|
||||
|
||||
### Test 1 : Suggestion Simple
|
||||
|
||||
1. Apprendre une tâche (3x clic sur "Enregistrer")
|
||||
2. Refaire l'action une fois
|
||||
3. Vérifier qu'une suggestion apparaît
|
||||
|
||||
### Test 2 : Acceptation
|
||||
|
||||
1. Suggestion affichée
|
||||
2. Appuyer sur Entrée
|
||||
3. Vérifier que l'action est exécutée
|
||||
|
||||
### Test 3 : Refus
|
||||
|
||||
1. Suggestion affichée
|
||||
2. Appuyer sur Échap
|
||||
3. Vérifier que rien n'est exécuté
|
||||
|
||||
## 📝 Prochaines Étapes
|
||||
|
||||
1. ✅ Créer `SuggestionManager`
|
||||
2. ✅ Modifier `Orchestrator`
|
||||
3. ✅ Ajouter overlay dans GUI
|
||||
4. ✅ Implémenter gestion des touches
|
||||
5. ✅ Tester le flux complet
|
||||
|
||||
## 🎯 Résultat Attendu
|
||||
|
||||
Un système qui :
|
||||
- Observe tes actions
|
||||
- Reconnaît les patterns
|
||||
- Suggère l'action suivante
|
||||
- Apprend de tes choix
|
||||
- S'améliore avec le temps
|
||||
|
||||
**Le Mode Assisté sera fonctionnel ! 🚀**
|
||||
Reference in New Issue
Block a user