agentic_huge_data_base / wiki
页面 Mem0 · 5.1 向量存储总览·DeepWiki 中文全文译文

5.1 · 向量存储总览(Vector Stores Overview)

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

项目Mem0 章节5.1 状态全文译文 模块检索、召回与索引、系统架构、界面与交互、模型调用与提供方适配
源码线索
  • Makefile
  • docs/components/vectordbs/config.mdx
  • docs/components/vectordbs/dbs/chroma.mdx
  • docs/components/vectordbs/dbs/milvus.mdx
  • docs/components/vectordbs/dbs/qdrant.mdx
  • docs/components/vectordbs/overview.mdx
  • mem0-ts/src/oss/src/utils/scoring.ts
  • mem0/configs/vector_stores/chroma.py
  • mem0/configs/vector_stores/milvus.py
  • mem0/configs/vector_stores/qdrant.py
模块标签
  • 检索、召回与索引
  • 系统架构
  • 界面与交互
  • 模型调用与提供方适配
  • 测试、发布与运维

章节正文

向量存储总览

向量存储总览

相关源文件

以下文件为本维基页面的生成提供了上下文:

  • Makefile
  • docs/components/vectordbs/config.mdx
  • docs/components/vectordbs/dbs/chroma.mdx
  • docs/components/vectordbs/dbs/milvus.mdx
  • docs/components/vectordbs/dbs/qdrant.mdx
  • docs/components/vectordbs/overview.mdx
  • mem0-ts/src/oss/src/utils/scoring.ts
  • mem0/configs/vector_stores/chroma.py
  • mem0/configs/vector_stores/milvus.py
  • mem0/configs/vector_stores/qdrant.py
  • mem0/utils/factory.py
  • mem0/utils/scoring.py
  • mem0/vector_stores/chroma.py
  • mem0/vector_stores/configs.py
  • mem0/vector_stores/milvus.py
  • mem0/vector_stores/qdrant.py
  • poetry.lock
  • pyproject.toml
  • tests/utils/test_scoring.py
  • tests/vector_stores/test_chroma.py
  • tests/vector_stores/test_milvus.py
  • tests/vector_stores/test_qdrant.py

向量存储是 Mem0 中语义记忆的主要存储层。它们支持对嵌入向量进行快速相似性搜索,使记忆系统能够基于语义含义(而非精确关键词匹配)检索相关记忆。本页面涵盖向量存储抽象层、工厂模式以及常见操作。

关于特定向量存储提供商的详细配置,请参见向量存储提供商(5.2)。关于配置模式与校验,请参见向量存储配置(5.3)

在记忆系统中的用途

Mem0 中的向量存储承担两个关键功能:

  1. 嵌入向量存储:存储从记忆内容生成的向量嵌入及其元数据。
  2. 语义检索:执行近似最近邻(ANN)搜索,以查找与查询相似的记忆。

向量存储层通过 VectorStoreBase 接口 mem0/vector_stores/base.py:24 与记忆系统的其他部分解耦,使用户可以根据部署需求、规模及性能要求,从超过 20 个受支持的提供商 mem0/vector_stores/configs.py:13-38 中进行选择。

来源: mem0/vector_stores/base.py:1-24docs/components/vectordbs/overview.mdx:1-37mem0/vector_stores/configs.py:13-38

架构总览

下图展示了核心记忆系统与向量存储抽象层之间的关系。

系统架构到代码实体的映射
Mem0 · 系统架构到代码实体的映射 · 图 1
Mem0 · 系统架构到代码实体的映射 · 图 1

工作流:

  1. 记忆系统使用指定提供商和连接详情的 VectorStoreConfig 进行初始化 mem0/vector_stores/configs.py:6-11
  2. VectorStoreFactory.create() 使用 importlib 动态加载相应的提供商类 mem0/utils/factory.py:1-27
  3. 提供商实例实现了 VectorStoreBase 接口,以提供标准化操作。
  4. 嵌入器生成向量,然后传递给存储以进行插入或搜索。

来源: mem0/utils/factory.py:167-206mem0/vector_stores/configs.py:6-68mem0/utils/factory.py:24-27

VectorStoreBase 接口

所有向量存储实现都继承自 VectorStoreBase mem0/vector_stores/base.py:24,并实现一组标准操作。

常见操作
操作描述实现示例
create_col创建具有特定维度和度量标准的新集合或索引。mem0/vector_stores/qdrant.py:120-157
insert将向量、载荷和 ID 插入存储。mem0/vector_stores/milvus.py:118-137
search执行相似性搜索,支持可选的元数据过滤。mem0/vector_stores/qdrant.py:196-224
delete按 ID 删除特定向量。mem0/vector_stores/qdrant.py:246-250
update更新现有 ID 的向量或载荷。mem0/vector_stores/qdrant.py:234-244
list_cols列出数据库中所有现有集合。mem0/vector_stores/qdrant.py:252-254

来源: mem0/vector_stores/qdrant.py:29-271mem0/vector_stores/milvus.py:25-180mem0/vector_stores/base.py:24

VectorStoreFactory

VectorStoreFactory 实现了工厂模式,用于动态实例化向量存储提供商。

提供商注册表

工厂维护一个 provider_to_class 映射,将字符串标识符与实现的完整模块路径关联起来:

provider_to_class = {
    "qdrant": "mem0.vector_stores.qdrant.Qdrant",
    "chroma": "mem0.vector_stores.chroma.ChromaDB",
    "milvus": "mem0.vector_stores.milvus.MilvusDB",
    # ... 超过 20 个其他提供商
}

mem0/utils/factory.py:168-192

创建逻辑

当调用 create() 时,工厂会执行以下操作:

  1. 根据提供商名称解析类路径 mem0/utils/factory.py:194
  2. 通过 load_class 辅助函数使用 importlib.import_module 加载类 mem0/utils/factory.py:24-27
  3. 将配置(如果以字典形式提供)转换为提供商特定的配置对象 mem0/utils/factory.py:195-197

来源: mem0/utils/factory.py:167-206mem0/utils/factory.py:24-27

VectorStoreConfig 配置系统

配置系统使用 Pydantic 进行校验和类型安全。

配置流程
Mem0 · 配置流程 · 图 2
Mem0 · 配置流程 · 图 2

关键特性:

  • 动态校验validate_and_create_config 方法导入特定提供商的配置(例如 QdrantConfig),并针对该配置校验 config 字段 mem0/vector_stores/configs.py:41-67
  • 默认值注入:如果未为本地存储提供路径,则默认使用 /tmp/{provider} mem0/vector_stores/configs.py:63-64

来源: mem0/vector_stores/configs.py:6-68mem0/configs/vector_stores/qdrant.py:6-48mem0/configs/vector_stores/chroma.py:6-58

混合搜索支持(v3 版本)

最近的实现(如 Qdrant 和 Milvus)支持混合搜索,将密集语义向量与 BM25 稀疏向量相结合。

实现细节:
  • Qdrant:使用 fastembed 进行 BM25 编码 mem0/vector_stores/qdrant.py:88-101,并在集合中创建一个名为 bm25 的命名稀疏向量槽 mem0/vector_stores/qdrant.py:146-154
  • Milvus:使用类型为 BM25Function,从 text 字段自动生成稀疏向量 mem0/vector_stores/milvus.py:97-103。它还添加了 SPARSE_INVERTED_INDEX 以实现高效检索 mem0/vector_stores/milvus.py:109-114

来源: mem0/vector_stores/qdrant.py:88-154mem0/vector_stores/milvus.py:84-116

标准操作模式

插入操作

插入通常涉及准备特定于后端的数据结构(例如 Qdrant 的 PointStruct 或 Milvus 的字典)。

  • Qdrantinsert 遍历向量和载荷,创建 PointStruct 对象 mem0/vector_stores/qdrant.py:178-194
  • Milvusinsert 构建一个字典列表,如果模式支持,则包含用于 BM25 的 text 字段 mem0/vector_stores/milvus.py:129-137
搜索与过滤

所有搜索操作都支持元数据过滤。

  • 过滤:针对 user_idagent_idrun_id 的过滤器会被转换为提供商特定的语法。Qdrant 使用 FilterFieldCondition 对象 mem0/vector_stores/qdrant.py:226-244。Milvus 使用布尔表达式字符串 mem0/vector_stores/milvus.py:139-155
  • 评分:结果以 OutputData 或类似对象的列表形式返回,其中包含 idscorepayload mem0/vector_stores/milvus.py:157-180mem0/vector_stores/chroma.py:17-21

来源: mem0/vector_stores/qdrant.py:178-244mem0/vector_stores/milvus.py:118-180mem0/vector_stores/chroma.py:143-161

嵌入向量维度

一个常见的配置点是 embedding_model_dims。虽然许多模型默认使用 1536(OpenAI),但用户必须将其与特定的嵌入提供商匹配,以避免对齐错误 docs/components/vectordbs/overview.mdx:47-54。该值通常在向量存储类的初始化过程中传入 mem0/vector_stores/qdrant.py:33mem0/vector_stores/milvus.py:31

来源: mem0/configs/vector_stores/qdrant.py:12mem0/vector_stores/milvus.py:41docs/components/vectordbs/overview.mdx:47-54