# Fiche #18 - Apprentissage persistant "mix" (JSONL + SQLite) ✅ **Auteur**: Dom, Alice Kiro **Date**: 22 décembre 2025 **Statut**: COMPLET ✅ ## 🎯 **Objectif** Implémenter un système d'apprentissage persistant pour la résolution de cibles UI utilisant une architecture "mix" : - **JSONL** : Audit trail append-only pour tous les événements de résolution - **SQLite** : Lookup table rapide pour retrouver les fingerprints appris ## 🏗️ **Architecture implémentée** ### **Composants créés** 1. **`core/learning/target_memory_store.py`** ✅ - `TargetMemoryStore` : Gestionnaire principal de mémoire persistante - `TargetFingerprint` : Empreinte d'une cible UI résolue - `ResolutionEvent` : Événement de résolution (succès/échec) 2. **`core/execution/screen_signature.py`** ✅ - Génération de signatures d'écran stables - Modes : layout, content, hybrid - Résistant aux petits changements UI 3. **Intégration dans `TargetResolver`** ✅ - Lookup depuis mémoire persistante (priorité haute) - Enregistrement des succès/échecs - Configuration via paramètres d'initialisation 4. **Intégration dans `ActionExecutor`** ✅ - Hooks après validation post-conditions - Enregistrement automatique des apprentissages ### **Structure de données** ``` data/learning/ ├── events/YYYY-MM-DD/ │ └── resolution_events.jsonl # Audit trail └── target_memory.db # Lookup SQLite ``` ## 🔧 **Fonctionnalités implémentées** ### **1. Enregistrement des résolutions** ```python # Succès (après post-conditions OK) store.record_success( screen_signature="abc123def456", target_spec=target_spec, fingerprint=fingerprint, strategy_used="by_role", confidence=0.95 ) # Échec (après post-conditions KO) store.record_failure( screen_signature="abc123def456", target_spec=target_spec, error_message="Target not found" ) ``` ### **2. Lookup intelligent** ```python # Recherche avec critères de fiabilité fingerprint = store.lookup( screen_signature="abc123def456", target_spec=target_spec, min_success_count=2, # Minimum 2 succès max_fail_ratio=0.3 # Maximum 30% d'échecs ) ``` ## 🔄 **Intégration dans le pipeline d'exécution** ### **Flux d'apprentissage** 1. **Résolution de cible** → `TargetResolver.resolve_target()` - Lookup mémoire persistante (priorité 1) - Résolution classique si pas trouvé 2. **Exécution d'action** → `ActionExecutor.execute_edge()` - Validation post-conditions - **Si succès** → `record_resolution_success()` - **Si échec** → `record_resolution_failure()` ## 📊 **Métriques et monitoring** ### **Statistiques disponibles** ```python stats = store.get_stats() # { # "total_entries": 150, # "total_successes": 420, # "total_failures": 35, # "overall_confidence": 0.887, # "jsonl_files_count": 5, # "jsonl_total_size_mb": 2.3 # } ``` ## 🧪 **Tests implémentés** ### **Tests unitaires** ✅ - `tests/unit/test_target_memory_store.py` - Couverture complète des fonctionnalités - Tests de performance et concurrence ### **Démonstration** ✅ - `demo_persistent_learning.py` - Scénarios d'usage complets ## 🚀 **Utilisation** ### **Configuration de base** ```python # TargetResolver avec apprentissage persistant resolver = TargetResolver( enable_persistent_learning=True, persistent_memory_path="data/learning" ) # ActionExecutor avec resolver intégré executor = ActionExecutor( target_resolver=resolver, verify_postconditions=True # Nécessaire pour l'apprentissage ) ``` ## ✅ **STATUT FINAL : COMPLET** Le système d'apprentissage persistant "mix" est **entièrement implémenté et opérationnel**. **Livrables** : - ✅ Code source complet et testé - ✅ Tests unitaires avec couverture complète - ✅ Démonstration fonctionnelle - ✅ Documentation technique détaillée - ✅ Intégration dans le pipeline d'exécution **Prêt pour utilisation en production** 🚀