Implementing Memory in Our Agent › Managing Memory Over Time

Michael BrenndoerferJuly 5, 20252 min read
AI Agent HandbookAll chapters
Part 6 of 15Memory and Retrieval - How Agents Remember
Chapter 17Implementing Memory in Our Agent › Managing Memory Over Time
Reading section 5 of 13 · Managing Memory Over Time · 2 minSection 5 of 13 · 2 min

Book contents

Section 5 of 13 · 2 min read

Implementing Memory in Our Agent › Managing Memory Over TimeOne section · Sections in this chapter5 / 13 ↓

As your assistant accumulates facts, you'll need ways to manage them. Let's add some utilities:

In[2]:
Code
class PersonalAssistantWithManagement(PersonalAssistantWithTools):
    """Assistant with memory management capabilities."""
    
    def list_facts(self) -> str:
        """Show all stored facts."""
        facts = self.knowledge.get_all_facts()
        
        if not facts:
            return "I don't have any facts stored yet."
        
        facts_list = "\n".join(f"{i+1}. {fact}" for i, fact in enumerate(facts))
        return f"Here's what I know about you:\n\n{facts_list}"
    
    def forget_fact(self, fact_number: int) -> str:
        """Remove a specific fact."""
        facts = self.knowledge.facts
        
        if fact_number < 1 or fact_number > len(facts):
            return f"Invalid fact number. I have {len(facts)} facts stored."
        
        removed_fact = facts[fact_number - 1]["fact"]
        
        # Remove from both lists
        facts.pop(fact_number - 1)
        self.knowledge.embeddings.pop(fact_number - 1)
        self.knowledge._save_data()
        
        return f"Forgot: {removed_fact}"
    
    def update_fact(self, fact_number: int, new_fact: str) -> str:
        """Update an existing fact."""
        facts = self.knowledge.facts
        
        if fact_number < 1 or fact_number > len(facts):
            return f"Invalid fact number. I have {len(facts)} facts stored."
        
        old_fact = facts[fact_number - 1]["fact"]
        
        # Update fact and embedding
        facts[fact_number - 1]["fact"] = new_fact
        facts[fact_number - 1]["timestamp"] = datetime.now().isoformat()
        self.knowledge.embeddings[fact_number - 1] = self.knowledge.encoder.encode(new_fact)
        self.knowledge._save_data()
        
        return f"Updated: '{old_fact}' → '{new_fact}'"

Now you can manage stored knowledge:

In[4]:
Code
assistant = PersonalAssistantWithManagement(api_key=os.getenv("ANTHROPIC_API_KEY"))

## Store some facts
assistant.chat("Remember that I live in San Francisco")
assistant.chat("Remember that I'm allergic to peanuts")
assistant.chat("Remember that I prefer Italian food")

## List all facts
print(assistant.list_facts())
## Output:
## Here's what I know about you:
## 
## 1. You live in San Francisco
## 2. You're allergic to peanuts
## 3. You prefer Italian food

## Update a fact
print(assistant.update_fact(1, "You live in Oakland"))
## Output: Updated: 'You live in San Francisco' → 'You live in Oakland'

## Remove a fact
print(assistant.forget_fact(2))
## Output: Forgot: You're allergic to peanuts

These management functions give users control over their data. This is important for privacy and accuracy.