agentic_huge_data_base / wiki
页面 Mem0 · 3.7 智能记忆处理·DeepWiki 中文全文译文

3.7 · 智能记忆处理(Intelligent Memory Processing)

长期记忆与上下文管理 · 聚焦本章的模块关系、源码依据与实现要点。

项目Mem0 章节3.7 状态全文译文 模块检索、召回与索引、界面与交互、入库与解析、系统架构
源码线索
  • docs/images/openclaw-architecture.png
  • mem0-ts/src/oss/src/llms/base.ts
  • mem0-ts/src/oss/src/prompts/index.ts
  • mem0-ts/src/oss/src/tests/sqlite-path-resolution.test.ts
  • mem0-ts/src/oss/tests/extract-json.test.ts
  • mem0-ts/src/oss/tests/remove-code-blocks.test.ts
  • mem0/__init__.py
  • mem0/configs/prompts.py
  • mem0/memory/main.py
  • mem0/memory/storage.py
模块标签
  • 检索、召回与索引
  • 界面与交互
  • 入库与解析
  • 系统架构
  • 测试、发布与运维

章节正文

智能记忆处理

智能记忆处理

相关源文件

本章引用的主要源码文件:

  • docs/images/openclaw-architecture.png
  • mem0-ts/src/oss/src/llms/base.ts
  • mem0-ts/src/oss/src/prompts/index.ts
  • mem0-ts/src/oss/src/tests/sqlite-path-resolution.test.ts
  • mem0-ts/src/oss/tests/extract-json.test.ts
  • mem0-ts/src/oss/tests/remove-code-blocks.test.ts
  • mem0/__init__.py
  • mem0/configs/prompts.py
  • mem0/memory/main.py
  • mem0/memory/storage.py
  • mem0/memory/utils.py
  • openclaw/.gitignore
  • tests/configs/test_prompts.py
  • tests/memory/test_main.py
  • tests/test_chatty_llm_parsing.py
  • tests/test_main.py
  • tests/test_memory.py
  • tests/test_proxy.py

目的与范围

本文档介绍 Mem0 的智能记忆处理系统,该系统使用大语言模型(LLM)从对话中提取结构化事实、去重信息,并自动维护记忆一致性。这一处理流程代表了核心的"智能"层,使 Mem0 与传统向量数据库区分开来。

关于基本记忆操作,请参阅记忆操作。关于多级记忆架构的信息,请参阅会话作用域与过滤器。关于基于图谱的关系提取,请参阅图谱记忆

概述

Mem0 支持两种记忆处理模式,由 Memory 类的 add() 方法中的 infer 参数控制:

模式参数行为使用场景
直接模式infer=False消息原样存储,不进行处理原始对话日志记录,最小延迟
智能模式infer=True(默认)大语言模型提取事实、去重并管理一致性个性化 AI 应用、知识管理

在智能模式下,Mem0 执行一个多阶段的大语言模型驱动管线,将对话数据转换为结构化、去重的记忆条目。

来源: mem0/memory/main.py:386-421, mem0/memory/main.py:423-597

架构

高层处理管线
Mem0 · 高层处理管线 · 图 1
Mem0 · 高层处理管线 · 图 1

来源: mem0/memory/main.py:386-597, mem0/memory/utils.py:15-29

组件交互(代码实体空间)
Mem0 · 组件交互(代码实体空间) · 图 2
Mem0 · 组件交互(代码实体空间) · 图 2

来源: mem0/memory/main.py:423-589, mem0/memory/utils.py:15-29, mem0/memory/utils.py:109-142, mem0/configs/prompts.py:63-173

事实提取

用户与智能体记忆提取

Mem0 根据记忆属于用户还是智能体使用不同的提取策略。这由 agent_id 和助手消息的存在与否决定。

Mem0 · 用户与智能体记忆提取 · 图 3
Mem0 · 用户与智能体记忆提取 · 图 3

来源: mem0/memory/main.py:260-279, mem0/memory/utils.py:15-29

提取过程

_add_to_vector_store() 中的事实提取过程包括:

  1. 消息解析parse_messages() 将输入的消息列表转换为供大语言模型使用的字符串格式。mem0/memory/utils.py:61-70
  2. 提示词选择get_fact_retrieval_messages() 选择合适的提示词。mem0/memory/utils.py:15-29
  3. 大语言模型调用:系统调用 llm.generate_response(),并设置 response_format={"type": "json_object"} 以确保结构化输出。mem0/memory/main.py:434-440
  4. 响应清理remove_code_blocks()extract_json() 处理大语言模型包含 Markdown 或 <think> 标签的情况(通过正则表达式去除)。mem0/memory/utils.py:109-142
  5. 规范化normalize_facts() 确保事实是一个扁平的字符串列表,即使较小的大语言模型返回 {"fact": "..."} 这样的对象也能处理。mem0/memory/utils.py:84-106

来源: mem0/memory/main.py:423-456, mem0/memory/utils.py:84-106, mem0/memory/utils.py:121-121

记忆去重

相似性搜索阶段

在添加新事实之前,Mem0 会搜索相似的现有记忆,以识别潜在的重复或矛盾。

Mem0 · 相似性搜索阶段 · 图 4
Mem0 · 相似性搜索阶段 · 图 4

来源: mem0/memory/main.py:461-494

UUID 映射策略

为防止大语言模型在处理复杂 UUID 时产生幻觉,Mem0 在将 UUID 传递给动作判定提示词之前,会将其映射为简单整数(例如 "0"、"1")。在执行过程中会反转此映射,以确保在 VectorStore 中更新或删除正确的 memory_idmem0/memory/main.py:490-494, mem0/memory/main.py:541-564

记忆动作

动作判定

大语言模型将提取的事实与检索到的现有记忆进行比较,并根据 MemoryUpdateSchema 分配四种动作之一:

动作含义代码执行
ADD全新的信息。_create_memory()
UPDATE完善或更改现有记忆。_update_memory()
DELETE与现有记忆矛盾(应移除该记忆)。_delete_memory()
NONE信息已存在或无关。仅更新元数据

来源: mem0/memory/main.py:524-585, mem0/configs/prompts.py:175-323, mem0-ts/src/oss/src/prompts/index.ts:20-43

动作执行逻辑

_add_to_vector_store() 中的实现处理状态转换:

  1. ADD:在 VectorStore 中创建新条目,并在 SQLiteManager 中记录事件。mem0/memory/main.py:534-540
  2. UPDATE:重新生成更新后文本的嵌入向量,并替换向量数据库中的现有向量和载荷。mem0/memory/main.py:541-555
  3. DELETE:从存储中移除向量,并在元数据数据库中将历史记录标记为已删除。mem0/memory/main.py:556-564
  4. NONE:更新 updated_at 时间戳,并确保如果当前调用中提供了 agent_idrun_id,则将其与记忆关联。mem0/memory/main.py:565-585

来源: mem0/memory/main.py:524-585, mem0/memory/storage.py:150-192

自定义提示词

用户可以通过在 MemoryConfig 中提供自定义提示词来覆盖智能处理逻辑。

  • custom_fact_extraction_prompt:覆盖默认的事实提取系统提示词。mem0/configs/base.py:59-66
  • custom_update_memory_prompt:覆盖用于判定 ADD/UPDATE/DELETE/NONE 动作的逻辑。mem0/configs/base.py:59-66

如果直接将 prompt 参数传递给 add() 方法,则该参数在特定调用中优先于配置级别定义的 custom_instructionstests/memory/test_main.py:93-104

来源: mem0/configs/base.py:59-66, mem0/memory/main.py:405-408, mem0/memory/main.py:425-427

关键函数汇总

函数文件作用
_add_to_vector_storemem0/memory/main.py编排整个智能处理管线。
get_fact_retrieval_messagesmem0/memory/utils.py生成用于事实提取的提示词。
get_update_memory_messagesmem0/configs/prompts.py生成用于 ADD/UPDATE/DELETE 判定的提示词。
remove_code_blocksmem0/memory/utils.py清理大语言模型输出(去除 Markdown 和思考标签)。
normalize_factsmem0/memory/utils.py确保大语言模型输出符合预期的 JSON 模式。

来源: mem0/memory/main.py:386-597, mem0/memory/utils.py:15-106