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>
This commit is contained in:
329
docs/guides/SELF_HEALING_QUICKSTART.md
Normal file
329
docs/guides/SELF_HEALING_QUICKSTART.md
Normal file
@@ -0,0 +1,329 @@
|
||||
# Self-Healing Workflows - Quick Start Guide 🚀
|
||||
|
||||
## Installation
|
||||
|
||||
The self-healing system is already integrated into RPA Vision V3. No additional installation required!
|
||||
|
||||
## Basic Usage
|
||||
|
||||
### 1. Enable Self-Healing
|
||||
|
||||
```python
|
||||
from core.healing.execution_integration import get_self_healing_integration
|
||||
from pathlib import Path
|
||||
|
||||
# Initialize with default settings
|
||||
healing = get_self_healing_integration(
|
||||
storage_path=Path('data/healing'),
|
||||
log_path=Path('logs/healing'),
|
||||
enabled=True
|
||||
)
|
||||
```
|
||||
|
||||
### 2. Integrate with Execution Loop
|
||||
|
||||
The self-healing system automatically handles failures during workflow execution:
|
||||
|
||||
```python
|
||||
# In your execution loop, when an action fails:
|
||||
if execution_result.status != ExecutionStatus.SUCCESS:
|
||||
# Attempt recovery
|
||||
recovery = healing.handle_execution_failure(
|
||||
action_info={
|
||||
'action': 'click',
|
||||
'target': 'Submit Button',
|
||||
'element_type': 'button'
|
||||
},
|
||||
execution_result=execution_result,
|
||||
workflow_id='my_workflow',
|
||||
node_id='node_123',
|
||||
screenshot_path='/tmp/screenshot.png',
|
||||
attempt_count=1
|
||||
)
|
||||
|
||||
if recovery and recovery.success:
|
||||
print(f"✅ Recovered using {recovery.strategy_used}")
|
||||
print(f" Confidence: {recovery.confidence_score:.2f}")
|
||||
print(f" New element: {recovery.new_element}")
|
||||
|
||||
# Update workflow with learned pattern
|
||||
healing.update_workflow_from_recovery(
|
||||
workflow_id='my_workflow',
|
||||
node_id='node_123',
|
||||
edge_id='edge_456',
|
||||
recovery_result=recovery
|
||||
)
|
||||
else:
|
||||
print("❌ Recovery failed, manual intervention needed")
|
||||
```
|
||||
|
||||
### 3. Monitor Performance
|
||||
|
||||
```python
|
||||
# Get statistics
|
||||
stats = healing.get_statistics()
|
||||
print(f"Total attempts: {stats['total_attempts']}")
|
||||
print(f"Success rate: {stats['successful_recoveries'] / stats['total_attempts'] * 100:.1f}%")
|
||||
print(f"Time saved: {stats['time_saved_hours']:.1f} hours")
|
||||
|
||||
# Get insights
|
||||
insights = healing.get_insights()
|
||||
for insight in insights:
|
||||
print(f"💡 {insight}")
|
||||
|
||||
# Check for alerts
|
||||
alerts = healing.check_alerts()
|
||||
for alert in alerts:
|
||||
if alert['severity'] == 'high':
|
||||
print(f"⚠️ {alert['message']}")
|
||||
```
|
||||
|
||||
## Recovery Strategies
|
||||
|
||||
The system uses 4 intelligent strategies:
|
||||
|
||||
### 1. Semantic Variants
|
||||
Finds alternative text for UI elements:
|
||||
- "Submit" → "Send" → "OK" → "Confirm"
|
||||
- Supports English and French
|
||||
- Best for: Button text changes
|
||||
|
||||
### 2. Spatial Fallback
|
||||
Searches in expanded areas around original position:
|
||||
- Progressively expands: 50px → 100px → 200px → 400px
|
||||
- Best for: Elements that moved slightly
|
||||
|
||||
### 3. Timing Adaptation
|
||||
Adjusts wait times based on performance:
|
||||
- Increases timeout by 1.5x on failure
|
||||
- Learns optimal timing per element
|
||||
- Best for: Slow-loading pages
|
||||
|
||||
### 4. Format Transformation
|
||||
Adapts input formats:
|
||||
- Date formats (8 variations)
|
||||
- Phone number formats
|
||||
- Text truncation
|
||||
- Best for: Validation errors
|
||||
|
||||
## Configuration
|
||||
|
||||
### Adjust Recovery Time Limits
|
||||
|
||||
```python
|
||||
# Default is 30 seconds
|
||||
healing.healing_engine.max_recovery_time = 60.0
|
||||
```
|
||||
|
||||
### Set Confidence Thresholds
|
||||
|
||||
```python
|
||||
# When creating recovery context
|
||||
context = RecoveryContext(
|
||||
# ... other params ...
|
||||
confidence_threshold=0.8, # Higher = more conservative
|
||||
)
|
||||
```
|
||||
|
||||
### Configure Pattern Pruning
|
||||
|
||||
```python
|
||||
# Prune old patterns monthly
|
||||
healing.prune_patterns(
|
||||
max_age_days=90, # Keep patterns for 90 days
|
||||
min_confidence=0.3 # Remove low-confidence patterns
|
||||
)
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
### Run Unit Tests
|
||||
```bash
|
||||
pytest tests/unit/test_self_healing.py -v
|
||||
```
|
||||
|
||||
### Run Property Tests
|
||||
```bash
|
||||
pytest tests/property/test_self_healing_properties.py -v
|
||||
```
|
||||
|
||||
### Test Specific Strategy
|
||||
```python
|
||||
from core.healing.strategies import SemanticVariantStrategy
|
||||
from core.healing.models import RecoveryContext
|
||||
|
||||
strategy = SemanticVariantStrategy()
|
||||
context = RecoveryContext(
|
||||
original_action='click',
|
||||
target_element='Submit',
|
||||
failure_reason='element_not_found',
|
||||
screenshot_path='/tmp/test.png',
|
||||
workflow_id='test',
|
||||
node_id='node1',
|
||||
attempt_count=1
|
||||
)
|
||||
|
||||
result = strategy.attempt_recovery(context)
|
||||
print(f"Success: {result.success}")
|
||||
print(f"New element: {result.new_element}")
|
||||
```
|
||||
|
||||
## Advanced Features
|
||||
|
||||
### Get Recovery Suggestions
|
||||
|
||||
```python
|
||||
# Get suggestions before attempting recovery
|
||||
suggestions = healing.get_recovery_suggestions(
|
||||
action_info={'action': 'click', 'target': 'Submit'},
|
||||
workflow_id='my_workflow',
|
||||
node_id='node_123',
|
||||
screenshot_path='/tmp/screenshot.png'
|
||||
)
|
||||
|
||||
for suggestion in suggestions:
|
||||
print(f"{suggestion.strategy}: {suggestion.confidence:.2f}")
|
||||
print(f" {suggestion.description}")
|
||||
print(f" Estimated time: {suggestion.estimated_time}s")
|
||||
```
|
||||
|
||||
### Manual Pattern Creation
|
||||
|
||||
```python
|
||||
from core.healing.models import RecoveryPattern
|
||||
from datetime import datetime
|
||||
|
||||
# Create a pattern manually
|
||||
pattern = RecoveryPattern(
|
||||
pattern_id='custom_001',
|
||||
original_failure='element_not_found',
|
||||
recovery_strategy='semantic_variant',
|
||||
success_count=10,
|
||||
failure_count=1,
|
||||
confidence_score=0.9,
|
||||
context_metadata={
|
||||
'original_action': 'click',
|
||||
'element_type': 'button'
|
||||
},
|
||||
created_at=datetime.now(),
|
||||
last_used=datetime.now()
|
||||
)
|
||||
|
||||
healing.healing_engine.learning_repo.patterns[pattern.pattern_id] = pattern
|
||||
```
|
||||
|
||||
### Export/Import Patterns
|
||||
|
||||
```python
|
||||
# Export patterns
|
||||
patterns = healing.healing_engine.learning_repo.get_all_patterns()
|
||||
import json
|
||||
with open('patterns_backup.json', 'w') as f:
|
||||
json.dump([p.to_dict() for p in patterns], f, indent=2)
|
||||
|
||||
# Import patterns
|
||||
with open('patterns_backup.json', 'r') as f:
|
||||
pattern_dicts = json.load(f)
|
||||
for p_dict in pattern_dicts:
|
||||
pattern = RecoveryPattern.from_dict(p_dict)
|
||||
healing.healing_engine.learning_repo.patterns[pattern.pattern_id] = pattern
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### 1. Start with Supervised Mode
|
||||
- Enable self-healing but review recoveries
|
||||
- Build confidence in the system
|
||||
- Gradually move to automatic mode
|
||||
|
||||
### 2. Monitor Regularly
|
||||
- Check statistics weekly
|
||||
- Review alerts daily
|
||||
- Prune patterns monthly
|
||||
|
||||
### 3. Provide Good Context
|
||||
- Include element_type in metadata
|
||||
- Provide accurate failure reasons
|
||||
- Include input values when relevant
|
||||
|
||||
### 4. Handle Low Confidence
|
||||
```python
|
||||
if recovery and recovery.requires_user_input:
|
||||
# Ask user for guidance
|
||||
user_choice = ask_user_for_recovery_choice(recovery)
|
||||
# Learn from user's choice
|
||||
# ...
|
||||
```
|
||||
|
||||
### 5. Update Workflows
|
||||
- Always update workflows after successful recovery
|
||||
- This prevents the same failure in the future
|
||||
- Keeps workflows up-to-date with UI changes
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Recovery Always Fails
|
||||
- Check confidence threshold (might be too high)
|
||||
- Verify screenshot quality
|
||||
- Check if strategies can handle the failure type
|
||||
|
||||
### Patterns Not Reused
|
||||
- Verify pattern matching criteria
|
||||
- Check if patterns are being pruned too aggressively
|
||||
- Ensure metadata is consistent
|
||||
|
||||
### Slow Recovery
|
||||
- Reduce max_recovery_time
|
||||
- Disable slow strategies for specific contexts
|
||||
- Use parallel execution (coming soon)
|
||||
|
||||
## Examples
|
||||
|
||||
### Example 1: Button Text Changed
|
||||
```python
|
||||
# Original: "Submit"
|
||||
# New: "Send"
|
||||
# Strategy: Semantic Variant
|
||||
# Result: ✅ Automatically finds "Send" button
|
||||
```
|
||||
|
||||
### Example 2: Element Moved
|
||||
```python
|
||||
# Original position: (100, 200)
|
||||
# New position: (120, 210)
|
||||
# Strategy: Spatial Fallback
|
||||
# Result: ✅ Finds element within 50px radius
|
||||
```
|
||||
|
||||
### Example 3: Slow Page Load
|
||||
```python
|
||||
# Original timeout: 5s
|
||||
# Actual load time: 8s
|
||||
# Strategy: Timing Adaptation
|
||||
# Result: ✅ Increases timeout to 7.5s
|
||||
```
|
||||
|
||||
### Example 4: Date Format Changed
|
||||
```python
|
||||
# Original: "2024-11-30"
|
||||
# Required: "30/11/2024"
|
||||
# Strategy: Format Transformation
|
||||
# Result: ✅ Converts to DD/MM/YYYY format
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. **Integrate with your execution loop** - Add failure handling
|
||||
2. **Monitor for a week** - Collect statistics and patterns
|
||||
3. **Review insights** - Identify common failure patterns
|
||||
4. **Optimize workflows** - Update based on learned patterns
|
||||
5. **Enable automatic mode** - Let the system handle recoveries
|
||||
|
||||
## Support
|
||||
|
||||
For issues or questions:
|
||||
- Check logs in `logs/healing/recovery.log`
|
||||
- Review metrics in `data/healing/metrics.json`
|
||||
- Run diagnostics: `healing.get_statistics()`
|
||||
|
||||
Happy self-healing! 🎉
|
||||
Reference in New Issue
Block a user