本文档全面概述了PrivateGPT的系统架构,解释了其核心组件如何协同工作以提供注重隐私的检索增强生成能力。有关安装和配置的信息,请参阅安装和设置;有关特定组件的详细信息,请参阅核心组件。
PrivateGPT 被设计为一个模块化、可扩展的系统,允许用户使用大型语言模型 (LLM) 查询其文档,同时确保数据隐私。该架构遵循以下关键原则:
该系统提供用于完整 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 组件为大型语言模型提供统一接口。它抽象了实现细节,使 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 使用两种主要存储系统:
向量存储:存储文档嵌入以进行相似性搜索
BatchedChromaVectorStore,用于高效处理大批量数据节点存储:存储文档内容和元数据
两种存储都通过组件接口进行抽象,从而可以根据配置轻松切换实现。
来源:private_gpt/components/node_store/node_store_component.py14-68 private_gpt/components/vector_store/batched_chroma.py28-106
PrivateGPT 通过一个设置系统进行配置,该系统允许自定义:
所有组件都从这个中心配置中读取,使得系统行为在无需更改代码的情况下高度可自定义。
来源:private_gpt/server/ingest/ingest_service.py26-49 private_gpt/server/chat/chat_service.py78-106
该架构通过以下方式促进可扩展性:
这使得以下操作变得容易: