Skip to content

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:

  1. User feedback (thumbs up/down, corrections)
  2. Acceptance patterns (which suggestions users accept)
  3. Context evolution (how user needs change over time)
  4. 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

  1. Enable from day one - More data = better learning
  2. Encourage feedback - Explicit feedback accelerates learning
  3. Review learned patterns - Ensure quality of suggestions
  4. Share team learnings - Leverage collective knowledge
  5. Monitor metrics - Track improvement over time

❌ Don't

  1. Don't expect instant results - Requires 10+ interactions
  2. Don't ignore bad suggestions - Provide feedback to correct
  3. Don't disable team learning without reason - Miss shared value
  4. Don't overshare sensitive code - Patterns are anonymized, not code

Examples

See the complete Adaptive Learning System Example for a full implementation.


See Also