菜单

系统架构

相关源文件

本文档全面概述了PrivateGPT的系统架构,解释了其核心组件如何协同工作以提供注重隐私的检索增强生成能力。有关安装和配置的信息,请参阅安装和设置;有关特定组件的详细信息,请参阅核心组件

概述

PrivateGPT 被设计为一个模块化、可扩展的系统,允许用户使用大型语言模型 (LLM) 查询其文档,同时确保数据隐私。该架构遵循以下关键原则:

  • 模块化:组件使用依赖注入解耦
  • 可扩展性:抽象接口允许切换实现
  • 隐私性:所有处理均在本地进行,数据不会离开环境
  • 兼容性:API设计遵循OpenAI标准以提高熟悉度

该系统提供用于完整 RAG(检索增强生成)工作流的高级 API,以及用于自定义管道实现的低级 API。

高层架构

来源:README.md81-109 private_gpt/server/ingest/ingest_service.py26-49 private_gpt/server/chat/chat_service.py78-106

关键组件

PrivateGPT 架构围绕以下核心组件构建:

组件角色实现
LLM 组件提供对语言模型的访问支持本地(LlamaCPP、Ollama)和云端(OpenAI、Azure)选项
嵌入组件从文本生成向量嵌入支持多种嵌入模型(本地和云端)
向量存储组件存储和检索嵌入支持 Qdrant、Chroma、PostgreSQL/pgvector
节点存储组件存储文档内容和元数据支持简单的基于文件或 PostgreSQL 存储
摄取组件管理文档处理管道具有不同优化策略的多种实现

来源:README.md81-109 private_gpt/components/node_store/node_store_component.py14-68

组件详解

LLM 组件

LLM 组件为大型语言模型提供统一接口。它抽象了实现细节,使 PrivateGPT 能够与各种 LLM 后端协同工作。

嵌入组件

嵌入组件负责创建文本的向量表示,以捕捉语义含义。这些嵌入在 RAG 管道中实现了语义搜索功能。

向量存储组件

此组件管理向量嵌入的存储和检索。它实现了高效的相似性搜索,用于在查询处理过程中查找相关的文档块。

来源:private_gpt/components/vector_store/batched_chroma.py28-106

节点存储组件

节点存储组件管理文档存储,为文档内容和元数据提供持久性。

来源:private_gpt/components/node_store/node_store_component.py14-68

摄取组件

摄取组件处理文档摄取管道,包括解析、分块和嵌入生成。PrivateGPT 提供了多种具有不同优化策略的实现方案。

来源:private_gpt/components/ingest/ingest_component.py28-517

服务层

服务层实现业务逻辑并协调组件交互

摄取服务

摄取服务负责文档摄取和管理

来源:private_gpt/server/ingest/ingest_service.py26-126 private_gpt/server/ingest/ingest_router.py10-104

聊天服务

聊天服务提供具有 RAG 功能的聊天功能

来源:private_gpt/server/chat/chat_service.py34-217

数据流

文档摄取流程

来源:private_gpt/server/ingest/ingest_service.py50-83 private_gpt/components/ingest/ingest_component.py109-147 scripts/ingest_folder.py15-136

查询/聊天流程

来源:private_gpt/server/chat/chat_service.py148-217

存储架构

PrivateGPT 使用两种主要存储系统:

  1. 向量存储:存储文档嵌入以进行相似性搜索

    • 默认:Qdrant
    • 选项:Chroma、PostgreSQL/pgvector、Milvus、ClickHouse
    • 自定义实现:BatchedChromaVectorStore,用于高效处理大批量数据
  2. 节点存储:存储文档内容和元数据

    • 默认:简单文件存储
    • 替代方案:PostgreSQL 数据库

两种存储都通过组件接口进行抽象,从而可以根据配置轻松切换实现。

来源:private_gpt/components/node_store/node_store_component.py14-68 private_gpt/components/vector_store/batched_chroma.py28-106

配置系统

PrivateGPT 通过一个设置系统进行配置,该系统允许自定义:

  • LLM 提供商和参数
  • 嵌入提供商
  • 向量存储实现
  • RAG 参数(相似度阈值、重排序选项)
  • 摄取模式和优化参数

所有组件都从这个中心配置中读取,使得系统行为在无需更改代码的情况下高度可自定义。

来源:private_gpt/server/ingest/ingest_service.py26-49 private_gpt/server/chat/chat_service.py78-106

可扩展性

该架构通过以下方式促进可扩展性:

  1. 抽象层:组件实现通用接口
  2. 依赖注入:组件在外部初始化并按需注入
  3. 配置驱动行为:大多数行为可通过配置修改
  4. 面向服务设计:API、服务逻辑和组件实现之间明确分离

这使得以下操作变得容易:

  • 添加新的 LLM 或嵌入提供商
  • 实现替代向量存储
  • 自定义 RAG 管道
  • 通过新功能扩展 API

来源:README.md81-109