内存存储

为了在会话和执行周期之间持久化记忆,请将记忆存储在数据库等持久化存储中。

如果您在生产环境中使用 Memory,持久化存储至关重要,因为您希望在应用程序重启时保留用户的记忆。

Agno 的内存系统支持多种持久化存储选项。

存储选项

Memory 类通过可插入的数据库接口支持不同的后端存储选项。目前,Agno 提供:

  1. SQLite 存储
  2. PostgreSQL 存储
  3. MongoDB 存储
  4. Redis 存储

设置存储

要配置内存存储,您需要创建一个数据库实例并将其传递给 Memory 的构造函数:

from agno.memory.v2.memory import Memory
from agno.memory.v2.db.sqlite import SqliteMemoryDb

# 为内存创建 SQLite 数据库
memory_db = SqliteMemoryDb(
    table_name="memories",  # 要使用的表名
    db_file="path/to/memory.db"  # SQLite 数据库文件
)

# 使用存储后端初始化 Memory
memory = Memory(db=memory_db)

数据模型

在使用持久化存储时,Memory 系统存储:

  • 用户记忆 - 关于用户的が事实和见解
  • 最后更新时间戳 - 用于跟踪记忆上次修改的时间
  • 记忆 ID - 每个记忆的唯一标识符

存储示例

sqlite_memory.py
from agno.memory.v2.memory import Memory
from agno.memory.v2.db.sqlite import SqliteMemoryDb
from agno.memory.v2.schema import UserMemory

# 创建一个 SQLite 内存数据库
memory_db = SqliteMemoryDb(
    table_name="user_memories",
    db_file="tmp/memory.db"
)

# 使用存储后端初始化 Memory
memory = Memory(db=memory_db)

# 添加一个将在重启后持久化的用户记忆
user_id = "user@example.com"
memory.add_user_memory(
    memory=UserMemory(
        memory="用户在应用程序中偏好深色模式",
        topics=["preferences", "ui"]
    ),
    user_id=user_id
)

# 检索记忆(将从数据库加载)
user_memories = memory.get_user_memories(user_id=user_id)
for m in user_memories:
    print(f"Memory: {m.memory}")
    print(f"Topics: {m.topics}")
    print(f"Last Updated: {m.last_updated}")
postgres_memory.py
from agno.memory.v2.memory import Memory
from agno.memory.v2.db.postgres import PostgresMemoryDb
from agno.memory.v2.schema import UserMemory

# 创建一个 PostgreSQL 内存数据库
memory_db = PostgresMemoryDb(
    table_name="user_memories",
    connection_string="postgresql://user:password@localhost:5432/mydb"
)

# 使用存储后端初始化 Memory
memory = Memory(db=memory_db)

# 添加用户记忆
user_id = "user@example.com"
memory.add_user_memory(
    memory=UserMemory(
        memory="用户拥有高级订阅",
        topics=["subscription", "account"]
    ),
    user_id=user_id
)

# 无论后端如何,内存操作都保持不变
print(f"用户存储了 {len(memory.get_user_memories(user_id=user_id))} 条记忆")

与 Agent 存储集成

在构建具有内存的代理时,您通常需要存储代理会话和记忆。Agno 通过允许您配置两个存储系统,使此过程变得容易:

from agno.agent import Agent
from agno.memory.v2.memory import Memory
from agno.memory.v2.db.sqlite import SqliteMemoryDb
from agno.models.openai import OpenAIChat
from agno.storage.sqlite import SqliteStorage

# 创建内存存储
memory_db = SqliteMemoryDb(
    table_name="memories",
    db_file="tmp/memory.db"
)
memory = Memory(db=memory_db)

# 创建代理存储
agent_storage = SqliteStorage(
    table_name="agent_sessions",
    db_file="tmp/agent_storage.db"
)

# 使用内存和存储创建代理
agent = Agent(
    model=OpenAIChat(id="gpt-4o"),
    memory=memory,
    storage=agent_storage,
    enable_user_memories=True,
)

内存管理

在使用持久化存储时,Memory 系统提供了多个函数来管理存储的记忆:

# 删除特定记忆
memory.delete_user_memory(user_id="user@example.com", memory_id="memory_123")

# 替换/更新记忆
memory.replace_user_memory(
    memory_id="memory_123",
    memory=UserMemory(memory="关于用户的更新信息"),
    user_id="user@example.com"
)

# 清除所有记忆
memory.clear()

开发者资源

  • 在此处查找内存存储的参考文档:here