agentic_huge_data_base / wiki
页面 Mem0 · 5.2 向量存储提供方·DeepWiki 中文全文译文

5.2 · 向量存储提供方(Vector Store Providers)

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

项目Mem0 章节5.2 状态全文译文 模块存储与持久化、检索、召回与索引、配置治理、系统架构
源码线索
  • docs/components/vectordbs/dbs/azure_mysql.mdx
  • docs/components/vectordbs/dbs/cassandra.mdx
  • docs/components/vectordbs/dbs/databricks.mdx
  • docs/components/vectordbs/dbs/elasticsearch.mdx
  • docs/components/vectordbs/dbs/milvus.mdx
  • docs/components/vectordbs/dbs/mongodb.mdx
  • docs/components/vectordbs/dbs/pgvector.mdx
  • docs/components/vectordbs/dbs/pinecone.mdx
  • docs/components/vectordbs/dbs/s3_vectors.mdx
  • docs/components/vectordbs/dbs/valkey.mdx
模块标签
  • 存储与持久化
  • 检索、召回与索引
  • 配置治理
  • 系统架构
  • 测试、发布与运维

章节正文

向量存储提供方

向量存储提供商

相关源文件

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

  • docs/components/vectordbs/dbs/azure_mysql.mdx
  • docs/components/vectordbs/dbs/cassandra.mdx
  • docs/components/vectordbs/dbs/databricks.mdx
  • docs/components/vectordbs/dbs/elasticsearch.mdx
  • docs/components/vectordbs/dbs/milvus.mdx
  • docs/components/vectordbs/dbs/mongodb.mdx
  • docs/components/vectordbs/dbs/pgvector.mdx
  • docs/components/vectordbs/dbs/pinecone.mdx
  • docs/components/vectordbs/dbs/s3_vectors.mdx
  • docs/components/vectordbs/dbs/valkey.mdx
  • docs/contributing/development.mdx
  • docs/contributing/documentation.mdx
  • mem0-ts/src/oss/src/utils/scoring.ts
  • mem0/configs/vector_stores/azure_mysql.py
  • mem0/configs/vector_stores/baidu.py
  • mem0/configs/vector_stores/cassandra.py
  • mem0/configs/vector_stores/chroma.py
  • mem0/configs/vector_stores/databricks.py
  • mem0/configs/vector_stores/elasticsearch.py
  • mem0/configs/vector_stores/faiss.py
  • mem0/configs/vector_stores/langchain.py
  • mem0/configs/vector_stores/milvus.py
  • mem0/configs/vector_stores/mongodb.py
  • mem0/configs/vector_stores/opensearch.py
  • mem0/configs/vector_stores/pgvector.py
  • mem0/configs/vector_stores/pinecone.py
  • mem0/configs/vector_stores/qdrant.py
  • mem0/configs/vector_stores/redis.py
  • mem0/configs/vector_stores/s3_vectors.py
  • mem0/configs/vector_stores/valkey.py
  • mem0/utils/scoring.py
  • mem0/vector_stores/azure_ai_search.py
  • mem0/vector_stores/chroma.py
  • mem0/vector_stores/databricks.py
  • mem0/vector_stores/elasticsearch.py
  • mem0/vector_stores/faiss.py
  • mem0/vector_stores/langchain.py
  • mem0/vector_stores/milvus.py
  • mem0/vector_stores/mongodb.py
  • mem0/vector_stores/opensearch.py
  • mem0/vector_stores/pgvector.py
  • mem0/vector_stores/pinecone.py
  • mem0/vector_stores/qdrant.py
  • mem0/vector_stores/redis.py
  • mem0/vector_stores/s3_vectors.py
  • mem0/vector_stores/valkey.py
  • tests/memory/test_safe_deepcopy_config.py
  • tests/utils/test_scoring.py
  • tests/vector_stores/test_azure_mysql.py
  • tests/vector_stores/test_cassandra.py
  • tests/vector_stores/test_chroma.py
  • tests/vector_stores/test_databricks.py
  • tests/vector_stores/test_elasticsearch.py
  • tests/vector_stores/test_faiss.py
  • tests/vector_stores/test_langchain_vector_store.py
  • tests/vector_stores/test_milvus.py
  • tests/vector_stores/test_mongodb.py
  • tests/vector_stores/test_opensearch.py
  • tests/vector_stores/test_pgvector.py
  • tests/vector_stores/test_pinecone.py
  • tests/vector_stores/test_qdrant.py
  • tests/vector_stores/test_redis.py
  • tests/vector_stores/test_s3_vectors.py
  • tests/vector_stores/test_valkey.py

本文档记录了 Mem0 开源实现中支持的向量存储提供商。向量存储作为嵌入向量的主要存储后端,通过相似度匹配实现语义记忆搜索。Mem0 目前支持超过 24 种实现,涵盖从本地轻量级数据库到企业级云解决方案。

提供商架构

Mem0 使用工厂模式动态实例化向量存储实现。VectorStoreFactory 类将提供商字符串映射到对应的实现类,从而根据用户配置在运行时选择提供商。

工厂模式与数据流

工厂维护一个受支持提供商的注册表。当 Memory 实例初始化时,会通过 VectorStoreFactory 加载相应的类并传递配置参数。

Mem0 · 工厂模式与数据流 · 图 1
Mem0 · 工厂模式与数据流 · 图 1

来源: mem0/utils/factory.py:164-200, mem0/vector_stores/base.py:1-20, mem0/vector_stores/qdrant.py:29-30, mem0/vector_stores/pgvector.py:41-42, mem0/vector_stores/faiss.py:127-128

提供商注册表

VectorStoreFactory.provider_to_class 字典定义了配置字符串与实现模块之间的映射关系。

类别提供商键实现类文件路径
云/远程qdrantQdrantmem0/vector_stores/qdrant.py:29
pineconePineconeDBmem0/vector_stores/pinecone.py:22
mongodbMongoDBmem0/vector_stores/mongodb.py:28
azure_ai_searchAzureAISearchmem0/vector_stores/azure_ai_search.py:21
自托管pgvectorPGVectormem0/vector_stores/pgvector.py:41
milvusMilvusDBmem0/vector_stores/milvus.py:25
chromaChromaDBmem0/vector_stores/chroma.py:23
elasticsearchElasticsearchDBmem0/vector_stores/elasticsearch.py:24
opensearchOpenSearchDBmem0/vector_stores/opensearch.py:24
本地/其他faissFAISSmem0/vector_stores/faiss.py:127
valkeyValkeyDBmem0/vector_stores/valkey.py:25
databricksDatabricksmem0/vector_stores/databricks.py:24

来源: mem0/utils/factory.py:165-189

实现深度解析

Qdrant(qdrant

Qdrant 实现支持本地(磁盘)和远程服务器两种模式。它具备先进的混合搜索能力,能够将 BM25 关键词匹配与语义向量搜索相结合。

  • 混合搜索: 它延迟加载 fastembed 库,将文本编码为稀疏向量,用于 bm25 槽位 mem0/vector_stores/qdrant.py:88-101
  • 索引: 自动为 user_idagent_idrun_idactor_id 创建载荷索引,以优化过滤性能 mem0/vector_stores/qdrant.py:158-177
  • 初始化: __init__ 方法通过 URL、主机/端口或本地路径处理客户端设置 mem0/vector_stores/qdrant.py:30-76
  • 持久化存储: on_disk 标志启用向量的持久化存储 mem0/vector_stores/qdrant.py:54-55

来源: mem0/vector_stores/qdrant.py:29-177

PGVector(pgvector

PGVector 提供商使用带有 vector 扩展的 PostgreSQL。它设计稳健,支持连接池。

  • 驱动支持:psycopg(v3)配合 ConnectionPoolpsycopg2 配合 ThreadedConnectionPool 之间动态切换 mem0/vector_stores/pgvector.py:9-26
  • 索引策略: 支持 HNSWDiskANN(通过 vectorscale 扩展)两种高性能近似最近邻搜索算法 mem0/vector_stores/pgvector.py:169-181
  • 上下文管理: 使用 _get_cursor 上下文管理器处理连接池的检出以及自动提交/回滚 mem0/vector_stores/pgvector.py:116-148
  • 模式: 创建包含 UUID 主键、vector 列和 JSONB 载荷的表 mem0/vector_stores/pgvector.py:159-168

来源: mem0/vector_stores/pgvector.py:41-181

Milvus(milvus

Milvus 用于大规模向量数据。Mem0 的实现利用 Milvus 的内部函数实现 BM25。

  • BM25 集成: 它在 Milvus 模式中定义了一个类型为 BM25Function,用于从 text 字段自动生成稀疏向量 mem0/vector_stores/milvus.py:97-103
  • 模式: 使用 FLOAT_VECTOR 存储稠密嵌入向量,使用 SPARSE_FLOAT_VECTOR 进行关键词搜索 mem0/vector_stores/milvus.py:84-92
  • 动态字段: 启用 enable_dynamic_field=True 以实现灵活的元数据存储 mem0/vector_stores/milvus.py:94

来源: mem0/vector_stores/milvus.py:25-117

ChromaDB(chroma

ChromaDB 是本地开发和嵌入式场景的热门选择。

  • 云支持: 包含一个专门的初始化路径,用于 chromadb.CloudClient,使用 API 密钥和租户 mem0/vector_stores/chroma.py:48-55
  • 输出解析: _parse_output 方法将 Chroma 的嵌套列表响应扁平化为 OutputData 对象 mem0/vector_stores/chroma.py:76-107
  • 持久化: 如果未提供路径,默认使用 db 目录进行持久化存储 mem0/vector_stores/chroma.py:65-69

来源: mem0/vector_stores/chroma.py:23-107

MongoDB(mongodb

MongoDB 提供商利用 Atlas Vector Search 实现高性能检索。

  • 搜索索引: 自动创建 vectorSearch 索引和 Atlas Search 文本索引,用于关键词匹配 mem0/vector_stores/mongodb.py:65-121
  • 驱动元数据: 包含 Mem0 特定的驱动信息,用于遥测 mem0/vector_stores/mongodb.py:20
  • 度量支持: 硬编码使用 cosine 相似度 mem0/vector_stores/mongodb.py:30

来源: mem0/vector_stores/mongodb.py:28-126

FAISS(faiss

FAISS 是一个用于高效相似度搜索和稠密向量聚类的库。

  • 安全性: 实现了 SafeUnpickler,防止在加载遗留的 .pkl 文档存储时执行任意代码 mem0/vector_stores/faiss.py:34-61
  • 迁移: 自动将遗留的 pickle 文档存储迁移为 JSON 格式,以提高安全性和可移植性 mem0/vector_stores/faiss.py:168-170
  • 策略: 支持 euclideaninner_productcosine 距离策略 mem0/vector_stores/faiss.py:142-143

来源: mem0/vector_stores/faiss.py:127-173

关键函数与数据流

下图展示了在不同提供商之间搜索记忆的内部逻辑,将配置与具体的类方法连接起来。

Mem0 · 关键函数与数据流 · 图 2
Mem0 · 关键函数与数据流 · 图 2

来源: mem0/vector_stores/qdrant.py:199-231, mem0/vector_stores/pgvector.py:214-263, mem0/vector_stores/chroma.py:143-161, mem0/vector_stores/mongodb.py:151-180, mem0/vector_stores/elasticsearch.py:140-168

配置与校验

每个提供商都有一个特定的配置模型(Pydantic),位于 mem0/configs/vector_stores/ 目录下。这些模型在工厂实例化提供商之前对输入参数进行校验。

配置类关键字段文件路径
ChromaDbConfigpathhostportapi_keytenantmem0/configs/vector_stores/chroma.py:6
ElasticsearchConfigcloud_idapi_keyhostportuserpasswordmem0/configs/vector_stores/elasticsearch.py:12
OpenSearchConfiguse_sslverify_certshttp_authuserpasswordmem0/configs/vector_stores/opensearch.py:12
PGVectorConfigdbnameuserpassworddiskannhnswsslmodemem0/configs/vector_stores/pgvector.py:5
MilvusConfigurltokendb_namemetric_typemem0/configs/vector_stores/milvus.py:16

来源: mem0/configs/vector_stores/chroma.py:6-20, mem0/configs/vector_stores/elasticsearch.py:12-40, mem0/configs/vector_stores/opensearch.py:12-25, mem0/configs/vector_stores/pgvector.py:5-20, mem0/configs/vector_stores/milvus.py:16-25

关键方法汇总表

所有提供商都继承自 VectorStoreBase,并实现以下接口:

方法用途实现模式
insert()批量插入向量和元数据。通常涉及将载荷转换为 JSON,并调用提供商的 upsertbulkinsert_many 方法。
search()向量相似度搜索。接收向量和可选过滤器;返回包含 idscorepayloadOutputData 对象。
delete()删除特定的记忆。按主 ID 或向量 ID 删除。
update()修改现有的记忆。更新特定 ID 的向量和/或元数据。
create_col()设置存储。创建具有正确维度和距离度量的表、集合或索引。
list_cols()审计现有的存储。列出数据库中所有可用的集合或索引。

来源: mem0/vector_stores/base.py:1-20, mem0/vector_stores/qdrant.py:178-231, mem0/vector_stores/pgvector.py:183-263, mem0/vector_stores/chroma.py:126-141