- 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>
148 lines
4.0 KiB
Markdown
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** 🚀 |