配置系统
配置系统
相关源文件
本章引用的主要源码文件:
docs/components/vectordbs/dbs/vectorize.mdxdocs/open-source/multimodal-support.mdxmem0-ts/pnpm-lock.yamlmem0-ts/src/oss/package.jsonmem0-ts/src/oss/src/config/defaults.tsmem0-ts/src/oss/src/config/manager.tsmem0-ts/src/oss/src/index.tsmem0-ts/src/oss/src/llms/anthropic.tsmem0-ts/src/oss/src/llms/deepseek.tsmem0-ts/src/oss/src/llms/groq.tsmem0-ts/src/oss/src/llms/openai.tsmem0-ts/src/oss/src/llms/openai_structured.tsmem0-ts/src/oss/src/storage/SQLiteManager.tsmem0-ts/src/oss/src/types/index.tsmem0-ts/src/oss/src/utils/factory.tsmem0-ts/src/oss/tests/deepseek.test.tsmem0-ts/src/oss/tests/factory.unit.test.tsmem0-ts/src/oss/tests/openai-llm.test.tsmem0-ts/src/oss/tests/openai-structured-llm.test.tsmem0/configs/base.pymem0/configs/vector_stores/azure_ai_search.pymem0/configs/vector_stores/vertex_ai_vector_search.pymem0/configs/vector_stores/weaviate.pymem0/proxy/main.pymem0/vector_stores/supabase.pymem0/vector_stores/vertex_ai_vector_search.pymem0/vector_stores/weaviate.pytests/vector_stores/test_vertex_ai_vector_search.py
mem0 中的配置系统负责管理大语言模型(LLM)、嵌入向量生成器、向量存储、图存储和重排序器等组件设置的初始化与校验。该系统采用基于提供商的架构,用户需指定使用的提供商(例如 "openai"、"anthropic")及其相关参数,系统会校验并实例化对应的实现。
配置结构
配置系统采用分层结构,顶层为 MemoryConfig,其中包含每个组件类型的嵌套配置。Python 和 TypeScript 实现遵循相似的模式,但各自采用语言特定的约定。
Python 配置模式
Python 配置类 Python 实现使用 Pydantic 的 BaseModel 进行模式定义和校验。
MemoryConfig:根配置类,包含所有组件设置mem0/configs/base.py:29-57。LlmConfig:处理大语言模型(LLM)的提供商字符串和配置字典mem0/llms/configs.py:6-35。EmbedderConfig:处理嵌入向量生成器的提供商字符串和配置字典mem0/embeddings/configs.py:6-32。VectorStoreConfig:处理提供商信息以及提供商特定配置类的动态加载mem0/vector_stores/configs.py:10-67。
来源:mem0/configs/base.py:29-57、mem0/llms/configs.py:6-35、mem0/embeddings/configs.py:6-32、mem0/vector_stores/configs.py:10-67
TypeScript 配置模式
TypeScript 配置类型 TypeScript 实现使用 Zod 进行运行时校验,并使用接口确保类型安全。
MemoryConfigSchema:用于校验合并后配置的 Zod 对象mem0-ts/src/oss/src/types/index.ts:101-145。MemoryConfig:定义内存配置结构的接口mem0-ts/src/oss/src/types/index.ts:54-72。LLMConfig:大语言模型(LLM)特定参数(如apiKey、model和baseURL)的接口mem0-ts/src/oss/src/types/index.ts:43-52。VectorStoreConfig:向量存储参数的接口,允许传递提供商特定选项的字段mem0-ts/src/oss/src/types/index.ts:24-31。
来源:mem0-ts/src/oss/src/types/index.ts:15-145
配置优先级规则
配置值采用多层优先级系统进行解析。在配置对象中显式指定的值会覆盖默认值和环境变量。
优先级层级
| 优先级 | 来源 | 实现细节 |
|---|---|---|
| 1(最高) | 显式配置字典/对象 | 传递给构造函数或 from_config |
| 2(中等) | 环境变量 | 在提供商的 __init__ 或 ConfigManager 中解析 |
| 3(最低) | 默认值 | 定义在 BaseLlmConfig 或 DEFAULT_MEMORY_CONFIG 中 |
Python 优先级实现 在 Python 中,环境变量解析通常在提供商的 __init__ 方法中进行。例如,在 OpenAIStructuredLLM 中,API 密钥的解析会先检查配置,再检查环境变量 mem0/llms/openai_structured.py:17-18。
TypeScript 优先级实现 ConfigManager.mergeConfig 方法会显式地将用户提供的部分配置与 DEFAULT_MEMORY_CONFIG 合并 mem0-ts/src/oss/src/config/manager.ts:5-163。该方法还会处理键名规范化(例如,将 lmstudio_base_url 或 url 映射为 baseURL),以保持与 Python SDK 配置的兼容性 mem0-ts/src/oss/src/config/manager.ts:24-29。
来源:mem0/llms/openai_structured.py:17-18、mem0-ts/src/oss/src/config/manager.ts:5-163、mem0-ts/src/oss/src/config/defaults.ts:3-35
环境变量解析
系统识别多种环境变量,以支持零配置或便于管理密钥的设置。
| 组件 | 环境变量 | 文件引用 |
|---|---|---|
| 遥测 | MEM0_TELEMETRY | mem0/memory/telemetry.py:14 |
| 遥测 | MEM0_TELEMETRY_SAMPLE_RATE | mem0/memory/telemetry.py:47 |
| 存储目录 | MEM0_DIR | mem0/configs/base.py:13 |
| OpenAI 大语言模型(LLM) | OPENAI_API_KEY | mem0/llms/openai_structured.py:17 |
| OpenAI 基础地址 | OPENAI_API_BASE | mem0/llms/openai_structured.py:18 |
来源:mem0/memory/telemetry.py:14-47、mem0/configs/base.py:11-13、mem0/llms/openai_structured.py:17-18
配置校验与工厂
TypeScript 配置合并
TypeScript SDK 中的 ConfigManager 对子组件执行复杂的合并逻辑:
- 向量存储维度:优先使用用户提供的维度,其次回退到嵌入向量生成器配置中的维度,或者留空以便在初始化时自动检测
mem0-ts/src/oss/src/config/manager.ts:66-69。 - 历史存储:将顶层的
historyDbPath与historyStore.config合并,同时确保 SQLite 特定路径被正确映射mem0-ts/src/oss/src/config/manager.ts:136-155。 - 校验:最后一步调用
MemoryConfigSchema.parse(mergedConfig)mem0-ts/src/oss/src/config/manager.ts:161。
组件工厂
校验通过后,配置会被传递给工厂,由工厂实例化具体的提供商类。
来源:mem0-ts/src/oss/src/config/manager.ts:5-163、mem0-ts/src/oss/src/utils/factory.ts:40-136
基础配置类
BaseLlmConfig(Python)
BaseLlmConfig 类是所有大语言模型(LLM)提供商的基础,包含整个生态系统中通用的参数 mem0/configs/llms/base.py:7-28。
| 参数 | 类型 | 默认值 | 用途 |
|---|---|---|---|
model | Optional[Union[str, Dict]] | None | 模型标识符 mem0/configs/llms/base.py:18 |
temperature | float | 0.1 | 输出随机性 mem0/configs/llms/base.py:19 |
max_tokens | int | 2000 | 生成限制 mem0/configs/llms/base.py:21 |
top_p | float | 0.1 | 核采样 mem0/configs/llms/base.py:22 |
reasoning_effort | Optional[str] | None | 用于 o1/o3 等模型 mem0/configs/llms/base.py:26 |
http_client_proxies | Optional[Union[Dict, str]] | None | 代理设置 mem0/configs/llms/base.py:27 |
向量存储配置(提供商特定)
提供商通常对其特定配置有严格的校验。例如,AzureAISearchConfig 使用 @model_validator 来阻止不支持的遗留字段(如 use_compression),并确保 compression_type 是有效的 mem0/configs/vector_stores/azure_ai_search.py:25-55。
来源:mem0/configs/llms/base.py:7-67、mem0/configs/vector_stores/azure_ai_search.py:6-57
遥测配置
遥测是一个全局配置方面,通过环境变量和单例模式进行管理。
- 控制:默认通过
MEM0_TELEMETRY启用mem0/memory/telemetry.py:14。 - 采样:热路径事件以
MEM0_TELEMETRY_SAMPLE_RATE(默认 0.1)定义的速率进行采样,而生命周期事件(如mem0.init)始终触发mem0/memory/telemetry.py:31-51。 - 用户标识:系统会生成或检索一个唯一的
user_id,存储在本地配置或向量存储中,用于匿名化遥测数据mem0/memory/setup.py:35-67。
来源:mem0/memory/telemetry.py:14-70、mem0/memory/setup.py:12-67