向量存储提供方
向量存储提供商
相关源文件
本章引用的主要源码文件:
docs/components/vectordbs/dbs/azure_mysql.mdxdocs/components/vectordbs/dbs/cassandra.mdxdocs/components/vectordbs/dbs/databricks.mdxdocs/components/vectordbs/dbs/elasticsearch.mdxdocs/components/vectordbs/dbs/milvus.mdxdocs/components/vectordbs/dbs/mongodb.mdxdocs/components/vectordbs/dbs/pgvector.mdxdocs/components/vectordbs/dbs/pinecone.mdxdocs/components/vectordbs/dbs/s3_vectors.mdxdocs/components/vectordbs/dbs/valkey.mdxdocs/contributing/development.mdxdocs/contributing/documentation.mdxmem0-ts/src/oss/src/utils/scoring.tsmem0/configs/vector_stores/azure_mysql.pymem0/configs/vector_stores/baidu.pymem0/configs/vector_stores/cassandra.pymem0/configs/vector_stores/chroma.pymem0/configs/vector_stores/databricks.pymem0/configs/vector_stores/elasticsearch.pymem0/configs/vector_stores/faiss.pymem0/configs/vector_stores/langchain.pymem0/configs/vector_stores/milvus.pymem0/configs/vector_stores/mongodb.pymem0/configs/vector_stores/opensearch.pymem0/configs/vector_stores/pgvector.pymem0/configs/vector_stores/pinecone.pymem0/configs/vector_stores/qdrant.pymem0/configs/vector_stores/redis.pymem0/configs/vector_stores/s3_vectors.pymem0/configs/vector_stores/valkey.pymem0/utils/scoring.pymem0/vector_stores/azure_ai_search.pymem0/vector_stores/chroma.pymem0/vector_stores/databricks.pymem0/vector_stores/elasticsearch.pymem0/vector_stores/faiss.pymem0/vector_stores/langchain.pymem0/vector_stores/milvus.pymem0/vector_stores/mongodb.pymem0/vector_stores/opensearch.pymem0/vector_stores/pgvector.pymem0/vector_stores/pinecone.pymem0/vector_stores/qdrant.pymem0/vector_stores/redis.pymem0/vector_stores/s3_vectors.pymem0/vector_stores/valkey.pytests/memory/test_safe_deepcopy_config.pytests/utils/test_scoring.pytests/vector_stores/test_azure_mysql.pytests/vector_stores/test_cassandra.pytests/vector_stores/test_chroma.pytests/vector_stores/test_databricks.pytests/vector_stores/test_elasticsearch.pytests/vector_stores/test_faiss.pytests/vector_stores/test_langchain_vector_store.pytests/vector_stores/test_milvus.pytests/vector_stores/test_mongodb.pytests/vector_stores/test_opensearch.pytests/vector_stores/test_pgvector.pytests/vector_stores/test_pinecone.pytests/vector_stores/test_qdrant.pytests/vector_stores/test_redis.pytests/vector_stores/test_s3_vectors.pytests/vector_stores/test_valkey.py
本文档记录了 Mem0 开源实现中支持的向量存储提供商。向量存储作为嵌入向量的主要存储后端,通过相似度匹配实现语义记忆搜索。Mem0 目前支持超过 24 种实现,涵盖从本地轻量级数据库到企业级云解决方案。
提供商架构
Mem0 使用工厂模式动态实例化向量存储实现。VectorStoreFactory 类将提供商字符串映射到对应的实现类,从而根据用户配置在运行时选择提供商。
工厂模式与数据流
工厂维护一个受支持提供商的注册表。当 Memory 实例初始化时,会通过 VectorStoreFactory 加载相应的类并传递配置参数。
来源: 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 字典定义了配置字符串与实现模块之间的映射关系。
| 类别 | 提供商键 | 实现类 | 文件路径 |
|---|---|---|---|
| 云/远程 | qdrant | Qdrant | mem0/vector_stores/qdrant.py:29 |
pinecone | PineconeDB | mem0/vector_stores/pinecone.py:22 | |
mongodb | MongoDB | mem0/vector_stores/mongodb.py:28 | |
azure_ai_search | AzureAISearch | mem0/vector_stores/azure_ai_search.py:21 | |
| 自托管 | pgvector | PGVector | mem0/vector_stores/pgvector.py:41 |
milvus | MilvusDB | mem0/vector_stores/milvus.py:25 | |
chroma | ChromaDB | mem0/vector_stores/chroma.py:23 | |
elasticsearch | ElasticsearchDB | mem0/vector_stores/elasticsearch.py:24 | |
opensearch | OpenSearchDB | mem0/vector_stores/opensearch.py:24 | |
| 本地/其他 | faiss | FAISS | mem0/vector_stores/faiss.py:127 |
valkey | ValkeyDB | mem0/vector_stores/valkey.py:25 | |
databricks | Databricks | mem0/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_id、agent_id、run_id和actor_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)配合ConnectionPool和psycopg2配合ThreadedConnectionPool之间动态切换mem0/vector_stores/pgvector.py:9-26。 - 索引策略: 支持
HNSW和DiskANN(通过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 模式中定义了一个类型为
BM25的Function,用于从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。 - 策略: 支持
euclidean、inner_product和cosine距离策略mem0/vector_stores/faiss.py:142-143。
来源: mem0/vector_stores/faiss.py:127-173
关键函数与数据流
下图展示了在不同提供商之间搜索记忆的内部逻辑,将配置与具体的类方法连接起来。
来源: 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/ 目录下。这些模型在工厂实例化提供商之前对输入参数进行校验。
| 配置类 | 关键字段 | 文件路径 |
|---|---|---|
ChromaDbConfig | path、host、port、api_key、tenant | mem0/configs/vector_stores/chroma.py:6 |
ElasticsearchConfig | cloud_id、api_key、host、port、user、password | mem0/configs/vector_stores/elasticsearch.py:12 |
OpenSearchConfig | use_ssl、verify_certs、http_auth、user、password | mem0/configs/vector_stores/opensearch.py:12 |
PGVectorConfig | dbname、user、password、diskann、hnsw、sslmode | mem0/configs/vector_stores/pgvector.py:5 |
MilvusConfig | url、token、db_name、metric_type | mem0/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,并调用提供商的 upsert、bulk 或 insert_many 方法。 |
search() | 向量相似度搜索。 | 接收向量和可选过滤器;返回包含 id、score 和 payload 的 OutputData 对象。 |
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