记忆存储格式
记忆信息存储在数据库中(比如可以使用 SqliteDb)。按照以下格式进行储存
| memory_id | 记忆的唯一标识符 |
|---|---|
| user_id | 关联的用户 ID |
| agent_id | 可选的关联代理 ID |
| team_id | 可选的关联团队 ID |
| memory | 记忆的文本内容 |
| topics | 与记忆相关的主题标签(可选) |
| input | 生成此记忆的原始输入(可选) |
| updated_at | 更新时间戳 |
记忆管理功能
记忆创建与更新
采用两种方法储存更新记忆
-
enable_user_memories 每次对话结束后都会将最新的添加、更新或删除记忆,并将其存储到数据库中。
-
enable_agentic_memory 每次对话结束后,调用LLM 根据当前对话和现有记忆进行对比,决定接下来的操作(添加、更新、删除等),并更新数据库。
记忆检索功能
三种检索方式:
-
获取最近记忆 (
last_n) 按时间戳 (updated_at) 排序,返回用户最新的n条记忆。 -
获取最旧记忆 (
first_n) 按时间戳 (updated_at) 排序,返回用户最旧的n条记忆。 -
智能语义检索 (
agentic) 将用户的所有记忆(ID 和内容)作为上下文提供给 LLM,由 LLM 分析用户查询query的语义,并返回最相关的记忆 ID 列表,最后根据 ID 获取完整的记忆对象。
减少 Token 消耗的尝试
-
自动创建和更新记忆,不使用llm调用
-
Agent提示词中限制记忆创建更新的频率(限制工具使用次数)
-
对记忆进行剪枝
-
通过日志检测用户记忆数量,超过部分进行剪枝