11 KiB
Gestionnaire d'Apprentissage - Documentation d'Implémentation
Vue d'Ensemble
Le module learning_manager.py implémente le gestionnaire d'apprentissage central pour RPA Vision V2. Il gère la progression d'apprentissage, les transitions de mode et le calcul des scores de confiance.
Fonctionnalités Implémentées
1. Classe LearningManager
Initialisation
- ✅ Chargement de la configuration (seuils, pondérations)
- ✅ Initialisation en mode Shadow par défaut
- ✅ Chargement automatique des profils de tâches existants
- ✅ Intégration avec EmbeddingsManager et Logger
Gestion des Profils de Tâches
_load_profiles()
- ✅ Charge tous les profils JSON depuis le répertoire
- ✅ Reconstruit les objets TaskProfile
- ✅ Gestion d'erreurs robuste
_save_profile(task_id)
- ✅ Sauvegarde un profil de tâche en JSON
- ✅ Encodage UTF-8 pour support multilingue
- ✅ Logging des opérations
Observation et Apprentissage
observe(action)
- ✅ Enregistre une observation en mode Shadow
- ✅ Crée automatiquement un profil de tâche si nécessaire
- ✅ Génère un task_id basé sur fenêtre + élément + action
- ✅ Ajoute l'action à la séquence
- ✅ Stocke l'embedding dans FAISS
- ✅ Déclenche transition Shadow → Assist après 5 observations
_generate_task_id(action)
- ✅ Génère un ID unique basé sur le contexte
- ✅ Format:
{fenêtre}_{élément}_{type_action} - ✅ Nettoyage des espaces et conversion en minuscules
Suggestions et Prédictions
suggest_action(context)
- ✅ Génère des suggestions en mode Assisté ou Auto
- ✅ Recherche de similarité dans l'index FAISS
- ✅ Trouve l'action la plus similaire dans l'historique
- ✅ Calcule la confiance combinée (vision + LLM + historique)
- ✅ Retourne None si pas de correspondance
Validation et Corrections
confirm_action(feedback)
- ✅ Traite les retours utilisateur (accept/reject/correct)
- ✅ Met à jour le taux de concordance
- ✅ Gère les corrections avec ajout d'embeddings
- ✅ Déclenche les vérifications de transition de mode
- ✅ Sauvegarde automatique du profil
_update_concordance(task_id, success)
- ✅ Calcul de concordance sur fenêtre glissante (10 dernières exécutions)
- ✅ Stockage dans metadata pour persistance
- ✅ Moyenne mobile pour adaptation progressive
Calcul de Confiance
calculate_confidence(vision_conf, llm_score, task_id)
- ✅ Formule pondérée : 0.6 × vision + 0.3 × llm + 0.1 × historique
- ✅ Normalisation entre 0.0 et 1.0
- ✅ Intégration de la performance historique
_get_historical_performance(task_id)
- ✅ Retourne le taux de concordance comme score historique
- ✅ Valeur par défaut 0.5 pour nouvelles tâches
Évaluation et Métriques
evaluate_task(task_id)
- ✅ Retourne toutes les métriques d'une tâche :
- task_id, task_name, mode
- observation_count, concordance_rate
- confidence_score, correction_count
- correction_rate, last_execution
get_all_tasks()
- ✅ Retourne la liste de toutes les tâches avec métriques
- ✅ Utile pour le tableau de bord
get_task_stats()
- ✅ Statistiques globales :
- Nombre total de tâches
- Répartition par mode (shadow/assist/auto)
- Mode actuel
Transitions de Mode
should_transition_to_auto(task_id)
- ✅ Vérifie les critères Autopilot :
- ≥ 20 observations
- ≥ 95% concordance
- ✅ Retourne booléen
rollback_if_low_confidence(task_id)
- ✅ Rétrograde Auto → Assist si confiance < 90%
- ✅ Logging de la transition avec raison
_check_mode_transitions(task_id)
- ✅ Vérifie toutes les transitions possibles :
- Shadow → Assist (5 observations)
- Assist → Auto (critères remplis)
- Auto → Assist (concordance < 85%)
_transition_mode(task_id, new_mode)
- ✅ Effectue la transition de mode
- ✅ Logging avec contexte (observations, concordance)
- ✅ Sauvegarde automatique du profil
Gestion du Contexte
get_mode()
- ✅ Retourne le mode de la tâche actuelle
- ✅ Fallback vers mode global si pas de tâche
get_current_intent()
- ✅ Retourne l'intention utilisateur du contexte
set_current_task(task_id)
- ✅ Définit la tâche active
set_current_context(context)
- ✅ Définit le contexte actuel
Enregistrement d'Exécution
record_execution(decision)
- ✅ Enregistre l'exécution d'une action
- ✅ Met à jour last_execution
- ✅ Met à jour confidence_score
- ✅ Logging et sauvegarde
Conformité aux Exigences
Exigence 1.2
TANT QUE le Système_RPA fonctionne en Mode_Shadow, LE Système_RPA DOIT enregistrer toutes les interactions utilisateur
✅ Implémenté: La méthode observe() enregistre toutes les actions avec horodatages, fenêtres et positions.
Exigence 1.4
LORSQU'une interaction utilisateur est capturée en Mode_Shadow, LE Système_RPA DOIT générer et stocker des embeddings visuels
✅ Implémenté: Les embeddings sont stockés dans FAISS via embeddings_manager.add_to_index().
Exigence 2.6
LORSQU'un Événement_Correction est enregistré, LE Gestionnaire_Apprentissage DOIT mettre à jour les embeddings visuels
✅ Implémenté: La méthode confirm_action() avec type "correct" ajoute les nouveaux embeddings.
Exigence 3.1
LORSQU'une Séquence_Actions a un Compteur_Observations ≥20 ET un Taux_Concordance ≥95%, proposer transition vers Autopilot
✅ Implémenté: La méthode should_transition_to_auto() vérifie ces critères exacts.
Exigence 3.6
LORSQU'un retour correctif est fourni après une action en Mode_Autopilot, ajuster le Score_Confiance
✅ Implémenté: Les corrections mettent à jour la concordance qui influence le score de confiance.
Exigence 4.1, 4.2
Calculer le delta entre prédiction et réalité, déclencher ré-entraînement si delta > 10 pixels
✅ Préparé: L'infrastructure est en place, sera complété dans l'orchestrateur.
Exigence 4.4
LORSQUE le Score_Confiance tombe en dessous de 90%, faire revenir au Mode_Assisté
✅ Implémenté: La méthode rollback_if_low_confidence() effectue cette vérification.
Exigence 4.5
Notifier l'utilisateur lors des transitions avec raison
✅ Implémenté: Toutes les transitions sont loggées avec raison via log_mode_transition().
Exigence 4.6
Recalculer le Score_Confiance après chaque exécution avec formule 0.6/0.3/0.1
✅ Implémenté: La méthode calculate_confidence() utilise exactement cette formule.
Exigence 6.1
Maintenir des seuils de confiance dynamiques adaptatifs
✅ Implémenté: Les seuils sont configurables et la concordance utilise une fenêtre glissante.
Exigence 6.4
LORSQUE le Taux_Concordance tombe en dessous de 85% sur les 10 dernières exécutions, passer au Mode_Assisté
✅ Implémenté: La méthode _check_mode_transitions() vérifie ce critère.
Exigence 6.6
Suivre le taux d'Événement_Correction et alerter si > 5% sur 20 exécutions
✅ Implémenté: Le correction_rate est calculé dans evaluate_task().
Architecture des Données
TaskProfile
Chaque tâche apprise contient :
- Identification : task_id, task_name
- État : mode, observation_count, last_execution
- Performance : concordance_rate, confidence_score, correction_count
- Sécurité : window_whitelist
- Apprentissage : action_sequence, embeddings
- Métadonnées : metadata (dont recent_results pour concordance)
Persistance
- Format : JSON avec encodage UTF-8
- Emplacement :
data/user_profiles/{task_id}.json - Embeddings : Stockés séparément dans FAISS
- Chargement : Automatique à l'initialisation
Formules et Algorithmes
Score de Confiance
confidence = 0.6 × vision_conf + 0.3 × llm_score + 0.1 × history_score
Taux de Concordance
concordance_rate = succès / total_exécutions (fenêtre de 10)
Taux de Correction
correction_rate = correction_count / observation_count
Critères de Transition
Shadow → Assist
- observation_count ≥ 5
Assist → Auto
- observation_count ≥ 20
- concordance_rate ≥ 0.95
Auto → Assist
- confidence_score < 0.90 OU
- concordance_rate < 0.85
Intégration
Le LearningManager s'intègre avec :
- EmbeddingsManager : Stockage et recherche d'embeddings visuels
- Logger : Journalisation chiffrée de toutes les opérations
- Orchestrator : Boucle cognitive principale (à implémenter)
- GUI : Affichage des métriques et notifications (à implémenter)
Tests
Tests unitaires complets dans tests/test_learning_manager.py :
- ✅ Initialisation
- ✅ Observation d'actions
- ✅ Transitions de mode
- ✅ Calcul de confiance
- ✅ Confirmations et corrections
- ✅ Évaluation et métriques
- ✅ Sauvegarde et chargement
Utilisation
from geniusia2.core.learning_manager import LearningManager
from geniusia2.core.embeddings_manager import EmbeddingsManager
from geniusia2.core.logger import Logger
from geniusia2.core.models import Action
from datetime import datetime
import numpy as np
# Initialiser les composants
embeddings_manager = EmbeddingsManager()
logger = Logger()
config = {"thresholds": {...}}
learning_manager = LearningManager(
embeddings_manager=embeddings_manager,
logger=logger,
config=config
)
# Observer une action
action = Action(
action_type="click",
target_element="valider_button",
bbox=(100, 100, 50, 30),
confidence=0.9,
embedding=np.random.rand(512),
timestamp=datetime.now(),
window_title="Application"
)
learning_manager.observe(action)
# Obtenir des statistiques
stats = learning_manager.get_task_stats()
print(f"Total tâches: {stats['total_tasks']}")
print(f"Mode actuel: {stats['current_mode']}")
Statut
✅ Tâche 7.1 COMPLÈTE
Toutes les fonctionnalités requises sont implémentées :
- ✅ Classe LearningManager avec initialisation
- ✅ Méthode observe() pour mode Shadow
- ✅ Méthode suggest_action() pour mode Assisté
- ✅ Méthode confirm_action() pour validation/correction
- ✅ Méthode calculate_confidence() avec formule 0.6/0.3/0.1
- ✅ Méthode evaluate_task() pour métriques
- ✅ Méthode should_transition_to_auto() avec critères
- ✅ Méthode rollback_if_low_confidence()
- ✅ Méthodes get_current_intent() et record_execution()
- ✅ Gestion des seuils dynamiques adaptatifs
- ✅ Tests unitaires complets
Prochaines Étapes
La tâche suivante est Tâche 8 : Implémenter l'orchestrateur (boucle cognitive) qui utilisera le LearningManager pour :
- Coordonner le cycle Observer → Réfléchir → Agir
- Gérer les transitions entre modes
- Intégrer vision, LLM et apprentissage