本文档介绍了 PrivateGPT 的嵌入组件,它负责将文本转换为能够捕捉语义意义的向量表示(嵌入)。这些嵌入是检索增强生成 (RAG) 功能的基础,支持语义搜索和相关文档检索。
有关嵌入如何与 LLM 集成以生成响应的信息,请参阅LLM 组件;有关向量存储如何管理这些嵌入的详细信息,请参阅向量存储组件。
嵌入组件通过以下方式充当文本数据和向量表示之间的关键桥梁:
来源: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 的嵌入 API | openai |
| 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
不同嵌入提供商的配置设置示例
来源:private_gpt/components/embedding/embedding_component.py20-113
该组件具有强大的错误处理机制,用于处理缺失的依赖项。如果用户尝试使用未安装必需依赖项的嵌入提供商,则会显示有用的错误消息。
来源:private_gpt/components/embedding/embedding_component.py22-29
对于 Ollama 嵌入提供商,该组件包含特殊处理,用于:
:latest 标签)autopull_models 时自动拉取模型来源:private_gpt/components/embedding/embedding_component.py70-113
提供了一个 MockEmbedding 提供商用于测试,它可以在不需要任何外部依赖的情况下生成一致的 384 维嵌入。
来源:private_gpt/components/embedding/embedding_component.py164-167
嵌入组件与 PrivateGPT 系统中的多个服务集成
来源:private_gpt/components/embedding/embedding_component.py12-14
在文档摄取过程中
当用户提交查询时
选择嵌入提供商时,请考虑以下因素
| 提供商 | 延迟 | 质量 | 隐私 | 成本 |
|---|---|---|---|---|
| 本地(HuggingFace、Ollama) | 较高(依赖硬件) | 取决于模型 | 高(数据保留在本地) | 仅硬件成本 |
| 云端(OpenAI、Azure 等) | 较低(通常更快) | 通常较高 | 较低(数据发送到外部) | 按使用付费 |
本地嵌入模型通常需要:
基于云的嵌入仅需要稳定的互联网连接和有效的 API 凭据。
来源:private_gpt/components/embedding/embedding_component.py20-167
要添加对新嵌入提供商的支持
BaseEmbedding 接口的实现EmbeddingComponent 的 __init__ 方法中添加一个新 case自定义嵌入提供商可以在 private_gpt/components/embedding/custom/ 中实现,Sagemaker 实现即为例证。
来源:private_gpt/components/embedding/embedding_component.py36-48