---
title: Personalized AI Tutor
description: "Keep student progress and preferences persistent across tutoring sessions."
---


You can create a personalized AI Tutor using Deja Vu. This guide will walk you through the necessary steps and provide the complete code to get you started.

## Overview

The Personalized AI Tutor leverages Deja Vu to retain information across interactions, enabling a tailored learning experience. By integrating with OpenAI's GPT-4 model, the tutor can provide detailed and context-aware responses to user queries.

## Setup

Before you begin, ensure you have the required dependencies installed. You can install the necessary packages using pip:

```bash
pip install openai dejavu-memory
```

## Full Code Example

Below is the complete code to create and interact with a Personalized AI Tutor using Deja Vu:

```python
import os 
from openai import OpenAI
from dejavu import Memory

# Set the OpenAI API key
os.environ['OPENAI_API_KEY'] = 'sk-xxx'

# Initialize the OpenAI client
client = OpenAI()

class PersonalAITutor:
    def __init__(self):
        """
        Initialize the PersonalAITutor with memory configuration and OpenAI client.
        """
        config = {
            "vector_store": {
                "provider": "qdrant",
                "config": {
                    "host": "localhost",
                    "port": 6333,
                }
            },
        }
        self.memory = Memory.from_config(config)
        self.client = client
        self.app_id = "app-1"

    def ask(self, question, user_id=None):
        """
        Ask a question to the AI and store the relevant facts in memory

        :param question: The question to ask the AI.
        :param user_id: Optional user ID to associate with the memory.
        """
        # Start a streaming response request to the AI
        response = self.client.responses.create(
            model="gpt-5-mini",
            instructions="You are a personal AI Tutor.",
            input=question,
            stream=True
        )

        # Store the question in memory
        self.memory.add(question, user_id=user_id, metadata={"app_id": self.app_id})

        # Print the response from the AI in real-time
        for event in response:
            if event.type == "response.output_text.delta":
                print(event.delta, end="")

    def get_memories(self, user_id=None):
        """
        Retrieve all memories associated with the given user ID.

        :param user_id: Optional user ID to filter memories.
        :return: List of memories.
        """
        return self.memory.get_all(filters={"user_id": user_id})

# Instantiate the PersonalAITutor
ai_tutor = PersonalAITutor()

# Define a user ID
user_id = "john_doe"

# Ask a question
ai_tutor.ask("I am learning introduction to CS. What is queue? Briefly explain.", user_id=user_id)
```

### Fetching Memories

You can fetch all the memories at any point in time using the following code:

```python
memories = ai_tutor.get_memories(user_id=user_id)
for m in memories['results']:
    print(m['memory'])
```

## Key Points

- **Initialization**: The PersonalAITutor class is initialized with the necessary memory configuration and OpenAI client setup
- **Asking Questions**: The ask method sends a question to the AI and stores the relevant information in memory
- **Retrieving Memories**: The get_memories method fetches all stored memories associated with a user

## Conclusion

As the conversation progresses, Deja Vu's memory automatically updates based on the interactions, providing a continuously improving personalized learning experience. This setup ensures that the AI Tutor can offer contextually relevant and accurate responses, enhancing the overall educational process.

---

<CardGroup cols={2}>
  <Card title="Build a Deja Vu Companion" icon="users" href="/cookbooks/essentials/building-ai-companion">
    Learn the foundations of memory-powered companions with production-ready patterns.
  </Card>
  <Card title="Travel Assistant with Deja Vu" icon="plane" href="/cookbooks/companions/travel-assistant">
    Build a travel companion that remembers preferences and past conversations.
  </Card>
</CardGroup>
