- Frontend v4 accessible sur réseau local (192.168.1.40) - Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard) - Ollama GPU fonctionnel - Self-healing interactif - Dashboard confiance Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.0 KiB
4.0 KiB
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
-
core/learning/target_memory_store.py✅TargetMemoryStore: Gestionnaire principal de mémoire persistanteTargetFingerprint: Empreinte d'une cible UI résolueResolutionEvent: Événement de résolution (succès/échec)
-
core/execution/screen_signature.py✅- Génération de signatures d'écran stables
- Modes : layout, content, hybrid
- Résistant aux petits changements UI
-
Intégration dans
TargetResolver✅- Lookup depuis mémoire persistante (priorité haute)
- Enregistrement des succès/échecs
- Configuration via paramètres d'initialisation
-
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
# 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
# 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
-
Résolution de cible →
TargetResolver.resolve_target()- Lookup mémoire persistante (priorité 1)
- Résolution classique si pas trouvé
-
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
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
# 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 🚀