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

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

长期记忆与上下文管理 · 本章是 Mem0 DeepWiki 中文译文的独立章节页,保留原始链接、源码锚点、模块标签和章节层级。

项目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
模块标签
  • 检索、召回与索引
  • 界面与交互
  • 入库与解析
  • 系统架构
  • 测试、发布与运维

中文译文

Intelligent 记忆处理(中文译文)

原始 DeepWiki 页面:https://deepwiki.com/mem0ai/mem0/3.7-intelligent-memory-processing
翻译时间:2026-05-27T08:44:59.810Z
翻译模型:deepseek-chat
原文字符数:11039
项目:Mem0 (mem0)

---

智能记忆处理

相关源文件

以下文件被用作生成此 Wiki 页面的上下文:

  • 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

架构

高层处理管线
flowchart TD
    A["Memory.add(messages, user_id, infer=True)"] --> B{infer 模式?}
    B -->|False| C["直接存储"]
    B -->|True| D["智能处理"]

    D --> E["1. 事实提取"]
    E --> F["大语言模型:提取结构化事实"]
    F --> G["get_fact_retrieval_messages()"]

    G --> H["2. 相似性搜索"]
    H --> I["对每个事实生成嵌入向量"]
    I --> J["vector_store.search()"]
    J --> K["检索相似记忆"]

    K --> L["3. 动作判定"]
    L --> M["大语言模型:分析事实与记忆"]
    M --> N["get_update_memory_messages()"]
    N --> O["生成 ADD/UPDATE/DELETE/NONE"]

    O --> P["4. 执行"]
    P --> Q["_create_memory()"]
    P --> R["_update_memory()"]
    P --> S["_delete_memory()"]

    Q --> T["返回结果"]
    R --> T
    S --> T

    C --> U["存储原始消息"]
    U --> T

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

组件交互(代码实体空间)
graph TB
    subgraph "Memory (mem0/memory/main.py)"
        add["Memory.add()"]
        avs["Memory._add_to_vector_store()"]
    end

    subgraph "大语言模型处理 (mem0/utils/factory.py)"
        llm["LlmFactory.create()"]
        fact_extract["llm.generate_response()<br/>(事实提取)"]
        action_determine["llm.generate_response()<br/>(动作判定)"]
    end

    subgraph "提示词 (mem0/configs/prompts.py)"
        gfrm["get_fact_retrieval_messages()"]
        umsg["get_update_memory_messages()"]
        user_prompt["USER_MEMORY_EXTRACTION_PROMPT"]
        agent_prompt["AGENT_MEMORY_EXTRACTION_PROMPT"]
        update_prompt["DEFAULT_UPDATE_MEMORY_PROMPT"]
    end

    subgraph "向量存储 (mem0/utils/factory.py)"
        embed["EmbedderFactory.create()"]
        vs["VectorStoreFactory.create()"]
        search["vector_store.search()"]
    end

    subgraph "工具函数 (mem0/memory/utils.py)"
        parse["parse_messages()"]
        remove_cb["remove_code_blocks()"]
        extract_json["extract_json()"]
    end

    add --> avs
    avs --> parse
    avs --> gfrm
    gfrm --> user_prompt
    gfrm --> agent_prompt
    gfrm --> fact_extract
    fact_extract --> llm

    fact_extract --> remove_cb
    remove_cb --> extract_json

    extract_json --> embed
    embed --> search
    search --> vs

    search --> umsg
    umsg --> update_prompt
    umsg --> action_determine
    action_determine --> llm
    action_determine --> remove_cb

来源: 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 和助手消息的存在与否决定。

flowchart LR
    A["Memory._should_use_agent_memory_extraction()"] --> B{存在 agent_id?}
    B -->|否| C["用户记忆提取"]
    B -->|是| D{存在助手消息?}
    D -->|否| C
    D -->|是| E["智能体记忆提取"]

    C --> F["USER_MEMORY_EXTRACTION_PROMPT"]
    E --> G["AGENT_MEMORY_EXTRACTION_PROMPT"]

    F --> H["仅从用户消息中提取事实"]
    G --> I["仅从助手消息中提取事实"]

来源: 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 会搜索相似的现有记忆,以识别潜在的重复或矛盾。

flowchart TD
    A["对每个提取的事实"] --> B["embedding_model.embed(fact)"]
    B --> C["vector_store.search()"]
    C --> D["filters = {user_id, agent_id, run_id}"]
    D --> E["返回前 5 条相似记忆"]
    E --> F["按 ID 收集唯一记忆"]
    F --> G["创建临时 UUID 映射"]
    G --> H["将 UUID 映射为整数<br/>(防止幻觉)"]

来源: 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