agentic_huge_data_base / wiki
页面 Mem0 · 6.3 嵌入提供方·DeepWiki 中文全文译文

6.3 · 嵌入提供方(Embedding Providers)

长期记忆与上下文管理 · 聚焦本章的模块关系、源码依据与实现要点。

项目Mem0 章节6.3 状态全文译文 模块检索、召回与索引、模型调用与提供方适配、界面与交互、系统架构
源码线索
  • docs/components/embedders/models/google_AI.mdx
  • docs/components/embedders/models/huggingface.mdx
  • docs/components/embedders/models/ollama.mdx
  • docs/components/embedders/models/openai.mdx
  • docs/components/embedders/models/together.mdx
  • docs/components/embedders/models/vertexai.mdx
  • docs/components/llms/models/ollama.mdx
  • mem0-ts/src/oss/src/embeddings/azure.ts
  • mem0-ts/src/oss/src/embeddings/google.ts
  • mem0-ts/src/oss/src/embeddings/ollama.ts
模块标签
  • 检索、召回与索引
  • 模型调用与提供方适配
  • 界面与交互
  • 系统架构
  • 测试、发布与运维

章节正文

嵌入提供方

嵌入向量提供者

相关源文件

本章引用的主要源码文件:

  • docs/components/embedders/models/google_AI.mdx
  • docs/components/embedders/models/huggingface.mdx
  • docs/components/embedders/models/ollama.mdx
  • docs/components/embedders/models/openai.mdx
  • docs/components/embedders/models/together.mdx
  • docs/components/embedders/models/vertexai.mdx
  • docs/components/llms/models/ollama.mdx
  • mem0-ts/src/oss/src/embeddings/azure.ts
  • mem0-ts/src/oss/src/embeddings/google.ts
  • mem0-ts/src/oss/src/embeddings/ollama.ts
  • mem0-ts/src/oss/src/embeddings/openai.ts
  • mem0-ts/src/oss/src/llms/ollama.ts
  • mem0-ts/src/oss/src/vector_stores/azure_ai_search.ts
  • mem0-ts/src/oss/src/vector_stores/vectorize.ts
  • mem0-ts/src/oss/tests/azure-embedder.test.ts
  • mem0-ts/src/oss/tests/google-embedder.test.ts
  • mem0-ts/src/oss/tests/ollama-embedder.test.ts
  • mem0-ts/src/oss/tests/openai-embedder.test.ts
  • mem0/configs/embeddings/base.py
  • mem0/embeddings/base.py
  • mem0/embeddings/gemini.py
  • mem0/embeddings/huggingface.py
  • mem0/embeddings/ollama.py
  • mem0/embeddings/openai.py
  • mem0/embeddings/vertexai.py
  • mem0/llms/gemini.py
  • tests/embeddings/test_huggingface_embeddings.py
  • tests/embeddings/test_ollama_embeddings.py
  • tests/embeddings/test_openai_embeddings.py
  • tests/embeddings/test_vertexai_embeddings.py

本文档介绍了 Mem0 支持的嵌入向量提供者、它们的架构以及如何集成到记忆系统中。嵌入向量提供者将文本转换为高维向量,从而实现语义搜索功能。

架构总览

Mem0 的嵌入向量系统使用工厂模式,通过统一的接口支持多个嵌入向量提供者。所有嵌入器都继承自 EmbeddingBase 并实现 embed() 方法。

基类和工厂
Mem0 · 基类和工厂 · 图 1
Mem0 · 基类和工厂 · 图 1

来源: mem0/embeddings/base.py:1-32, mem0/configs/embeddings/base.py:10-111, mem0/embeddings/openai.py:11-12, mem0/embeddings/huggingface.py:15-16

EmbeddingBase 抽象类

所有嵌入向量提供者都继承自 EmbeddingBase,该类定义了嵌入实现的契约:

class EmbeddingBase(ABC):
    def __init__(self, config: Optional[BaseEmbedderConfig] = None)

    @abstractmethod
    def embed(self, text, memory_action: Optional[Literal["add", "search", "update"]])

embed() 方法接受一个 memory_action 参数,允许提供者为不同的操作(添加、搜索或更新)使用不同的嵌入策略。

来源: mem0/embeddings/base.py:7-32

支持的提供者

基于云的提供者
OpenAI
  • 默认模型: text-embedding-3-small mem0/embeddings/openai.py:15
  • 默认维度: 1536 mem0/embeddings/openai.py:19
  • 关键特性: 支持通过可自定义维度的 Matryoshka 嵌入。仅当用户显式设置维度时,才会将维度传递给 API,以保持与非 Matryoshka 后端的兼容性 mem0/embeddings/openai.py:16-18
  • API 密钥: OPENAI_API_KEY 环境变量或配置参数 mem0/embeddings/openai.py:21

该实现会自动将批量请求切分为每组 100 个,以保持在 API 限制范围内 mem0/embeddings/openai.py:62-66

来源: mem0/embeddings/openai.py:11-76, tests/embeddings/test_openai_embeddings.py:112-125

Google Gemini(Google AI)
  • 默认模型: models/gemini-embedding-001 mem0/embeddings/gemini.py:15
  • 默认维度: 768 mem0/embeddings/gemini.py:16
  • 客户端: 使用 google.genai.Client mem0/embeddings/gemini.py:20
  • 特殊参数: 支持通过 types.EmbedContentConfig 设置 output_dimensionality mem0/embeddings/gemini.py:34-37

来源: mem0/embeddings/gemini.py:11-40

Vertex AI
  • 默认模型: gemini-embedding-001 mem0/embeddings/vertexai.py:15
  • 认证: 使用 GCPAuthenticator 进行集中式 Google Cloud 认证 mem0/embeddings/vertexai.py:27-31
  • 任务特定嵌入: 支持基于记忆操作的专业嵌入类型:
    • add/updateRETRIEVAL_DOCUMENT mem0/embeddings/vertexai.py:19-20
    • searchRETRIEVAL_QUERY mem0/embeddings/vertexai.py:21
  • 任务类型映射:memory_action 映射到 TextEmbeddingInput 中的 task_type mem0/embeddings/vertexai.py:54-61

来源: mem0/embeddings/vertexai.py:11-64, tests/embeddings/test_vertexai_embeddings.py:91-115

本地和自托管提供者
Ollama
  • 默认模型: nomic-embed-text mem0/embeddings/ollama.py:28
  • 默认维度: 512 mem0/embeddings/ollama.py:29
  • 自动管理: 通过 self.client.list() 检查模型是否存在于本地,如果缺失则通过 self.client.pull() 拉取 mem0/embeddings/ollama.py:38-49
  • TypeScript 实现: 包含防御性检查,确保在调用 Ollama 客户端之前输入是字符串 mem0-ts/src/oss/src/embeddings/ollama.ts:31-35

来源: mem0/embeddings/ollama.py:24-66, mem0-ts/src/oss/src/embeddings/ollama.ts:6-70

Hugging Face
  • 模式: 支持通过 sentence_transformers 进行本地执行,以及通过兼容 OpenAI 的客户端进行远程 TEI(文本嵌入推理)mem0/embeddings/huggingface.py:19-25
  • 本地模式: 使用 SentenceTransformer,默认模型为 multi-qa-MiniLM-L6-cos-v1。通过查询模型维度自动设置 embedding_dims mem0/embeddings/huggingface.py:23-27
  • TEI 模式: 通过设置 huggingface_base_url 触发,使用 openai.OpenAI 客户端 mem0/embeddings/huggingface.py:19-21

来源: mem0/embeddings/huggingface.py:15-44, tests/embeddings/test_huggingface_embeddings.py:75-103

实现细节

数据流:文本到向量空间

下图展示了自然语言输入如何通过代码实体流动以生成向量。

Mem0 · 数据流:文本到向量空间 · 图 2
Mem0 · 数据流:文本到向量空间 · 图 2

来源: mem0/embeddings/openai.py:37-55, mem0/embeddings/base.py:21-32, tests/embeddings/test_openai_embeddings.py:17-30

双模式支持(HuggingFace)

HuggingFace 提供者根据是否存在 huggingface_base_url 动态切换本地库调用和网络 API 调用。

Mem0 · 双模式支持(HuggingFace) · 图 3
Mem0 · 双模式支持(HuggingFace) · 图 3

来源: mem0/embeddings/huggingface.py:16-44, tests/embeddings/test_huggingface_embeddings.py:18-27, tests/embeddings/test_huggingface_embeddings.py:75-103

批量处理

OpenAI 和 Ollama(TypeScript)提供者支持批量操作以优化网络开销。

特性实现文件
批量大小每次切分 100 个文本mem0/embeddings/openai.py:62
规范化\n 替换为空格mem0/embeddings/openai.py:63
排序按响应索引排序mem0/embeddings/openai.py:75
TS 批量处理使用 Promise.all 进行映射mem0-ts/src/oss/src/embeddings/ollama.ts:44-47

来源: mem0/embeddings/openai.py:57-76, mem0-ts/src/oss/src/embeddings/openai.ts:30-49

配置参数

配置通过 BaseEmbedderConfig 管理,该配置集中了所有提供者的参数。

参数用途提供者
model模型标识符全部
api_key认证令牌云提供者
embedding_dims向量大小OpenAI、Vertex、Gemini、HF
ollama_base_url本地服务器地址Ollama
huggingface_base_urlTEI 端点地址HuggingFace
vertex_credentials_jsonGCP 服务账户路径VertexAI
http_client_proxies通过企业代理路由Azure/通用

来源: mem0/configs/embeddings/base.py:10-111, mem0/embeddings/openai.py:18-27