本文档概述了 PrivateGPT 项目的组织、代码架构和关键组件。了解项目结构对于希望扩展或修改 PrivateGPT 功能的开发人员至关重要。有关安装和配置的信息,请参阅安装与设置。
PrivateGPT 遵循模块化架构,在 API 端点、服务和组件实现之间有清晰的分离。这种代码组织方式有助于轻松扩展和修改系统的不同部分,同时保持整洁的架构。
来源:README.md97-107 pyproject.toml1-97
PrivateGPT 围绕由 LlamaIndex 提供支持的检索增强生成 (RAG) 管道构建。该系统使用 FastAPI 暴露 API,遵循 OpenAI API 方案。
来源:README.md81-87 README.md97-107
API 层组织在 server 包中,每个功能区域都有子包。每个 API 子包都遵循一致的模式:
<api>_router.py:定义 FastAPI 路由和 HTTP 处理程序<api>_service.py:包含使用抽象组件的业务逻辑组件层提供了服务层中使用的抽象的具体实现。组件组织在 components 包中。
来源:README.md103-107 pyproject.toml22-40 pyproject.toml64-85
PrivateGPT 使用依赖注入来根据配置将组件连接在一起。这种模式将组件实现与使用解耦,使得系统高度可配置。
此图说明了聊天补全请求的典型流程
PrivateGPT 旨在通过新实现轻松扩展。主要的扩展点是:
| 组件 | 示例实现 | 额外配置 |
|---|---|---|
| LLM | LlamaCPP, OpenAI, OpenAI-Like, Ollama, Azure OpenAI, Gemini | llms-llama-cpp, llms-openai, llms-ollama 等。 |
| 嵌入 | HuggingFace, OpenAI, Ollama, Azure OpenAI, Gemini, MistralAI | embeddings-huggingface, embeddings-openai 等。 |
| 向量存储 | Qdrant, Chroma, PostgreSQL/pgvector, Milvus, ClickHouse | vector-stores-qdrant, vector-stores-chroma 等。 |
| 节点存储 | PostgreSQL, 内存中 | storage-nodestore-postgres |
来源:pyproject.toml22-40 pyproject.toml64-85
PrivateGPT 拥有一套核心依赖项和一些可选的额外项,用于启用不同的 LLM、嵌入和向量存储后端。pyproject.toml 文件定义了这些依赖项和额外项。
核心依赖项
可选的额外项按功能组织(例如,llms-openai、embeddings-huggingface、vector-stores-qdrant),以允许仅安装特定配置所需的部分。
来源:pyproject.toml8-19 pyproject.toml22-40 pyproject.toml64-85
该项目包含了多种开发工具的配置:
这些工具的配置可在 pyproject.toml 文件中找到。
来源:pyproject.toml87-95 pyproject.toml114-178
PrivateGPT 遵循结构良好的模块化架构,将 API 端点、业务逻辑和组件实现之间的职责分离。这种设计使得系统高度可定制和可扩展,允许用户根据自身需求选择不同的 LLM、嵌入和向量存储后端。依赖注入模式确保组件松散耦合,从而使系统更易于维护和测试。