【大模型记忆-Mem0详解-5】内存类,内存客户端
MemoryClient ·充当 Python 应用程序和 Mem0 托管平台之间的主要接口。它处理所有平台交互的身份验证、请求格式化和响应处理。
内存类
架构概述
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")
更多推荐
所有评论(0)