Adaptive Learning¶
System-level learning that improves AI responses over time based on user feedback and acceptance patterns.
Overview¶
Empathy Framework's Adaptive Learning system learns from:
- User feedback (thumbs up/down, corrections)
- Acceptance patterns (which suggestions users accept)
- Context evolution (how user needs change over time)
- Team patterns (shared learnings across users)
This results in +28% suggestion acceptance rate improvement over time.
How It Works¶
┌─────────────────────────────────────────────────────────────┐
│ User Interaction │
└─────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Capture Feedback │
│ • Explicit: Thumbs up/down, corrections │
│ • Implicit: Acceptance rate, usage time │
└─────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Update User Profile │
│ • Preferences: Code style, verbosity, tools │
│ • Context: Domain knowledge, project familiarity │
│ • Patterns: Common workflows, frequent tasks │
└─────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Adjust Future Responses │
│ • Personalized suggestions │
│ • Contextually appropriate verbosity │
│ • Domain-specific recommendations │
└─────────────────────────────────────────────────────────────┘
Configuration¶
Enable Adaptive Learning¶
from empathy_os import EmpathyOS
empathy = EmpathyOS(
user_id="developer_123",
target_level=4, # Anticipatory intelligence
enable_adaptive_learning=True, # Learn from interactions
learning_rate=0.1, # How quickly to adapt (0.0-1.0)
confidence_threshold=0.75
)
Learning Parameters¶
| Parameter | Default | Description |
|---|---|---|
learning_rate |
0.1 | Speed of adaptation (higher = faster) |
confidence_threshold |
0.75 | Minimum confidence for predictions |
feedback_window_days |
30 | How far back to consider feedback |
min_interactions |
10 | Minimum data before personalizing |
team_learning |
True | Share patterns across team |
Feedback Collection¶
Explicit Feedback¶
# User provides direct feedback
empathy.record_feedback(
interaction_id="int_abc123",
feedback_type="thumbs_up", # or "thumbs_down"
comment="Exactly what I needed"
)
# User corrects a suggestion
empathy.record_correction(
interaction_id="int_abc123",
suggested="Use try/except",
user_chose="Use context manager",
reason="More Pythonic"
)
Implicit Feedback¶
# Automatically tracked
empathy.track_acceptance(
suggestion_id="sug_xyz789",
accepted=True, # User applied the suggestion
time_to_accept_ms=1500, # How quickly they accepted
context={"file_type": "python", "task": "error_handling"}
)
User Profiles¶
Profile Structure¶
{
"user_id": "developer_123",
"preferences": {
"code_style": "pythonic", # Learned from corrections
"verbosity": "concise", # Learned from feedback
"preferred_tools": ["pytest", "fastapi", "pydantic"], # Frequency
"empathy_level": 3 # Learned optimal level
},
"context": {
"primary_domain": "backend_api",
"experience_level": "senior", # Inferred from interactions
"common_tasks": ["api_design", "database_optimization"],
"tech_stack": ["python", "postgresql", "docker"]
},
"patterns": {
"acceptance_rate": 0.72, # 72% of suggestions accepted
"response_time_preference": "fast", # Values speed
"collaboration_style": "async" # Works independently
},
"learning_stats": {
"total_interactions": 450,
"feedback_provided": 89,
"corrections_made": 23,
"improvement_rate": 0.28 # 28% better over time
}
}
Accessing User Profile¶
# Get user's learned preferences
profile = empathy.get_user_profile("developer_123")
print(f"Preferred code style: {profile['preferences']['code_style']}")
print(f"Acceptance rate: {profile['patterns']['acceptance_rate']:.0%}")
print(f"Common tasks: {profile['context']['common_tasks']}")
Personalized Responses¶
Code Style Adaptation¶
# System learns user prefers functional style
# Original suggestion:
def process_data(data):
result = []
for item in data:
if item > 0:
result.append(item * 2)
return result
# Adapted suggestion (learned from user corrections):
def process_data(data):
return [item * 2 for item in data if item > 0]
Verbosity Adjustment¶
# User prefers concise responses (learned from feedback)
# Before learning:
"To implement error handling in this function, you should use a try-except block. This will allow you to catch exceptions that might occur during execution and handle them gracefully. Here's how you can do it..."
# After learning:
"Add try-except for error handling:
```python
try:
result = process()
except ValueError as e:
logger.error(f\"Processing failed: {e}\")
### Context-Aware Suggestions
```python
# System learns user is working on FastAPI project
# Automatically provides FastAPI-specific suggestions:
response = empathy.interact(
user_id="developer_123",
user_input="How do I validate input?",
context={} # Context auto-detected from learned patterns
)
# Response includes FastAPI-specific validation:
"""
Use Pydantic models for input validation:
```python
from pydantic import BaseModel, validator
class UserInput(BaseModel):
email: str
age: int
@validator('email')
def validate_email(cls, v):
# Your learned preferred validation style
return v.lower()
---
## Team Learning
### Shared Pattern Library
Enable team-wide learning:
```python
empathy = EmpathyOS(
user_id="developer_123",
team_id="backend_team", # Share learnings with team
enable_team_learning=True,
team_privacy="anonymized" # Share patterns, not personal data
)
Pattern Sharing¶
# When one developer discovers a useful pattern:
pattern = {
"type": "optimization",
"domain": "database",
"pattern": "Use connection pooling for PostgreSQL",
"success_rate": 0.95,
"discovered_by": "developer_123",
"times_applied": 15
}
# Pattern automatically shared with team
# Other team members see suggestion when relevant:
"💡 Team pattern: Connection pooling increased performance by 3x for similar use cases"
Team Metrics¶
# View team-wide learning stats
team_stats = empathy.get_team_learning_stats("backend_team")
print(f"Team acceptance rate: {team_stats['avg_acceptance_rate']:.0%}")
print(f"Top patterns: {team_stats['most_used_patterns']}")
print(f"Improvement over time: +{team_stats['improvement_rate']:.0%}")
Learning Algorithms¶
Collaborative Filtering¶
Learns from similar users:
# Find users with similar patterns
similar_users = empathy.find_similar_users(
user_id="developer_123",
similarity_metric="acceptance_patterns"
)
# Apply successful patterns from similar users
for pattern in get_patterns_from_similar_users(similar_users):
if pattern.success_rate > 0.8:
suggest_pattern(pattern)
Reinforcement Learning¶
Optimizes for user satisfaction:
# Q-learning for suggestion timing
reward = calculate_reward(
accepted=True, # User accepted suggestion
time_to_accept=1500, # Accepted quickly (positive)
context_match=0.9 # Highly relevant (positive)
)
# Update Q-values
empathy.update_q_values(
state=current_state,
action=suggestion_made,
reward=reward,
next_state=resulting_state
)
Bayesian Inference¶
Updates beliefs based on evidence:
# Prior: User might prefer pytest (60% confidence)
# Evidence: User accepted pytest suggestion 5/5 times
# Posterior: User prefers pytest (95% confidence)
confidence = empathy.bayesian_update(
prior=0.6,
evidence=[True, True, True, True, True],
evidence_strength=0.9
)
# Result: 0.95 confidence
Privacy & Data Retention¶
Data Collected¶
| Data Type | Retention | Privacy |
|---|---|---|
| Acceptance patterns | 30 days | Anonymized for team |
| Feedback comments | 90 days | User-private |
| Code corrections | 30 days | Anonymized patterns only |
| User preferences | Indefinite | User-private |
| Team patterns | Indefinite | Anonymized |
Data Control¶
# User can view their data
data = empathy.get_my_learning_data("developer_123")
# User can delete their data
empathy.delete_my_learning_data("developer_123")
# User can opt out of team learning
empathy.update_preferences(
user_id="developer_123",
team_learning_enabled=False
)
Performance Metrics¶
Key Metrics¶
| Metric | Baseline | After Learning | Improvement |
|---|---|---|---|
| Acceptance Rate | 56% | 72% | +28% |
| Time to Accept | 3.5s | 2.1s | -40% |
| Rework Rate | 18% | 7% | -61% |
| User Satisfaction | 7.2/10 | 8.9/10 | +24% |
Monitoring Learning¶
# Track learning progress over time
metrics = empathy.get_learning_metrics(
user_id="developer_123",
time_range="30_days"
)
print(f"Interactions: {metrics['total_interactions']}")
print(f"Current acceptance rate: {metrics['acceptance_rate']:.0%}")
print(f"Improvement: +{metrics['improvement_over_baseline']:.0%}")
print(f"Learning velocity: {metrics['learning_velocity']}") # How fast improving
Best Practices¶
✅ Do¶
- Enable from day one - More data = better learning
- Encourage feedback - Explicit feedback accelerates learning
- Review learned patterns - Ensure quality of suggestions
- Share team learnings - Leverage collective knowledge
- Monitor metrics - Track improvement over time
❌ Don't¶
- Don't expect instant results - Requires 10+ interactions
- Don't ignore bad suggestions - Provide feedback to correct
- Don't disable team learning without reason - Miss shared value
- Don't overshare sensitive code - Patterns are anonymized, not code
Examples¶
See the complete Adaptive Learning System Example for a full implementation.
See Also¶
- Multi-Agent Coordination - Team patterns
- Adaptive Learning Example - Full implementation
- Pattern Library API - Pattern management
- EmpathyOS API - Core configuration