菜单

服务

相关源文件

本页面概述了支持PrivateGPT的核心服务,解释了它们的目的、架构和交互方式。PrivateGPT中的服务是通过API暴露特定功能的高级功能组件。它们实现了文档摄取、聊天功能和文本摘要等各种特性的业务逻辑。

服务概览

PrivateGPT围绕一组服务构建,这些服务既提供了常见任务的高级抽象,也为高级用例提供了低级原语。这些服务通过RESTful API暴露,该API遵循并扩展了OpenAI API标准。

服务架构概述

来源: README.md95-107

服务架构模式

PrivateGPT遵循其服务的统一架构模式,在API层和业务逻辑之间有清晰的划分

服务架构模式

来源: README.md98-107 private_gpt/server/recipes/summarize/summarize_router.py1-86

每个服务包括

  1. 一个路由器文件(*_router.py),使用FastAPI定义API端点
  2. 一个服务文件(*_service.py),实现业务逻辑
  3. 对提供核心抽象实现的各种组件的依赖

服务架构利用依赖注入来维护组件之间的松耦合,从而更容易替换特定的实现(例如,从一个LLM提供商切换到另一个)。

高级服务

这些服务抽象了实现RAG(检索增强生成)管道的复杂性,为常见任务提供了现成的功能。

Ingest Service(摄取服务)

Ingest Service管理文档摄取管道,处理文档以便后续检索和用作上下文。

主要功能:

  • 文档解析和元数据提取
  • 带可配置参数的文本分块
  • 用于语义搜索的嵌入生成
  • 存储在向量数据库和节点存储中

API 端点:

  • POST /v1/ingest/file:摄取文件
  • POST /v1/ingest/text:摄取纯文本
  • GET /v1/ingest/list:列出已摄取的文档
  • DELETE /v1/ingest/{doc_id}:删除已摄取的文档

来源: fern/openapi/openapi.json194-340 README.md30-31

聊天服务

Chat Service(聊天服务)提供会话功能,并可选择性地从摄取的文档中检索上下文。

主要功能:

  • 仅使用LLM的无上下文聊天
  • 使用RAG管道的有上下文聊天
  • 支持流式响应
  • 检索到的块的来源引用

API 端点:

  • POST /v1/chat/completions:提供带可选RAG的聊天补全

来源: fern/openapi/openapi.json59-108 README.md32-33

Completions Service(补全服务)

Completions Service提供文本补全功能,可选择性地检索上下文。

主要功能:

  • 单提示补全
  • 可选的系统提示用于指导响应
  • 使用RAG管道的有上下文补全
  • 支持流式响应

API 端点:

  • POST /v1/completions:提供带可选RAG的文本补全

来源: fern/openapi/openapi.json8-58 README.md32-33

摘要服务

Summarize Service(摘要服务)从文本或文档生成简洁的摘要。

主要功能:

  • 对提供的文本进行摘要
  • 可自定义的说明和提示
  • 使用已摄取的文档进行有上下文的摘要
  • 支持流式响应

API 端点:

  • POST /v1/summarize:摘要文本,可选择性地从已摄取的文档中获取上下文

来源: private_gpt/server/recipes/summarize/summarize_router.py1-86 fern/openapi/openapi.json342-381 fern/docs/pages/recipes/summarize.mdx1-20

低级服务

这些服务为高级用户提供了低级原语,用于实现自定义RAG管道。

Chunks Service(块服务)

Chunks Service根据语义相似性从摄取的文档中检索相关块。

主要功能:

  • 用于相关文档块的语义搜索
  • 检索周围块以获取额外上下文
  • 按文档ID过滤
  • 可配置的结果数量

API 端点:

  • POST /v1/chunks:根据查询检索相关块

来源: fern/openapi/openapi.json110-149 README.md36-37

Embedding Service(嵌入服务)

Embedding Service生成文本的向量表示,用于语义操作。

主要功能:

  • 文本到向量的转换
  • 支持多种嵌入模型
  • 批量处理输入

API 端点:

  • POST /v1/embeddings:为文本输入生成嵌入

来源: fern/openapi/openapi.json384-424 README.md36

RAG管道和服务交互

这些服务协同工作以实现RAG管道,创建一个有上下文的AI系统

RAG管道和服务交互

此图显示了服务如何交互以实现检索增强生成(RAG)管道

  1. Ingest Service将文档处理成块和嵌入
  2. Chunks Service检索与查询相关的块
  3. Chat和Summarize Services使用相关块作为LLM的上下文
  4. Embedding Service为查询和文档提供嵌入

来源: README.md81-87

服务实现细节

Router Layer(路由器层)

每个服务都通过FastAPI路由器暴露其功能,该路由器

  • 定义API端点和输入/输出模型
  • 处理请求验证
  • 管理身份验证
  • 注入服务依赖项
  • 格式化响应

Summarize路由器的示例

来源: private_gpt/server/recipes/summarize/summarize_router.py28-86

服务层

服务层实现了每个特性的业务逻辑,包括

  • 协调组件之间的交互
  • 处理数据转换
  • 实现流式传输等特定功能

服务通常通过构造函数注入接收其依赖项,这允许灵活的配置和更轻松的测试。

服务设计原则

PrivateGPT服务遵循几个设计原则

  1. 依赖注入:服务接收其依赖项,而不是直接创建它们
  2. 抽象使用:服务使用抽象接口而不是具体实现
  3. 简洁性:架构添加的层和抽象最少
  4. 即用性:实现是完整的,开箱即用

这些原则使代码库更易于维护、扩展和理解。

来源: README.md88-95

总结

PrivateGPT的服务提供了一套全面的功能,从常见任务(摄取、聊天、摘要)的高级抽象到低级原语(块检索、嵌入生成)的高级用例。这些服务遵循一致的架构模式,在API层和业务逻辑之间有清晰的划分,并利用依赖注入进行灵活的配置。这些服务共同实现了RAG管道,从而实现了可以利用本地文档的上下文感知AI功能。