Personal Study Buddy (#2531)
This commit is contained in:
84
examples/misc/study_buddy.py
Normal file
84
examples/misc/study_buddy.py
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
"""
|
||||||
|
Create your personal AI Study Buddy that remembers what you’ve studied (and where you struggled),
|
||||||
|
helps with spaced repetition and topic review, personalizes responses using your past interactions.
|
||||||
|
Supports both text and PDF/image inputs.
|
||||||
|
|
||||||
|
In order to run this file, you need to set up your Mem0 API at Mem0 platform and also need a OpenAI API key.
|
||||||
|
export OPENAI_API_KEY="your_openai_api_key"
|
||||||
|
export MEM0_API_KEY="your_mem0_api_key"
|
||||||
|
"""
|
||||||
|
import asyncio
|
||||||
|
|
||||||
|
from mem0 import MemoryClient
|
||||||
|
from agents import Agent, Runner
|
||||||
|
|
||||||
|
|
||||||
|
client = MemoryClient()
|
||||||
|
|
||||||
|
# Define your study buddy agent
|
||||||
|
study_agent = Agent(
|
||||||
|
name="StudyBuddy",
|
||||||
|
instructions="""You are a helpful study coach. You:
|
||||||
|
- Track what the user has studied before
|
||||||
|
- Identify topics the user has struggled with (e.g., "I'm confused", "this is hard")
|
||||||
|
- Help with spaced repetition by suggesting topics to revisit based on last review time
|
||||||
|
- Personalize answers using stored memories
|
||||||
|
- Summarize PDFs or notes the user uploads""")
|
||||||
|
|
||||||
|
|
||||||
|
# Upload and store PDF to Mem0
|
||||||
|
def upload_pdf(pdf_url: str, user_id: str):
|
||||||
|
pdf_message = {
|
||||||
|
"role": "user",
|
||||||
|
"content": {
|
||||||
|
"type": "pdf_url",
|
||||||
|
"pdf_url": {"url": pdf_url}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
client.add([pdf_message], user_id=user_id)
|
||||||
|
print("✅ PDF uploaded and processed into memory.")
|
||||||
|
|
||||||
|
|
||||||
|
# Main interaction loop with your personal study buddy
|
||||||
|
async def study_buddy(user_id: str, topic: str, user_input: str):
|
||||||
|
|
||||||
|
memories = client.search(f"{topic}", user_id=user_id)
|
||||||
|
memory_context = "n".join(f"- {m['memory']}" for m in memories)
|
||||||
|
|
||||||
|
prompt = f"""
|
||||||
|
You are helping the user study the topic: {topic}.
|
||||||
|
Here are past memories from previous sessions:
|
||||||
|
{memory_context}
|
||||||
|
|
||||||
|
Now respond to the user's new question or comment:
|
||||||
|
{user_input}
|
||||||
|
"""
|
||||||
|
result = await Runner.run(study_agent, prompt)
|
||||||
|
response = result.final_output
|
||||||
|
|
||||||
|
client.add([
|
||||||
|
{"role": "user", "content": f'''Topic: {topic}nUser: {user_input}nnStudy Assistant: {response}'''}
|
||||||
|
], user_id=user_id, metadata={"topic": topic})
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
# Example usage
|
||||||
|
async def main():
|
||||||
|
user_id = "Ajay"
|
||||||
|
pdf_url = "https://pages.physics.ua.edu/staff/fabi/ph101/classnotes/8RotD101.pdf"
|
||||||
|
upload_pdf(pdf_url, user_id) # Upload a relevant lecture PDF to memory
|
||||||
|
|
||||||
|
topic = "Lagrangian Mechanics"
|
||||||
|
# Demonstrate tracking previously learned topics
|
||||||
|
print(await study_buddy(user_id, topic, "Can you remind me of what we discussed about generalized coordinates?"))
|
||||||
|
|
||||||
|
# Demonstrate weakness detection
|
||||||
|
print(await study_buddy(user_id, topic, "I still don’t get what frequency domain really means."))
|
||||||
|
|
||||||
|
# Demonstrate spaced repetition prompting
|
||||||
|
topic = "Momentum Conservation"
|
||||||
|
print(await study_buddy(user_id, topic, "I think we covered this last week. Is it time to review momentum conservation again?"))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(main())
|
||||||
Reference in New Issue
Block a user