记忆操作
记忆操作
相关源文件
本章引用的主要源码文件:
docs/api-reference/memory/add-memories.mdxdocs/api-reference/memory/delete-memories.mdxdocs/api-reference/memory/delete-memory.mdxdocs/api-reference/memory/get-memories.mdxdocs/api-reference/memory/get-memory.mdxdocs/api-reference/memory/history-memory.mdxdocs/api-reference/memory/search-memories.mdxdocs/api-reference/memory/update-memory.mdxdocs/core-concepts/memory-operations/add.mdxdocs/core-concepts/memory-operations/delete.mdxdocs/core-concepts/memory-operations/search.mdxdocs/core-concepts/memory-operations/update.mdxdocs/core-concepts/memory-types.mdxdocs/open-source/configuration.mdxdocs/open-source/overview.mdxdocs/platform/advanced-memory-operations.mdxdocs/platform/features/platform-overview.mdxdocs/platform/overview.mdxmem0/__init__.pymem0/configs/prompts.pymem0/memory/main.pymem0/memory/storage.pymem0/memory/utils.pytests/configs/test_prompts.pytests/memory/test_main.pytests/test_chatty_llm_parsing.pytests/test_main.pytests/test_memory.pytests/test_proxy.py
本文档详细介绍了构成 Mem0 记忆管理系统基础的核心操作(add、search、update、delete、get、get_all 和 history)。内容涵盖 V3 增量式管线的实现细节、语义检索机制以及每个操作返回的数据结构。
概述
Mem0 提供两个主要的记忆操作类:
- Memory(开源版):自托管记忆管理,可完全控制提供者。详见
mem0/memory/main.py:172-1242。 - MemoryClient(平台版):托管 Mem0 平台的托管 API 客户端。
这两个类实现了统一的 API,但平台版(V3)为了性能和简洁性,强调采用"仅增量"的提取管线 docs/api-reference/memory/add-memories.mdx:7-15。
核心操作
添加操作
add() 方法用于存储来自对话消息的新记忆。在开源版中,它支持两种模式:智能推理(默认)或原始存储。
添加操作流程(开源版)
来源: mem0/memory/main.py:281-384,mem0/memory/main.py:386-597
推理模式与原始模式
当 infer=True 时,系统会使用 USER_MEMORY_EXTRACTION_PROMPT 或 AGENT_MEMORY_EXTRACTION_PROMPT 进行提取 mem0/configs/prompts.py:63-114。然后,它会通过将新事实与从 VectorStore 检索到的现有记忆进行比较来解决冲突 mem0/memory/main.py:465-475。
当 infer=False 时,消息会被原样存储。每条消息都会成为向量存储中的一个独立条目,并附带相关的元数据 mem0/memory/main.py:392-421。
搜索操作
search() 方法使用语义相似度检索相关记忆。它可以选择性地使用混合方法,结合向量搜索与 BM25 关键词匹配及重排序。
搜索实现细节
如果同时启用了向量搜索和关键词搜索,search 函数会计算一个综合得分。它使用 score_and_rank 来合并结果 mem0/memory/main.py:825-835。
来源: mem0/memory/main.py:758-867,mem0/utils/scoring.py:43-48
参数
| 参数 | 位置 | 描述 |
|---|---|---|
query | mem0/memory/main.py:759 | 用于搜索的自然语言字符串 |
filters | mem0/memory/main.py:765 | 用于元数据过滤的字典(user_id、agent_id 等) |
threshold | mem0/memory/main.py:766 | 最低相似度得分(0.0 到 1.0) |
limit | mem0/memory/main.py:764 | 返回结果的最大数量 |
更新和删除操作
更新
update() 方法用于修改现有的记忆条目。它会为新文本重新生成嵌入向量,并更新 VectorStore 中的记录 mem0/memory/main.py:869-901。
- 实现方式:它会调用
_update_memory(),该方法会计算新数据的 MD5 哈希值,以防止冗余更新mem0/memory/main.py:1004-1041。
删除
Mem0 提供三种删除数据的方式:
delete(memory_id):删除特定记录mem0/memory/main.py:903-931。在开源版中,此操作现在会先获取记忆内容,以便在删除前将其记录到历史中tests/test_main.py:164-174。delete_all(filters):删除所有符合筛选条件的记忆(例如,特定user_id的所有记忆)mem0/memory/main.py:933-1002。reset():完全清空向量存储和历史数据库mem0/memory/main.py:1145-1173。
历史操作
history() 方法用于追踪记忆的生命周期。它会查询 SQLiteManager,返回与特定 memory_id 关联的事件(ADD、UPDATE、DELETE)的时间顺序列表。
来源: mem0/memory/main.py:1118-1143,mem0/memory/storage.py:221-255
历史模式
历史记录存储在由 SQLiteManager 管理的本地 SQLite 表中 mem0/memory/storage.py:11。
memory_id:记忆记录的 IDmem0/memory/storage.py:68-81。old_memory:更新前的内容。new_memory:更新或添加后的内容。event:操作类型(ADD/UPDATE/DELETE)。
获取和获取全部操作
- get(memory_id):通过 ID 检索单条记忆。它会将原始向量存储的载荷映射为结构化的
MemoryItemmem0/memory/main.py:610-651。 - get_all(filters):根据筛选条件列出记忆。它支持通过
limit和offset进行分页mem0/memory/main.py:653-709。在平台版 V3 中,像user_id这样的实体 ID 必须 在filters对象内传递docs/api-reference/memory/get-memories.mdx:7-10。
代码实体摘要
主要类
| 实体 | 文件 | 角色 |
|---|---|---|
Memory | mem0/memory/main.py:172 | 开源版记忆操作的主要入口点。 |
AsyncMemory | mem0/memory/main.py:1244 | Memory 类的异步实现。 |
SQLiteManager | mem0/memory/storage.py:11 | 管理本地历史记录和消息持久化。 |
MemoryItem | mem0/configs/base.py:15 | 定义记忆记录结构的 Pydantic 模型。 |
关键工具函数
| 函数 | 文件 | 角色 |
|---|---|---|
_build_filters_and_metadata | mem0/memory/main.py:87 | 将会话 ID 规范化为存储兼容的筛选条件。 |
parse_messages | mem0/memory/utils.py:61 | 将消息字典列表转换为扁平字符串,供大语言模型处理。 |
extract_json | mem0/memory/utils.py:125 | 从包含 Markdown 的大语言模型响应中稳健地提取 JSON。 |
normalize_facts | mem0/memory/utils.py:84 | 将大语言模型提取的事实从对象规范化为纯字符串。 |
来源: mem0/memory/main.py,mem0/memory/storage.py,mem0/memory/utils.py