菜单

嵌入组件

相关源文件

本文档介绍了 PrivateGPT 的嵌入组件,它负责将文本转换为能够捕捉语义意义的向量表示(嵌入)。这些嵌入是检索增强生成 (RAG) 功能的基础,支持语义搜索和相关文档检索。

有关嵌入如何与 LLM 集成以生成响应的信息,请参阅LLM 组件;有关向量存储如何管理这些嵌入的详细信息,请参阅向量存储组件

目的与作用

嵌入组件通过以下方式充当文本数据和向量表示之间的关键桥梁:

  1. 在摄取过程中将文档块转换为向量嵌入
  2. 将用户查询转换为向量以进行语义搜索
  3. 提供统一的接口以连接多个嵌入提供商(本地和云端)

来源:private_gpt/components/embedding/embedding_component.py12-14

架构

嵌入组件实现为一个单例类,它通过一个通用接口封装了各种嵌入模型实现。这种架构使 PrivateGPT 能够独立于提供商,从而在选择嵌入技术方面具有灵活性。

来源:private_gpt/components/embedding/embedding_component.py12-167

支持的嵌入提供商

嵌入组件支持多种嵌入技术

提供商类型描述配置模式
HuggingFace本地在本地使用 transformer 模型huggingface
Ollama本地使用 Ollama 进行本地嵌入生成ollama
OpenAI云服务使用 OpenAI 的嵌入 APIopenai
Azure OpenAI云服务使用微软的 Azure OpenAI 服务azopenai
Google Gemini云服务使用 Google 的 Gemini 嵌入模型gemini
Mistral AI云服务使用 Mistral 的嵌入模型mistralai
AWS Sagemaker云服务使用部署在 AWS Sagemaker 上的自定义模型sagemaker
Mock测试提供用于测试的模拟嵌入mock

每个提供商都需要通过 Poetry extras 安装特定的依赖项

# For example
poetry install --extras embeddings-huggingface
poetry install --extras embeddings-openai
poetry install --extras embeddings-ollama

来源:private_gpt/components/embedding/embedding_component.py20-167

初始化和配置

该组件根据 PrivateGPT 配置系统中的设置进行初始化。它使用 embedding.mode 设置来选择和配置合适的嵌入模型。

来源:private_gpt/components/embedding/embedding_component.py16-167

配置示例

不同嵌入提供商的配置设置示例

HuggingFace 配置

OpenAI 配置

Ollama 配置

来源:private_gpt/components/embedding/embedding_component.py20-113

实现细节

依赖管理

该组件具有强大的错误处理机制,用于处理缺失的依赖项。如果用户尝试使用未安装必需依赖项的嵌入提供商,则会显示有用的错误消息。

来源:private_gpt/components/embedding/embedding_component.py22-29

提供商特定功能

Ollama 集成

对于 Ollama 嵌入提供商,该组件包含特殊处理,用于:

  1. 正确格式化模型名称(如果未指定,则添加 :latest 标签)
  2. 验证与 Ollama 服务器的连接
  3. 在启用 autopull_models 时自动拉取模型

来源:private_gpt/components/embedding/embedding_component.py70-113

用于测试的 Mock 提供商

提供了一个 MockEmbedding 提供商用于测试,它可以在不需要任何外部依赖的情况下生成一致的 384 维嵌入。

来源:private_gpt/components/embedding/embedding_component.py164-167

与 PrivateGPT 服务的集成

嵌入组件与 PrivateGPT 系统中的多个服务集成

来源:private_gpt/components/embedding/embedding_component.py12-14

文档摄取管道

在文档摄取过程中

  1. 文档被解析并分割成易于管理的块
  2. 嵌入组件将这些块转换为向量嵌入
  3. 嵌入连同元数据一起存储在向量存储中,节点存储包含元数据

查询处理管道

当用户提交查询时

  1. 嵌入组件将查询转换为向量嵌入
  2. 此嵌入用于在向量存储中搜索语义上相似的文档块
  3. 检索到的块为 LLM 生成响应提供上下文

性能和部署注意事项

选择嵌入提供商时,请考虑以下因素

提供商延迟质量隐私成本
本地(HuggingFace、Ollama)较高(依赖硬件)取决于模型高(数据保留在本地)仅硬件成本
云端(OpenAI、Azure 等)较低(通常更快)通常较高较低(数据发送到外部)按使用付费

硬件要求

本地嵌入模型通常需要:

  • 仅 CPU:4+ CPU 核心,8GB+ RAM
  • GPU 加速:CUDA 兼容 GPU,具有 4GB+ VRAM

基于云的嵌入仅需要稳定的互联网连接和有效的 API 凭据。

来源:private_gpt/components/embedding/embedding_component.py20-167

使用自定义提供商进行扩展

要添加对新嵌入提供商的支持

  1. 创建 LlamaIndex BaseEmbedding 接口的实现
  2. EmbeddingComponent__init__ 方法中添加一个新 case
  3. 在 PrivateGPT 的配置中定义必要的设置
  4. 为新提供商的依赖项创建一个 Poetry extra

自定义嵌入提供商可以在 private_gpt/components/embedding/custom/ 中实现,Sagemaker 实现即为例证。

来源:private_gpt/components/embedding/embedding_component.py36-48