存储后端
存储后端
相关源文件
本章引用的主要源码文件:
docs/components/vectordbs/dbs/milvus.mdxmem0-ts/src/oss/src/utils/scoring.tsmem0/__init__.pymem0/configs/prompts.pymem0/configs/vector_stores/chroma.pymem0/configs/vector_stores/milvus.pymem0/configs/vector_stores/qdrant.pymem0/memory/main.pymem0/memory/storage.pymem0/memory/utils.pymem0/utils/scoring.pymem0/vector_stores/chroma.pymem0/vector_stores/milvus.pymem0/vector_stores/qdrant.pytests/configs/test_prompts.pytests/memory/test_main.pytests/test_chatty_llm_parsing.pytests/test_main.pytests/test_memory.pytests/test_proxy.pytests/utils/test_scoring.pytests/vector_stores/test_chroma.pytests/vector_stores/test_milvus.pytests/vector_stores/test_qdrant.py
存储后端为 Mem0 的记忆系统提供了持久化存储层。这些后端负责存储记忆的嵌入向量、元数据和原始内容,从而支持语义相似度搜索和混合检索。该架构将基于向量的存储与关系型历史记录追踪以及基于图的关系型存储(详见图记忆)分离开来。
本页面涵盖了高层级的存储架构、通用接口以及提供商生态系统。关于索引策略的详细信息,请参阅向量存储概览。关于特定提供商的指南,请参阅向量存储提供商。关于配置参数,请参阅向量存储配置。关于审计日志和时间查询,请参阅历史记录与审计追踪。
架构总览
存储层基于一个与提供商无关的工厂模式构建,该模式在 VectorStoreFactory mem0/utils/factory.py:167-202 中实现。这使得 Mem0 能够通过统一接口支持超过 20 种向量数据库实现。Memory 类负责编排这些后端,以对事实执行增删改查(CRUD)操作 mem0/memory/main.py:32-41。
来源: mem0/memory/main.py:24-41, mem0/utils/factory.py:167-202, mem0/memory/storage.py:11-19
通用接口
所有向量存储提供商都继承自 VectorStoreBase,从而确保不同数据库引擎之间的行为一致。
来源: 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_id、agent_id 或 run_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_memory和new_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