agentic_huge_data_base / wiki
页面 Mem0 · 5 存储后端·DeepWiki 中文全文译文

5 · 存储后端(Storage Backends)

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

项目Mem0 章节5 状态全文译文 模块界面与交互、系统架构、检索、召回与索引、模型调用与提供方适配
源码线索
  • docs/components/vectordbs/dbs/milvus.mdx
  • mem0-ts/src/oss/src/utils/scoring.ts
  • mem0/__init__.py
  • mem0/configs/prompts.py
  • mem0/configs/vector_stores/chroma.py
  • mem0/configs/vector_stores/milvus.py
  • mem0/configs/vector_stores/qdrant.py
  • mem0/memory/main.py
  • mem0/memory/storage.py
  • mem0/memory/utils.py
模块标签
  • 界面与交互
  • 系统架构
  • 检索、召回与索引
  • 模型调用与提供方适配
  • 记忆与上下文

章节正文

存储后端

存储后端

相关源文件

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

  • docs/components/vectordbs/dbs/milvus.mdx
  • mem0-ts/src/oss/src/utils/scoring.ts
  • mem0/__init__.py
  • mem0/configs/prompts.py
  • mem0/configs/vector_stores/chroma.py
  • mem0/configs/vector_stores/milvus.py
  • mem0/configs/vector_stores/qdrant.py
  • mem0/memory/main.py
  • mem0/memory/storage.py
  • mem0/memory/utils.py
  • mem0/utils/scoring.py
  • mem0/vector_stores/chroma.py
  • mem0/vector_stores/milvus.py
  • mem0/vector_stores/qdrant.py
  • 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
  • tests/utils/test_scoring.py
  • tests/vector_stores/test_chroma.py
  • tests/vector_stores/test_milvus.py
  • tests/vector_stores/test_qdrant.py

存储后端为 Mem0 的记忆系统提供了持久化存储层。这些后端负责存储记忆的嵌入向量、元数据和原始内容,从而支持语义相似度搜索和混合检索。该架构将基于向量的存储与关系型历史记录追踪以及基于图的关系型存储(详见图记忆)分离开来。

本页面涵盖了高层级的存储架构、通用接口以及提供商生态系统。关于索引策略的详细信息,请参阅向量存储概览。关于特定提供商的指南,请参阅向量存储提供商。关于配置参数,请参阅向量存储配置。关于审计日志和时间查询,请参阅历史记录与审计追踪

架构总览

存储层基于一个与提供商无关的工厂模式构建,该模式在 VectorStoreFactory mem0/utils/factory.py:167-202 中实现。这使得 Mem0 能够通过统一接口支持超过 20 种向量数据库实现。Memory 类负责编排这些后端,以对事实执行增删改查(CRUD)操作 mem0/memory/main.py:32-41

Mem0 · 架构总览 · 图 1
Mem0 · 架构总览 · 图 1

来源: mem0/memory/main.py:24-41, mem0/utils/factory.py:167-202, mem0/memory/storage.py:11-19

通用接口

所有向量存储提供商都继承自 VectorStoreBase,从而确保不同数据库引擎之间的行为一致。

Mem0 · 通用接口 · 图 2
Mem0 · 通用接口 · 图 2

来源: mem0/vector_stores/qdrant.py:29-271, mem0/vector_stores/milvus.py:25-171, mem0/vector_stores/chroma.py:23-200

混合搜索支持

现代 Mem0 存储后端支持混合搜索,它将密集向量嵌入与 BM25 关键词评分相结合,以提高检索准确性。

  • Qdrant: 使用名为 bm25 的命名稀疏向量槽实现混合搜索 mem0/vector_stores/qdrant.py:149-154。它利用 fastembed 进行稀疏编码 mem0/vector_stores/qdrant.py:88-101
  • Milvus: 使用一个专用的 text 字段(设置 enable_analyzer=True)和一个 BM25 函数,自动将稀疏向量生成到 sparse 字段中 mem0/vector_stores/milvus.py:88-103

来源: mem0/vector_stores/qdrant.py:120-157, mem0/vector_stores/milvus.py:72-116

核心操作

插入与更新(Upsert)

向量与元数据(载荷)一起存储。后端通常会实现批处理以提升性能。例如,Milvus 在执行批量 insert 之前,会构建一个包含 text 字段的记录字典,用于 BM25 索引 mem0/vector_stores/milvus.py:129-137

带过滤的搜索

搜索操作支持元数据过滤,以便按 user_idagent_idrun_id 隔离记忆。

  • Qdrant: 将过滤字典转换为 qdrant_client.models.Filter 对象 mem0/vector_stores/qdrant.py:188-210
  • Milvus: 将过滤器转换为布尔表达式字符串(例如 (metadata["user_id"] == "alice")mem0/vector_stores/milvus.py:139-155

来源: mem0/vector_stores/qdrant.py:162-182, mem0/vector_stores/milvus.py:118-137

历史记录与消息存储

向量存储负责处理语义检索,而 SQLiteManager 则管理记忆的关系型方面:

  • 历史记录表: 追踪对记忆的每一次变更(ADD、UPDATE、DELETE),存储 old_memorynew_memory 内容,用于审计追踪 mem0/memory/storage.py:102-121
  • 消息表: 存储原始对话轮次,为未来的记忆提取提供上下文 mem0/memory/storage.py:128-143

来源: mem0/memory/storage.py:11-143

提供商生态系统

Mem0 支持广泛的提供商,可通过 VectorStoreConfig 进行选择。

类别提供商
本地/自托管Qdrant, Chroma, PGVector, Milvus, Redis, FAISS
云托管Pinecone, Upstash, MongoDB, Azure AI Search, Supabase
企业/数据Databricks, Elasticsearch, OpenSearch, S3 Vectors

来源: mem0/configs/vector_stores/chroma.py:6-21, mem0/vector_stores/qdrant.py:29-56

连接管理

后端通过特定的配置模型来处理连接的生命周期:

  • Qdrant: 支持使用 url/api_key 连接云服务,使用 host/port 连接服务器,或使用 path 进行本地存储 mem0/vector_stores/qdrant.py:57-76
  • ChromaDB: 校验云配置与本地配置,确保 api_key/tenant 与本地 path 设置互斥 mem0/configs/vector_stores/chroma.py:22-44

来源: mem0/vector_stores/qdrant.py:57-76, mem0/configs/vector_stores/chroma.py:22-44

后续步骤