菜单

开发指南

相关源文件

本指南旨在为开发或扩展 PrivateGPT 代码库的开发者提供帮助。它涵盖了开发环境的设置、开发工作流程的理解以及系统的扩展。有关更具体的信息,请参阅项目结构发布管理文档系统

开发环境设置

Python 要求

PrivateGPT 需要 Python 3.11

python = ">=3.11,<3.12"

来源:pyproject.toml8

Poetry 用于依赖管理

PrivateGPT 使用 Poetry 进行依赖管理

  1. 如果尚未安装 Poetry,请进行安装

  2. 克隆仓库

  3. 创建虚拟环境并安装依赖项

  4. 根据您的开发需求安装特定的附加组件

来源:pyproject.toml7-85

开发工具

该项目使用多种开发工具,所有工具均在 pyproject.toml 中配置。

  • Black:代码格式化工具
  • Ruff:带有许多已启用规则的 Linter
  • mypy:严格模式的静态类型检查器
  • pytest:测试框架

来源:pyproject.toml87-95 pyproject.toml114-197

预提交钩子

设置 pre-commit 钩子以自动运行质量检查

这将安装运行以下钩子:

  • 代码格式化 (black)
  • 代码检查 (ruff)
  • 类型检查 (mypy)
  • 提交时运行测试

来源:.pre-commit-config.yaml1-43

开发工作流

开发工作流程图

代码质量工具

使用以下命令手动运行这些工具:

来源:pyproject.toml114-197 .pre-commit-config.yaml17-43

运行测试

来源:pyproject.toml192-197 .github/workflows/tests.yml36-58

架构概述

PrivateGPT 采用模块化架构,为核心组件的实现提供了灵活性。

扩展 PrivateGPT

PrivateGPT 的设计注重可扩展性,特别是在集成核心组件的不同实现方面。

可用的组件实现

项目支持核心组件的各种实现。

组件类型可用实现
LLMsLlamaCPP, OpenAI, OpenAI-like, Ollama, Azure OpenAI, Gemini, Sagemaker
嵌入Ollama, HuggingFace, OpenAI, Azure OpenAI, Gemini, Mistral, Sagemaker
向量存储Qdrant, Chroma, Postgres, Milvus, ClickHouse
节点存储内存, Postgres

来源:pyproject.toml22-39 pyproject.toml64-84

添加新的组件实现

要为核心组件添加新实现,请执行以下操作:

  1. 识别要实现的相应组件接口
  2. 在对应的组件目录中创建一个新模块
  3. 实现接口
  4. 将您的实现注册到组件的工厂
  5. 向设置系统添加配置选项

持续集成

PrivateGPT 使用 GitHub Actions 进行 CI/CD

  • 每次 PR 和推送到 main 分支都会运行代码质量检查和测试。
  • PR 在合并前必须通过所有检查。
  • 测试运行时会生成覆盖率报告。

来源:.github/workflows/tests.yml1-68

文档标准

在贡献代码时

  • 为所有函数、类和模块添加文档字符串
  • 为所有函数添加类型注解
  • 遵循 Google 的 Python 文档字符串风格,如 ruff 配置中所述
  • 保持文档与代码更改同步

来源:pyproject.toml158-160

版本控制和发布流程

PrivateGPT 遵循语义化版本控制。

version = "0.6.2"

有关发布管理的详细信息,请参阅发布管理指南。

来源:pyproject.toml3

包配置

该项目定义了各种 Poetry 附加组件以支持选择性地安装依赖项。

[tool.poetry.extras]
ui = ["gradio", "ffmpy"]
llms-llama-cpp = ["llama-index-llms-llama-cpp"]
llms-openai = ["llama-index-llms-openai"]
# ... and many more

在开发新组件时,您可能需要添加新的附加组件定义。

来源:pyproject.toml63-85

本指南概述了 PrivateGPT 的开发过程。有关代码库结构的更详细信息,请参阅项目结构