SurrealDB Custom Memory Instructions
Scope what MemoryManager captures with custom instructions, storing memories in SurrealDB.
"""
SurrealDB Custom Memory Instructions
"""
from agno.db.surrealdb import SurrealDb
from agno.memory import MemoryManager
from agno.models.anthropic.claude import Claude
from agno.models.message import Message
from agno.models.openai import OpenAIChat
from rich.pretty import pprint
# ---------------------------------------------------------------------------
# Setup
# ---------------------------------------------------------------------------
SURREALDB_URL = "ws://localhost:8000"
SURREALDB_USER = "root"
SURREALDB_PASSWORD = "root"
SURREALDB_NAMESPACE = "agno"
SURREALDB_DATABASE = "memories"
creds = {"username": SURREALDB_USER, "password": SURREALDB_PASSWORD}
memory_db = SurrealDb(
None, SURREALDB_URL, creds, SURREALDB_NAMESPACE, SURREALDB_DATABASE
)
# ---------------------------------------------------------------------------
# Create Memory Managers
# ---------------------------------------------------------------------------
john_doe_id = "john_doe@example.com"
custom_memory_manager = MemoryManager(
model=OpenAIChat(id="gpt-5.6-luna"),
memory_capture_instructions="""\
Memories should only include details about the user's academic interests.
Only include which subjects they are interested in.
Ignore names, hobbies, and personal interests.
""",
db=memory_db,
)
# Use default memory manager
jane_memory_manager = MemoryManager(
model=Claude(id="claude-3-5-sonnet-latest"),
db=memory_db,
)
# ---------------------------------------------------------------------------
# Run Example
# ---------------------------------------------------------------------------
def run_example() -> None:
custom_memory_manager.create_user_memories(
message="""\
My name is John Doe.
I enjoy hiking in the mountains on weekends,
reading science fiction novels before bed,
cooking new recipes from different cultures,
playing chess with friends.
I am interested to learn about the history of the universe and other astronomical topics.
""",
user_id=john_doe_id,
)
memories = custom_memory_manager.get_user_memories(user_id=john_doe_id)
print("John Doe's memories:")
pprint(memories)
jane_doe_id = "jane_doe@example.com"
# Send a history of messages and add memories
jane_memory_manager.create_user_memories(
messages=[
Message(role="user", content="Hi, how are you?"),
Message(role="assistant", content="I'm good, thank you!"),
Message(role="user", content="What are you capable of?"),
Message(
role="assistant",
content="I can help you with your homework and answer questions about the universe.",
),
Message(role="user", content="My name is Jane Doe"),
Message(role="user", content="I like to play chess"),
Message(
role="user",
content="Actually, forget that I like to play chess. I more enjoy playing table top games like dungeons and dragons",
),
Message(
role="user",
content="I'm also interested in learning about the history of the universe and other astronomical topics.",
),
Message(role="assistant", content="That is great!"),
Message(
role="user",
content="I am really interested in physics. Tell me about quantum mechanics?",
),
],
user_id=jane_doe_id,
)
memories = jane_memory_manager.get_user_memories(user_id=jane_doe_id)
print("Jane Doe's memories:")
pprint(memories)
if __name__ == "__main__":
run_example()Model and capture instructions
The source's Claude 3.5 model is retired. Replace the Jane manager's model with Claude(id="claude-sonnet-4-6") before running it. See Anthropic model deprecations.
The custom instructions guide the model's extraction; they do not validate that every saved memory belongs to the requested subject. Inspect the saved memories when evaluating the result.
Run the Example
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateInstall dependencies
uv pip install -U agno anthropic openai surrealdbExport your API keys
export ANTHROPIC_API_KEY="your_anthropic_api_key_here"
export OPENAI_API_KEY="your_openai_api_key_here"Run SurrealDB
Install and start Docker first. This local demonstration uses the agno namespace and memories database with development credentials.
docker run -d --rm --name surrealdb --pull always -p 8000:8000 surrealdb/surrealdb:latest start --user root --pass rootRun the example
Save the code above as custom_memory_instructions.py, then run:
python custom_memory_instructions.pyFull source: cookbook/integrations/surrealdb/custom_memory_instructions.py