Ingest Service 是 PrivateGPT 的核心组件,负责文档的处理和存储。它将各种文件格式转换为向量嵌入,并将其存储以供在聊天会话、补全和块查询期间进行检索。本文档涵盖了 Ingest Service 的架构、功能和用法。
有关如何在对话中使用已摄取文档的信息,请参阅 Chat Service。
Ingest Service 作为 RAG(检索增强生成)工作流程中准备文档以供检索的关键组件,融入了更广泛的 PrivateGPT 架构中。
来源:private_gpt/server/ingest/ingest_service.py26-49 此图显示了 Ingest Service 在整个架构中的位置及其与其他组件的关系。
Ingest Service 实现为一个单例类,通过多个组件协调文档摄取。
来源:private_gpt/server/ingest/ingest_service.py26-49
Ingest Service 中涉及的关键组件是
Ingest Service 通过几个步骤处理文档,为检索做准备。
来源:private_gpt/server/ingest/ingest_service.py50-83 private_gpt/server/ingest/ingest_router.py31-81
Ingest Service 通过 FastAPI 公开了几个 REST API 端点
| 端点 | 方法 | 描述 |
|---|---|---|
/v1/ingest/file | POST | 摄取文件并为其处理上下文 |
/v1/ingest/text | POST | 摄取文本并为其处理上下文 |
/v1/ingest/list | GET | 列出所有已摄取文档及其 ID 和元数据 |
/v1/ingest/{doc_id} | DELETE | 删除特定的已摄取文档 |
来源:private_gpt/server/ingest/ingest_router.py31-105
Ingest 端点使用以下数据模型
来源:private_gpt/server/ingest/ingest_router.py13-28
该系统提供了一个用于从文件夹批量摄取文档的脚本
来源:scripts/ingest_folder.py15-77
要使用批量摄取,您可以运行
--watch 标志可以自动摄取添加到文件夹的新文件。
来源:fern/docs/pages/manual/ingestion.mdx23-25
Ingest Service 支持多种文件格式
| 类别 | 格式 |
|---|---|
| 文档 | .pdf, .docx, .pptx, .ppt, .pptm, .hwp |
| 图像 | .jpg, .png, .jpeg |
| 音频/视频 | .mp3, .mp4 |
| 数据 | .csv, .json |
| 基于文本的 | .txt, .md, .epub, .ipynb, .mbox, .html |
某些文件格式可能需要安装额外的依赖项。
来源:fern/docs/pages/manual/ingestion.mdx102-136
Ingest Service 的性能可以通过配置设置进行优化
| 配置 | 描述 | 选项 |
|---|---|---|
embedding.ingest_mode | 摄取处理模式 | simple, batch, parallel, pipeline |
embedding.count_workers | 并行处理的工作人员数量 | 整数(默认值:2) |
data.local_ingestion.enabled | 启用/禁用本地摄取 | 布尔值 |
data.local_ingestion.allow_ingest_from | 允许摄取的文件夹 | 路径列表或 * 表示全部 |
对于内存密集型操作,您可以使用 mock 配置文件,以避免在摄取期间加载 LLM。
来源:fern/docs/pages/manual/ingestion.mdx46-90
IngestService 类使用必要的组件进行初始化,并使用向量存储和节点存储创建 StorageContext。
对于文件摄取,服务在需要时创建临时文件,处理文档,并返回已摄取文档的信息。
来源:private_gpt/server/ingest/ingest_service.py26-49
文档被摄取后,可以通过 RAG 管道在聊天会话、补全和块查询期间检索它们。
来源:private_gpt/server/ingest/ingest_router.py42-55
Ingest Service 是 PrivateGPT 的一个基本组件,它能够为上下文感知型 AI 应用程序进行文档处理和存储。通过将文档转换为向量嵌入并将其与元数据一起存储,它使得在与语言模型交互期间能够检索相关的文档块。