🔀

AI Personalized Learning Tutor

Medium7 tools

AI-powered personalized learning workflow that creates customized learning paths, generates interactive lessons, provides real-time feedback, and adapts to individual learning styles.

Claude 3.5 Sonnet / GPT-4Anki / Quizlet APINotion / ObsidianElevenLabsDALL-E 3 / MidjourneyH5P / Learning Management SystemGoogle Calendar

Workflow Steps

  1. 1

    Learning Goal Assessment - Evaluate student profile and preferences

  2. 2

    Learning Path Generation - Create personalized module sequence

  3. 3

    Interactive Lesson Generation - Generate visual, audio, and practice content

  4. 4

    Adaptive Quiz Generation - Adjust difficulty based on performance

  5. 5

    Spaced Repetition Scheduling - Optimize review intervals

  6. 6

    Progress Tracking and Feedback - Generate motivating reports

Download

Documentation

AI Personalized Learning Tutor

Overview

An AI-powered personalized learning workflow that creates customized learning paths, generates interactive lessons, provides real-time feedback, and adapts to individual learning styles and paces. This pipeline transforms static educational content into dynamic, personalized learning experiences that adjust to each student's needs.

The workflow is designed for educators, corporate trainers, and self-learners who want to create or access personalized learning experiences without requiring instructional design expertise.

Difficulty

Medium — Requires good prompt engineering and content organization.

Tools Required

ToolPurpose
Claude 3.5 Sonnet / GPT-4Lesson generation and tutoring
Anki / Quizlet APISpaced repetition flashcards
Notion / ObsidianKnowledge base and notes
ElevenLabsAudio lessons and pronunciation
DALL-E 3 / MidjourneyEducational illustrations
H5P / Learning Management SystemInteractive content delivery
Google CalendarLearning schedule management

Workflow Steps

Step 1: Learning Goal Assessment

import anthropic

client = anthropic.Anthropic()

def assess_learning_goals(student_profile: dict) -> dict:
    """Assess student's goals, background, and learning preferences."""
    
    response = client.messages.create(
        model="claude-3-5-sonnet-latest",
        max_tokens=2000,
        messages=[{
            "role": "user",
            "content": f"""Assess this student's learning profile and create a personalized 
            learning plan framework.

            STUDENT PROFILE:
            {json.dumps(student_profile, indent=2)}

            Please provide:
            1. Current knowledge level assessment
            2. Learning style preferences (visual, auditory, kinesthetic, reading)
            3. Time availability and schedule
            4. Motivation level and learning goals
            5. Recommended learning pace
            6. Suggested learning modalities

            Return as structured JSON."""}
        }]
    )
    
    return parse_assessment(response.content[0].text)

Step 2: Learning Path Generation

def generate_learning_path(
    topic: str,
    assessment: dict,
    duration_weeks: int = 8
) -> list[dict]:
    """Generate a personalized learning path with modules and milestones."""
    
    response = client.messages.create(
        model="claude-3-5-sonnet-latest",
        max_tokens=4000,
        messages=[{
            "role": "user",
            "content": f"""Create a personalized learning path for:

            Topic: {topic}
            Duration: {duration_weeks} weeks
            Student Profile: {json.dumps(assessment, indent=2)}

            Structure the learning path as a series of modules. For each module:
            - module_id: Unique identifier
            - title: Module title
            - duration_weeks: How many weeks
            - prerequisites: List of prerequisite module IDs
            - learning_objectives: List of specific objectives
            - key_concepts: List of concepts to master
            - activities: List of learning activities
            - assessment_type: How to assess mastery
            - difficulty: beginner/intermediate/advanced

            Return as JSON array of modules."""}
        }]
    )
    
    return parse_learning_path(response.content[0].text)

Step 3: Interactive Lesson Generation

def generate_lesson(module: dict, student_level: str) -> dict:
    """Generate an interactive lesson for a module."""
    
    lesson = {
        "module_id": module["module_id"],
        "title": module["title"],
        "content": {},
        "activities": [],
        "quiz": {}
    }
    
    # Generate lesson content based on learning style
    if "visual" in student_level.get("learning_styles", []):
        lesson["content"]["explanation"] = generate_visual_explanation(module)
        lesson["content"]["diagram_prompt"] = generate_diagram_prompt(module)
    
    if "auditory" in student_level.get("learning_styles", []):
        lesson["content"]["audio_script"] = generate_audio_script(module)
    
    # Generate practice problems
    lesson["activities"] = generate_practice_problems(module, count=5)
    
    # Generate quiz questions
    lesson["quiz"] = generate_quiz(module, count=10)
    
    return lesson

def generate_visual_explanation(module: dict) -> str:
    """Generate a visual explanation with analogies."""
    response = client.messages.create(
        model="claude-3-5-sonnet-latest",
        max_tokens=1500,
        messages=[{
            "role": "user",
            "content": f"""Explain this concept visually with analogies:

            Module: {module['title']}
            Key Concepts: {module['key_concepts']}

            Use:
            - Real-world analogies
            - Visual descriptions that can be drawn
            - Step-by-step breakdown
            - Common misconceptions to avoid"""}
        }]
    )
    return response.content[0].text

def generate_audio_script(module: dict) -> str:
    """Generate a script for audio lesson."""
    response = client.messages.create(
        model="claude-3-5-sonnet-latest",
        max_tokens=1500,
        messages=[{
            "role": "user",
            "content": f"""Write a 5-minute audio lesson script for:

            Module: {module['title']}
            Key Concepts: {module['key_concepts']}

            Write in conversational style as if speaking directly to the student.
            Include pauses for reflection and questions for the student to consider.
            Format with [PAUSE] markers and [QUESTION] prompts."""}
        }]
    )
    return response.content[0].text

Step 4: Adaptive Quiz Generation

def generate_adaptive_quiz(
    module: dict,
    student_performance: dict
) -> dict:
    """Generate a quiz adapted to student's performance level."""
    
    # Adjust difficulty based on performance
    difficulty = adjust_difficulty(student_performance)
    
    response = client.messages.create(
        model="claude-3-5-sonnet-latest",
        max_tokens=2000,
        messages=[{
            "role": "user",
            "content": f"""Generate a quiz for this module at {difficulty} difficulty:

            Module: {module['title']}
            Key Concepts: {module['key_concepts']}
            Student Performance: {json.dumps(student_performance, indent=2)}

            Generate 10 questions with:
            - question_id
            - question_text
            - question_type: multiple_choice|true_false|short_answer
            - options: for multiple choice
            - correct_answer
            - explanation: why the answer is correct
            - difficulty: easy|medium|hard

            Include a mix of recall, application, and analysis questions."""}
        }]
    )
    
    return parse_quiz(response.content[0].text)

def adjust_difficulty(performance: dict) -> str:
    """Adjust quiz difficulty based on performance."""
    accuracy = performance.get("accuracy", 0.5)
    if accuracy >= 0.8:
        return "hard"
    elif accuracy >= 0.6:
        return "medium"
    else:
        return "easy"

Step 5: Spaced Repetition Scheduling

def schedule_spaced_repetition(
    learned_concepts: list[str],
    performance: dict
) -> list[dict]:
    """Schedule review sessions using spaced repetition."""
    
    schedule = []
    
    for concept in learned_concepts:
        # Get concept difficulty from performance
        difficulty = performance.get(concept, {}).get("difficulty", "medium")
        
        # Calculate review intervals based on difficulty
        if difficulty == "easy":
            intervals = [1, 3, 7, 14, 30]  # days
        elif difficulty == "medium":
            intervals = [1, 2, 4, 8, 16, 30]
        else:  # hard
            intervals = [0, 1, 2, 3, 5, 7, 14, 21, 30]
        
        # Generate review schedule
        current_date = datetime.now()
        for i, days in enumerate(intervals):
            schedule.append({
                "concept": concept,
                "review_date": (current_date + timedelta(days=days)).isoformat(),
                "review_type": "flashcard" if i < 3 else "practice_problems",
                "priority": "high" if difficulty == "hard" else "normal"
            })
    
    return sorted(schedule, key=lambda x: x["review_date"])

Step 6: Progress Tracking and Feedback

def generate_progress_report(
    student_id: str,
    completed_modules: list[str],
    quiz_results: list[dict],
    time_spent: dict
) -> str:
    """Generate a comprehensive progress report."""
    
    response = client.messages.create(
        model="claude-3-5-sonnet-latest",
        max_tokens=2000,
        messages=[{
            "role": "user",
            "content": f"""Generate a progress report for this student:

            Student ID: {student_id}
            Completed Modules: {completed_modules}
            Quiz Results: {json.dumps(quiz_results, indent=2)}
            Time Spent: {json.dumps(time_spent, indent=2)}

            Include:
            1. Overall progress percentage
            2. Strengths (concepts mastered)
            3. Areas for improvement
            4. Time efficiency analysis
            5. Recommended next steps
            6. Encouraging message

            Make it motivating and actionable."""}
        }]
    )
    
    return response.content[0].text

Example Usage

def personalized_learning_session(
    topic: str,
    student_profile: dict,
    duration_weeks: int = 8
) -> dict:
    # Step 1: Assess learning goals
    print("Assessing learning goals...")
    assessment = assess_learning_goals(student_profile)
    
    # Step 2: Generate learning path
    print("Generating learning path...")
    learning_path = generate_learning_path(topic, assessment, duration_weeks)
    
    # Step 3: Generate first lesson
    print("Generating first lesson...")
    first_module = learning_path[0]
    lesson = generate_lesson(first_module, assessment)
    
    # Step 4: Generate initial quiz
    print("Generating quiz...")
    quiz = generate_adaptive_quiz(first_module, {})
    
    # Step 5: Schedule spaced repetition
    print("Setting up spaced repetition...")
    review_schedule = schedule_spaced_repetition(
        first_module["key_concepts"],
        {}
    )
    
    return {
        "assessment": assessment,
        "learning_path": learning_path,
        "current_lesson": lesson,
        "quiz": quiz,
        "review_schedule": review_schedule
    }

# Run for a new student
result = personalized_learning_session(
    topic="Machine Learning Fundamentals",
    student_profile={
        "background": "Software developer with 3 years experience",
        "goals": "Understand ML to build AI-powered features",
        "learning_styles": ["visual", "reading"],
        "time_available": "10 hours per week",
        "preferred_schedule": "Evenings and weekends"
    },
    duration_weeks=12
)

Pros

  • ✅ Fully personalized to each learner
  • ✅ Adapts to learning style and pace
  • ✅ Spaced repetition for retention
  • ✅ Interactive and engaging
  • ✅ Real-time feedback
  • ✅ Progress tracking and motivation

Cons

  • ❌ Requires good content generation
  • ❌ May lack human interaction
  • ❌ Quality depends on AI output
  • ❌ Limited hands-on practice
  • ❌ Not suitable for all subjects
  • ❌ Requires self-discipline

When to Use

  • Self-paced learning — Individual study programs
  • Corporate training — Employee skill development
  • Online courses — Enhance existing course content
  • Language learning — Personalized language practice
  • Test preparation — SAT, GRE, professional certifications
  • Skill development — Programming, design, writing

Resources