Agent with Memory
Store user preferences that persist across conversations.
Memory lets your agent remember facts about users across conversations. Unlike storage (which persists conversation history), memory stores user-level information like preferences and context.
Create a Python file
1from kern.agent import Agent2from kern.db.sqlite import SqliteDb3from kern.memory import MemoryManager4from kern.models.openai import OpenAIResponses5from kern.tools.yfinance import YFinanceTools6from rich.pretty import pprint78db = SqliteDb(db_file="tmp/agents.db")910memory_manager = MemoryManager(11 model=OpenAIResponses(id="gpt-5.2"),12 db=db,13)1415agent = Agent(16 model=OpenAIResponses(id="gpt-5.2"),17 tools=[YFinanceTools()],18 db=db,19 memory_manager=memory_manager,20 enable_agentic_memory=True,21 markdown=True,22)2324user_id = "investor@example.com"2526# Tell the agent about yourself27agent.print_response(28 "I'm interested in AI and semiconductor stocks. My risk tolerance is moderate.",29 user_id=user_id,30 stream=True,31)3233# The agent now knows your preferences34agent.print_response(35 "What stocks would you recommend for me?",36 user_id=user_id,37 stream=True,38)3940# View stored memories41memories = agent.get_user_memories(user_id=user_id)42print("\nStored Memories:")43pprint(memories)Set up your virtual environment
1uv venv --python 3.122source .venv/bin/activate1uv venv --python 3.122.venv\Scripts\activateInstall dependencies
1uv pip install -U kern-ai openai yfinance sqlalchemy richExport your OpenAI API key
1export OPENAI_API_KEY="your_openai_api_key_here"1$Env:OPENAI_API_KEY="your_openai_api_key_here"Run Agent
1python agent_with_memory.pyMemory vs Storage
| Feature | Storage | Memory |
|---|---|---|
| What it stores | Conversation history | User preferences and facts |
| Scope | Per session | Per user (across all sessions) |
| Use case | "What did we discuss?" | "What do you know about me?" |
Enabling Memory
enable_agentic_memory=True(used above): Agent decides when to store/recall via tool calls. More efficient.update_memory_on_run=True: Memory manager runs after every response. Guaranteed capture, higher latency.