Files
rpa_vision_v3/FICHE_18_APPRENTISSAGE_PERSISTANT_COMPLETE.md
Dom a27b74cf22 v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution
- 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>
2026-01-29 11:23:51 +01:00

148 lines
4.0 KiB
Markdown

# 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** 🚀