This page requires Python familiarity. Agent Memory is an advanced feature requiring explicit configuration — it is not enabled by default. It is configured in JSON and accessed from Python functions.
Use Agent Memory when your agent needs to remember information about returning callers — preferences, past bookings, or verification status — across separate conversations. Without it, every call starts from scratch.
This feature is in early access. Functionality may evolve. Contact
PolyAI support for guidance on production use.
It uses a key-value store attached to a user identifier (like phone number). Memory is read at the start of each turn and written after the conversation ends.
You can:
- Read memory using
conv.memory.get("key")
- Write memory by setting
conv.state["key"] = value (if configured with state_keys)
Configuration
JSON config (Agent Studio)
To enable Agent Memory:
{
"memory": {
"repeat_caller": {
"analytics_enabled": true,
"state_keys": ["booking_day", "cheese_type"],
"identifier_blacklist": ["+440000000000"]
}
}
}
analytics_enabled: Adds repeat caller metrics to Studio analytics
state_keys: Keys to save from conv.state to memory
identifier_blacklist: Optional list of excluded IDs (e.g. test numbers)
Using memory in functions
Read memory
def start_function(conv: Conversation):
cheese = conv.memory.get("cheese_type")
if cheese:
conv.say(f"You previously picked {cheese}.")
Write memory (using conv.state)
def book(conv: Conversation):
conv.state["cheese_type"] = "brie"
These fields will only be persisted if they are listed under state_keys in your config.
Example: conditional reuse
def start_function(conv: Conversation):
booking_day = conv.memory.get("booking_day")
cheese_type = conv.memory.get("cheese_type")
if booking_day and cheese_type:
conv.say(f"You booked {cheese_type} for {booking_day}. Rebook?")
Memory behavior
- Memory is read once per turn and cached.
- Memory is persisted at the end of a conversation.
- Only supported identifier today: phone number.
FAQ
Can I store nested JSON?
No. Each value must be a string, number, or flat serializable object. Always avoid packing PII into a single field.
Can I check if memory exists?
Yes:
if "booking_day" in conv.memory:
Can I prevent overwrites?
Not directly, but you can check before writing:
if "cheese_type" not in conv.memory:
conv.state["cheese_type"] = value
How do I get all memory fields?
Use the fields() method:
all_memory = conv.memory.fields() # Returns a dict copy of all fields
How do I check how many fields are stored?
Use Python’s len():
field_count = len(conv.memory)