菜单

核心组件

相关源文件

本页面提供了构成 PrivateGPT 架构的核心组件的概述。这些组件是实现 RAG(检索增强生成)管道和系统中其他基本服务的基石。

有关这些组件如何配置的信息,请参阅配置系统。有关这些组件如何被各种服务使用的详细信息,请参阅服务

组件架构概述

PrivateGPT 采用模块化架构构建,拥有多个核心组件协同工作,提供强大的 AI 功能。该系统遵循依赖注入模式,其中组件通过接口进行抽象,从而可以根据配置灵活地更换实现。

来源:README.md81-107

核心组件根据配置设置进行实例化,并通过依赖注入提供给服务。这种架构实现了灵活性,允许用户选择最适合其需求的确切实现。

LLM 组件

LLM(大型语言模型)组件负责根据提示生成文本。它在一致的接口背后抽象了各种 LLM 实现的细节,从而使系统的其余部分能够使用相同的 API 与不同的语言模型进行交互。

支持的 LLM 后端

LLM 组件支持本地和云端推理的多种后端

来源:private_gpt/settings/settings.py108-152

LLM 配置

LLM 组件通过 LLMSettings 类进行配置,其中包括以下关键设置:

设置描述
mode指定要使用的 LLM 后端(例如,“llamacpp”、“openai”、“ollama”)
max_new_tokensLLM 在响应中可以生成的最大 token 数
context_windowLLM 在提示中可以处理的最大 token 数
temperature控制响应中的随机性/创造性(0.1 更偏向事实)
prompt_style提示的格式模板(例如,“llama2”、“llama3”、“mistral”)

每个后端在其各自的设置类中都有额外的配置选项(例如,LlamaCPPSettingsOpenAISettingsOllamaSettings)。

来源:private_gpt/settings/settings.py108-152 private_gpt/settings/settings.py163-335

嵌入组件

Embedding 组件从文本生成向量嵌入,这对于 RAG 管道中的语义搜索至关重要。与 LLM 组件一样,它提供了一个通用接口,用于抽象不同的嵌入模型实现。

支持的嵌入后端

Embedding 组件支持本地和云端嵌入生成的各种后端

来源:private_gpt/settings/settings.py198-238

嵌入配置

Embedding 组件通过 EmbeddingSettings 类进行配置,其中包含以下关键设置:

设置描述
mode指定要使用的嵌入后端
ingest_mode文件在摄取期间的处理方式(simple、batch、parallel、pipeline)
count_workers某些摄取模式下的并行工作数
embed_dim嵌入向量的维度(默认值:384)

每个后端在其各自的设置类中都有额外的配置,例如模型名称和 API 密钥。

来源:private_gpt/settings/settings.py198-238 private_gpt/settings/settings.py184-196

向量存储组件

Vector Store 组件存储和检索向量嵌入,提供 RAG 管道中语义搜索所需的数据库功能。与 LLM 组件一样,它提供了一个通用接口,用于抽象不同的向量数据库后端,以满足不同的扩展和部署需求。

支持的向量存储后端

来源:private_gpt/settings/settings.py155-156

向量存储配置

Vector Store 组件通过 VectorstoreSettings 类进行配置,该类主要指定要使用的数据库后端。每个支持的数据库都有自己的配置类。

数据库设置类描述
QdrantQdrantSettings高性能向量数据库,具有丰富的过滤功能
PostgreSQLPostgresSettings带 pgvector 扩展的关系型数据库
ClickHouseClickHouseSettings面向列的 DBMS,支持向量
MilvusMilvusSettings可扩展的向量数据库,用于相似性搜索
Chroma(默认设置)用于小型使用的简单嵌入数据库

来源:private_gpt/settings/settings.py155-156 private_gpt/settings/settings.py515-587

Node Store 组件

Node Store 组件存储文档块(节点)的元数据。它与 Vector Store 组件协同工作,为 RAG 管道提供完整的信息。虽然向量存储处理用于语义搜索的嵌入,但节点存储保留了上下文检索所需的原始文本和元数据。

支持的节点存储后端

来源:private_gpt/settings/settings.py159-160

节点存储配置

Node Store 组件通过 NodeStoreSettings 类进行配置,该类指定要使用的后端。

当使用 PostgreSQL 后端时,它与 Vector Store 组件的 PostgreSQL 设置共享相同的配置。

来源:private_gpt/settings/settings.py159-160 private_gpt/settings/settings.py489-513

RAG 管道中的组件交互

核心组件在 RAG(检索增强生成)管道中协同工作,该管道是 PrivateGPT 功能的核心。下图说明了这些组件在文档摄取和查询处理过程中的交互方式。

来源:README.md81-107

该图说明了两个关键工作流程:

  1. 文档摄取:

    • 文档被解析成易于管理的文本块
    • Embedding 组件为每个块生成向量嵌入
    • Vector Store 组件存储这些嵌入以供后续检索
    • Node Store 组件存储原始文本和元数据
  2. 查询处理:

    • 用户查询通过 Embedding 组件转换为嵌入
    • Vector Store 组件根据向量相似性查找相似的块
    • Node Store 组件提供检索到的块的完整文本和元数据
    • 相关块用于创建带上下文的提示
    • LLM 组件根据带上下文的提示生成响应

通过组件模式实现的可扩展性

PrivateGPT 对组件实现采用一致的模式,以促进可扩展性

来源:README.md98-107

该架构遵循依赖注入原则,其中:

  1. 每个组件都有一个定义其能力的抽象接口
  2. 存在该接口的多个实现,用于不同的后端
  3. 根据配置设置选择特定实现
  4. 服务依赖于抽象接口,而非具体实现

这种设计允许在不更改代码库其余部分的情况下轻松切换组件实现,从而使 PrivateGPT 能够高度适应不同的部署环境和需求。