内存类

架构概述

Memory 类遵循模块化架构,使用工厂模式根据配置实例化可插拔组件。它支持同步和异步作,并通过 LLM 驱动的事实提取和关系处理进行自动内存管理。

内存类组件架构

在这里插入图片描述

核心组件

内存类初始化

Memory 类使用定义所有组件配置的 MemoryConfig 对象进行初始化。构造函数通过工厂方法实例化所有必需的组件:

# From mem0/memory/main.py:123-157
def __init__(self, config: MemoryConfig = MemoryConfig()):
    self.config = config
    self.embedding_model = EmbedderFactory.create(...)
    self.vector_store = VectorStoreFactory.create(...)
    self.llm = LlmFactory.create(...)
    self.db = SQLiteManager(...)

会话管理和过滤

Memory 类支持通过用户标识符进行多会话内存管理。_build_filters_and_metadata 函数处理会话范围:

# From mem0/memory/main.py:42-115
def _build_filters_and_metadata(
    *, user_id: Optional[str] = None,
    agent_id: Optional[str] = None, 
    run_id: Optional[str] = None,
    actor_id: Optional[str] = None,
    input_metadata: Optional[Dict[str, Any]] = None,
    input_filters: Optional[Dict[str, Any]] = None,
) -> tuple[Dict[str, Any], Dict[str, Any]]:

核心内存作

添加作流程

add() 方法通过基于 LLM 的事实提取和内存管理来处理消息:

内存添加作流程
在这里插入图片描述

搜索作实施

search() 方法通过可选的图形关系检索跨存储的内存执行语义搜索:

# From mem0/memory/main.py:613-687
def search(self, query: str, *, user_id: Optional[str] = None, 
          agent_id: Optional[str] = None, run_id: Optional[str] = None,
          limit: int = 100, filters: Optional[Dict[str, Any]] = None,
          threshold: Optional[float] = None):

搜索作组件
在这里插入图片描述

内存类型和处理

程序内存创建

Memory 类通过 _create_procedural_memory() 方法支持过程内存:

# From mem0/memory/main.py:833-869
def _create_procedural_memory(self, messages, metadata=None, prompt=None):
    parsed_messages = [
        {"role": "system", "content": prompt or PROCEDURAL_MEMORY_SYSTEM_PROMPT},
        *messages,
        {"role": "user", "content": "Create procedural memory of the above conversation."}
    ]

事实提取和内存更新

核心内存处理采用 LLM 驱动的事实提取和智能内存更新:

内存处理管道

在这里插入图片描述

配置和定制

内存配置架构

Memory 类通过 MemoryConfig 接受大量配置:

# From mem0/configs/base.py
class MemoryConfig(BaseConfig):
    embedder: EmbedderConfig
    vector_store: VectorStoreConfig  
    llm: LlmConfig
    graph_store: Optional[GraphStoreConfig] = None
    history_db_path: str = get_history_db_path()
    version: str = "v1.1"
    custom_fact_extraction_prompt: Optional[str] = None
    custom_update_memory_prompt: Optional[str] = None

工厂模式集成

Memory 类利用工厂系统进行组件实例化:

工厂系统集成

在这里插入图片描述

历史记录和遥测

SQLite 历史管理

Memory 类通过 SQLiteManager 跟踪所有内存作:

# From mem0/memory/storage.py:126-167
def add_history(self, memory_id: str, old_memory: Optional[str], 
               new_memory: Optional[str], event: str, *,
               created_at: Optional[str] = None, actor_id: Optional[str] = None,
               role: Optional[str] = None) -> None:

遥测集成

通过遥测捕获跟踪内存作:

# From mem0/memory/main.py:444-449
capture_event("mem0.add", self, {
    "version": self.api_version, 
    "keys": keys, 
    "encoded_ids": encoded_ids, 
    "sync_type": "sync"
})

TypeScript 实现

TypeScript SDK 提供了一个具有类似功能的相应 Memory 类:

// From mem0-ts/src/oss/src/memory/index.ts:39-51
export class Memory {
  private config: MemoryConfig;
  private embedder: Embedder;
  private vectorStore: VectorStore;
  private llm: LLM;
  private db: HistoryManager;
}

TypeScript 实现遵循相同的架构模式,具有基于工厂的组件创建和类似的内存作方法。

内存客户端

架构概述

·MemoryClient ·充当 Python 应用程序和 Mem0 托管平台之间的主要接口。它处理所有平台交互的身份验证、请求格式化和响应处理。

在这里插入图片描述

客户端初始化

基本设置

MemoryClient需要 API 密钥进行身份验证,并可选择接受范围作的组织和项目 ID。

参数 类型 描述 违约
api_key str Mem0 API 密钥 MEM0_API_KEY env var
host str API 基础 URL “https://api.mem0.ai”
org_id str 组织 ID None
project_id str 项目 ID None
client httpx.Client 自定义 HTTP 客户端 None

在这里插入图片描述

身份验证流程

客户端在初始化期间通过 /v1/ping/ 端点验证 API 密钥,并提取组织和项目上下文。

在这里插入图片描述

核心内存作

内存生命周期方法

MemoryClient 为内存管理提供 CRUD 作,具有一致的错误处理和遥测捕获。

方法 HTTP 动词 端点 目的
add() POST /v1/memories/ 创造新的回忆
get() GET /v1/memories/{id}/ 检索特定内存
get_all() 获取/发布 /v1/memories/ 或 /v2/memories/ 使用过滤器列出回忆
search() POST /v1/memories/search/ 语义记忆搜索
update() PUT /v1/memories/{id}/ 更新内存内容
delete() DELETE /v1/memories/{id}/ 删除特定内存
delete_all() DELETE /v1/memories/ 通过过滤器删除记忆

在这里插入图片描述

请求处理管道

每个 API 方法都遵循一致的请求准备、执行和响应处理模式。

在这里插入图片描述

高级功能

实体管理

客户端提供了用于管理具有关联内存的用户、代理、应用程序和运行的方法。

方法 目的 端点
users() 列出所有实体 /v1/entities/
delete_users() 删除特定实体 /v2/entities/{type}/{name}/
reset() 删除所有实体和记忆 联合运营

在这里插入图片描述

项目管理

项目配置通过可通过 client.project 访问的专用项目管理器实例进行处理。

在这里插入图片描述

批量作

客户端支持批量作,实现高效的批量内存管理。

方法 目的 有效载荷结构
batch_update() 更新多个记忆 {“memories”: [{“memory_id”: str, “text”: str}]}
batch_delete() 删除多个记忆 {“memories”: [{“memory_id”: str}]}

内存导出系统

导出功能允许使用 JSON 架构提取结构化数据。

在这里插入图片描述

错误处理和实用程序

API 错误装饰器

所有公共方法都使用 @api_error_handler 装饰器来进行一致的错误处理和响应处理。
在这里插入图片描述

参数准备

_prepare_params() 方法标准化查询参数格式并验证组织/项目上下文。

异步客户端

AsyncMemoryClient 使用 httpx 提供相同的功能 。AsyncClient 用于非阻塞作。

主要区别

方面 MemoryClient AsyncMemoryClient
HTTP 客户端 httpx.Client httpx.AsyncClient
方法签名 同步 异步方法
上下文管理 不适用 aenter / aexit
验证 同步请求 同步请求

在这里插入图片描述

使用模式

async with AsyncMemoryClient() as client:
    result = await client.add(messages, user_id="user123")
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐