工厂模式与组件系统
工厂模式与组件系统
相关源文件
本章引用的主要源码文件:
Makefiledocs/components/vectordbs/config.mdxdocs/components/vectordbs/dbs/chroma.mdxdocs/components/vectordbs/dbs/qdrant.mdxdocs/components/vectordbs/dbs/vectorize.mdxdocs/components/vectordbs/overview.mdxmem0-ts/pnpm-lock.yamlmem0-ts/src/oss/package.jsonmem0-ts/src/oss/src/index.tsmem0-ts/src/oss/src/llms/deepseek.tsmem0-ts/src/oss/src/storage/SQLiteManager.tsmem0-ts/src/oss/src/utils/factory.tsmem0-ts/src/oss/tests/deepseek.test.tsmem0-ts/src/oss/tests/factory.unit.test.tsmem0/utils/factory.pymem0/vector_stores/configs.pypoetry.lockpyproject.toml
目的与范围
本文档描述了 Mem0 的工厂模式实现,该模式提供了一种集中式机制,用于实例化和配置 AI 模型提供商、向量存储、图存储和重排序器。工厂系统支持运行时提供商选择、类型安全的配置以及无需修改核心代码即可扩展。
有关可用提供商及其功能的信息,请参阅提供商生态系统。有关配置验证和优先级规则,请参阅配置系统。
概述
Mem0 的工厂模式解决了在五种组件类型(大语言模型、嵌入器、向量存储、图存储和重排序器)中支持 60 多个提供商集成的挑战,同时保持清晰的关注点分离。每个工厂维护一个注册表,将提供商名称映射到实现类,从而实现无需紧耦合的动态实例化。
工厂系统提供以下功能:
- 运行时提供商选择:通过配置切换提供商,无需更改代码。
- 类型安全的配置:使用 Pydantic 验证的提供商特定配置类
mem0/vector_stores/configs.py:6-67。 - 动态类加载:延迟导入提供商实现以最小化依赖
mem0/utils/factory.py:24-27。 - 可扩展性:注册新提供商而无需修改工厂代码
mem0/utils/factory.py:115-126。
组件架构:代码实体空间
此图将高级系统组件映射到其特定的代码标识符和文件位置。
来源:mem0/utils/factory.py:1-284,mem0/vector_stores/configs.py:6-67
工厂类
Mem0 在 Python 中实现了五个工厂类,并在 TypeScript 中为 OSS 版本实现了等效的工厂。
LlmFactory
LlmFactory 使用提供商特定的配置创建大语言模型实例 mem0/utils/factory.py:30-56。它同时支持传统的 BaseLlmConfig 和现代的提供商特定配置类。
| 提供商 | 类路径 | 配置类 |
|---|---|---|
openai | mem0.llms.openai.OpenAILLM | OpenAIConfig |
anthropic | mem0.llms.anthropic.AnthropicLLM | AnthropicConfig |
azure_openai | mem0.llms.azure_openai.AzureOpenAILLM | AzureOpenAIConfig |
ollama | mem0.llms.ollama.OllamaLLM | OllamaConfig |
deepseek | mem0.llms.deepseek.DeepSeekLLM | DeepSeekConfig |
lmstudio | mem0.llms.lmstudio.LMStudioLLM | LMStudioConfig |
vllm | mem0.llms.vllm.VllmLLM | VllmConfig |
groq | mem0.llms.groq.GroqLLM | BaseLlmConfig |
关键方法:
create(provider_name, config, **kwargs):使用配置实例化大语言模型mem0/utils/factory.py:59-112。register_provider(name, class_path, config_class):添加新的大语言模型提供商mem0/utils/factory.py:115-126。get_supported_providers():列出可用的提供商mem0/utils/factory.py:129-136。
来源:mem0/utils/factory.py:30-137,mem0-ts/src/oss/src/utils/factory.ts:62-92
EmbedderFactory
EmbedderFactory 创建嵌入模型实例。它处理 upstash_vector 的特殊情况,该情况可以通过 MockEmbeddings 使用内置嵌入 mem0/utils/factory.py:156-157。
| 提供商 | 类路径 |
|---|---|
openai | mem0.embeddings.openai.OpenAIEmbedding |
huggingface | mem0.embeddings.huggingface.HuggingFaceEmbedding |
fastembed | mem0.embeddings.fastembed.FastEmbedEmbedding |
gemini | mem0.embeddings.gemini.GoogleGenAIEmbedding |
vertexai | mem0.embeddings.vertexai.VertexAIEmbedding |
来源:mem0/utils/factory.py:139-165,mem0-ts/src/oss/src/utils/factory.ts:40-60
VectorStoreFactory
VectorStoreFactory 创建向量数据库客户端。在 Python 实现中,它使用 VectorStoreConfig 的动态查找来验证提供商特定设置 mem0/vector_stores/configs.py:41-67。
关键提供商:qdrant、chroma、pgvector、pinecone、mongodb、milvus、redis、valkey、elasticsearch、opensearch、supabase、weaviate、faiss、azure_ai_search、databricks、upstash_vector mem0/vector_stores/configs.py:13-38。
来源:mem0/utils/factory.py:167-206,mem0/vector_stores/configs.py:6-67,mem0-ts/src/oss/src/utils/factory.ts:94-117
GraphStoreFactory 和 RerankerFactory
- GraphStoreFactory:创建图客户端,例如用于
memgraph、kuzu或neptune的MemoryGraphmem0/utils/factory.py:208-230。 - RerankerFactory:使用与
LlmFactory相同的模式创建重排序器(例如CohereReranker、LLMReranker)mem0/utils/factory.py:232-284。
来源:mem0/utils/factory.py:208-284
动态类加载
load_class() 函数支持延迟加载提供商实现,这对于 pyproject.toml 中大量的可选依赖列表至关重要 pyproject.toml:26-74。
def load_class(class_type):
module_path, class_name = class_type.rsplit(".", 1)
module = importlib.import_module(module_path)
return getattr(module, class_name)
来源:mem0/utils/factory.py:24-27
配置流程与验证
系统确保用户提供的原始字典输入在传递给组件构造函数之前被转换为经过验证的 Pydantic 模型。
初始化流程:自然语言到代码实体
此图说明了用户的配置字符串或字典如何被转换为一个活的代码对象。
验证步骤:
- 字典合并:如果提供了字典,则将其与
**kwargs合并mem0/utils/factory.py:84-87。 - 类型转换:如果提供了
BaseLlmConfig但提供商需要特定类(例如OpenAIConfig),工厂会自动将公共字段(model、api_key、temperature 等)映射到新实例mem0/utils/factory.py:88-104。 - Pydantic 强制执行:最终的配置类(例如
VectorStoreConfig)会验证path、host和api_key等字段mem0/vector_stores/configs.py:41-67。
来源:mem0/utils/factory.py:80-112,mem0/vector_stores/configs.py:41-67
TypeScript 实现
TypeScript OSS 实现(mem0-ts/src/oss)遵循类似的工厂模式,但使用静态 switch 语句而不是动态导入来解析提供商 mem0-ts/src/oss/src/utils/factory.ts:1-136。
TypeScript 中的工厂:
- EmbedderFactory:支持
openai、ollama、google、azure_openai、langchainmem0-ts/src/oss/src/utils/factory.ts:40-60。 - LLMFactory:支持
openai、anthropic、groq、mistral、deepseek等mem0-ts/src/oss/src/utils/factory.ts:62-92。 - VectorStoreFactory:支持
memory、qdrant、redis、vectorize、pgvector等mem0-ts/src/oss/src/utils/factory.ts:94-117。 - HistoryManagerFactory:管理
SQLiteManager、SupabaseHistoryManager和MemoryHistoryManagermem0-ts/src/oss/src/utils/factory.ts:119-136。
来源:mem0-ts/src/oss/src/utils/factory.ts:1-137