向量存储总览
向量存储总览
相关源文件
以下文件为本维基页面的生成提供了上下文:
Makefiledocs/components/vectordbs/config.mdxdocs/components/vectordbs/dbs/chroma.mdxdocs/components/vectordbs/dbs/milvus.mdxdocs/components/vectordbs/dbs/qdrant.mdxdocs/components/vectordbs/overview.mdxmem0-ts/src/oss/src/utils/scoring.tsmem0/configs/vector_stores/chroma.pymem0/configs/vector_stores/milvus.pymem0/configs/vector_stores/qdrant.pymem0/utils/factory.pymem0/utils/scoring.pymem0/vector_stores/chroma.pymem0/vector_stores/configs.pymem0/vector_stores/milvus.pymem0/vector_stores/qdrant.pypoetry.lockpyproject.tomltests/utils/test_scoring.pytests/vector_stores/test_chroma.pytests/vector_stores/test_milvus.pytests/vector_stores/test_qdrant.py
向量存储是 Mem0 中语义记忆的主要存储层。它们支持对嵌入向量进行快速相似性搜索,使记忆系统能够基于语义含义(而非精确关键词匹配)检索相关记忆。本页面涵盖向量存储抽象层、工厂模式以及常见操作。
关于特定向量存储提供商的详细配置,请参见向量存储提供商(5.2)。关于配置模式与校验,请参见向量存储配置(5.3)。
在记忆系统中的用途
Mem0 中的向量存储承担两个关键功能:
- 嵌入向量存储:存储从记忆内容生成的向量嵌入及其元数据。
- 语义检索:执行近似最近邻(ANN)搜索,以查找与查询相似的记忆。
向量存储层通过 VectorStoreBase 接口 mem0/vector_stores/base.py:24 与记忆系统的其他部分解耦,使用户可以根据部署需求、规模及性能要求,从超过 20 个受支持的提供商 mem0/vector_stores/configs.py:13-38 中进行选择。
来源: mem0/vector_stores/base.py:1-24、docs/components/vectordbs/overview.mdx:1-37、mem0/vector_stores/configs.py:13-38
架构总览
下图展示了核心记忆系统与向量存储抽象层之间的关系。
系统架构到代码实体的映射
工作流:
- 记忆系统使用指定提供商和连接详情的
VectorStoreConfig进行初始化mem0/vector_stores/configs.py:6-11。 VectorStoreFactory.create()使用importlib动态加载相应的提供商类mem0/utils/factory.py:1-27。- 提供商实例实现了
VectorStoreBase接口,以提供标准化操作。 - 嵌入器生成向量,然后传递给存储以进行插入或搜索。
来源: mem0/utils/factory.py:167-206、mem0/vector_stores/configs.py:6-68、mem0/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-271、mem0/vector_stores/milvus.py:25-180、mem0/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() 时,工厂会执行以下操作:
- 根据提供商名称解析类路径
mem0/utils/factory.py:194。 - 通过
load_class辅助函数使用importlib.import_module加载类mem0/utils/factory.py:24-27。 - 将配置(如果以字典形式提供)转换为提供商特定的配置对象
mem0/utils/factory.py:195-197。
来源: mem0/utils/factory.py:167-206、mem0/utils/factory.py:24-27
VectorStoreConfig 配置系统
配置系统使用 Pydantic 进行校验和类型安全。
配置流程
关键特性:
- 动态校验:
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-68、mem0/configs/vector_stores/qdrant.py:6-48、mem0/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:使用类型为
BM25的Function,从text字段自动生成稀疏向量mem0/vector_stores/milvus.py:97-103。它还添加了SPARSE_INVERTED_INDEX以实现高效检索mem0/vector_stores/milvus.py:109-114。
来源: mem0/vector_stores/qdrant.py:88-154、mem0/vector_stores/milvus.py:84-116
标准操作模式
插入操作
插入通常涉及准备特定于后端的数据结构(例如 Qdrant 的 PointStruct 或 Milvus 的字典)。
- Qdrant:
insert遍历向量和载荷,创建PointStruct对象mem0/vector_stores/qdrant.py:178-194。 - Milvus:
insert构建一个字典列表,如果模式支持,则包含用于 BM25 的text字段mem0/vector_stores/milvus.py:129-137。
搜索与过滤
所有搜索操作都支持元数据过滤。
- 过滤:针对
user_id、agent_id和run_id的过滤器会被转换为提供商特定的语法。Qdrant 使用Filter和FieldCondition对象mem0/vector_stores/qdrant.py:226-244。Milvus 使用布尔表达式字符串mem0/vector_stores/milvus.py:139-155。 - 评分:结果以
OutputData或类似对象的列表形式返回,其中包含id、score和payloadmem0/vector_stores/milvus.py:157-180、mem0/vector_stores/chroma.py:17-21。
来源: mem0/vector_stores/qdrant.py:178-244、mem0/vector_stores/milvus.py:118-180、mem0/vector_stores/chroma.py:143-161
嵌入向量维度
一个常见的配置点是 embedding_model_dims。虽然许多模型默认使用 1536(OpenAI),但用户必须将其与特定的嵌入提供商匹配,以避免对齐错误 docs/components/vectordbs/overview.mdx:47-54。该值通常在向量存储类的初始化过程中传入 mem0/vector_stores/qdrant.py:33、mem0/vector_stores/milvus.py:31。
来源: mem0/configs/vector_stores/qdrant.py:12、mem0/vector_stores/milvus.py:41、docs/components/vectordbs/overview.mdx:47-54