嵌入提供方
嵌入向量提供者
相关源文件
本章引用的主要源码文件:
docs/components/embedders/models/google_AI.mdxdocs/components/embedders/models/huggingface.mdxdocs/components/embedders/models/ollama.mdxdocs/components/embedders/models/openai.mdxdocs/components/embedders/models/together.mdxdocs/components/embedders/models/vertexai.mdxdocs/components/llms/models/ollama.mdxmem0-ts/src/oss/src/embeddings/azure.tsmem0-ts/src/oss/src/embeddings/google.tsmem0-ts/src/oss/src/embeddings/ollama.tsmem0-ts/src/oss/src/embeddings/openai.tsmem0-ts/src/oss/src/llms/ollama.tsmem0-ts/src/oss/src/vector_stores/azure_ai_search.tsmem0-ts/src/oss/src/vector_stores/vectorize.tsmem0-ts/src/oss/tests/azure-embedder.test.tsmem0-ts/src/oss/tests/google-embedder.test.tsmem0-ts/src/oss/tests/ollama-embedder.test.tsmem0-ts/src/oss/tests/openai-embedder.test.tsmem0/configs/embeddings/base.pymem0/embeddings/base.pymem0/embeddings/gemini.pymem0/embeddings/huggingface.pymem0/embeddings/ollama.pymem0/embeddings/openai.pymem0/embeddings/vertexai.pymem0/llms/gemini.pytests/embeddings/test_huggingface_embeddings.pytests/embeddings/test_ollama_embeddings.pytests/embeddings/test_openai_embeddings.pytests/embeddings/test_vertexai_embeddings.py
本文档介绍了 Mem0 支持的嵌入向量提供者、它们的架构以及如何集成到记忆系统中。嵌入向量提供者将文本转换为高维向量,从而实现语义搜索功能。
架构总览
Mem0 的嵌入向量系统使用工厂模式,通过统一的接口支持多个嵌入向量提供者。所有嵌入器都继承自 EmbeddingBase 并实现 embed() 方法。
基类和工厂
来源: 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-smallmem0/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-001mem0/embeddings/gemini.py:15 - 默认维度: 768
mem0/embeddings/gemini.py:16 - 客户端: 使用
google.genai.Clientmem0/embeddings/gemini.py:20。 - 特殊参数: 支持通过
types.EmbedContentConfig设置output_dimensionalitymem0/embeddings/gemini.py:34-37。
来源: mem0/embeddings/gemini.py:11-40
Vertex AI
- 默认模型:
gemini-embedding-001mem0/embeddings/vertexai.py:15 - 认证: 使用
GCPAuthenticator进行集中式 Google Cloud 认证mem0/embeddings/vertexai.py:27-31。 - 任务特定嵌入: 支持基于记忆操作的专业嵌入类型:
add/update:RETRIEVAL_DOCUMENTmem0/embeddings/vertexai.py:19-20search:RETRIEVAL_QUERYmem0/embeddings/vertexai.py:21
- 任务类型映射: 将
memory_action映射到TextEmbeddingInput中的task_typemem0/embeddings/vertexai.py:54-61。
来源: mem0/embeddings/vertexai.py:11-64, tests/embeddings/test_vertexai_embeddings.py:91-115
本地和自托管提供者
Ollama
- 默认模型:
nomic-embed-textmem0/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_dimsmem0/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/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/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_url | TEI 端点地址 | HuggingFace |
vertex_credentials_json | GCP 服务账户路径 | VertexAI |
http_client_proxies | 通过企业代理路由 | Azure/通用 |
来源: mem0/configs/embeddings/base.py:10-111, mem0/embeddings/openai.py:18-27