本文档描述了 RAGFlow 中的文档处理流程,涵盖了文档如何被摄取、解析、分块、嵌入并索引以便检索。该流程支持多种文档格式,并提供针对不同文档类型和用例优化的灵活解析策略。
有关具体分块方法和解析策略的信息,请参阅分块方法。有关知识库管理操作的信息,请参阅知识库管理。有关整体 RAG 检索工作流的信息,请参阅RAG 流程。
文档处理流程由 TaskExecutor 系统编排,并遵循从文档上传到可搜索分块的多阶段方法。
来源:rag/svr/task_executor.py69-86 api/db/services/document_service.py447-518
文档摄取始于文件通过 API 上传并存储在 MinIO 对象存储中,然后排队等待处理。
系统支持多种文件类型,并根据文件扩展名自动选择解析器。文档元数据存储在 Document 模型中,而二进制内容存储在 MinIO 中。
来源:api/apps/document_app.py50-77 api/db/services/file_service.py159-186 api/db/services/document_service.py137-144
RAGFlow 实现了多种针对不同文档类型优化的解析策略。解析器的选择由知识库配置中的 parser_id 字段决定。
每个解析器都实现了文档特定的逻辑,以实现最佳的文本提取和结构保留。
来源:rag/svr/task_executor.py69-86 rag/app/naive.py349-541
naive.chunk() 函数作为文档处理的主要入口点,具有格式特定的处理功能。
| 文件类型 | 解析器类 | 主要功能 |
|---|---|---|
Pdf | OCR、布局分析、表格检测 | |
| DOCX | Docx | 图像提取、表格解析、样式保留 |
| Excel | Excel | 工作表处理、数据结构保留 |
| Markdown | Markdown | 图片下载、表格提取 |
| HTML | HtmlParser | 标签处理、内容提取 |
| 文本 | TxtParser | 简单文本分块 |
来源:rag/app/naive.py407-541 deepdoc/parser/pdf_parser.py246-288
解析后,文档被分割成块并转换为向量嵌入,用于语义搜索。
来源:rag/app/naive.py514-541 rag/nlp/__init__.py248-421
系统支持多种嵌入模型,并结合了标题和内容的嵌入,权重可配置。
来源:rag/svr/task_executor.py406-449 api/db/services/llm_service.py
来源:rag/svr/task_executor.py313-396 rag/prompts.py
来源:rag/svr/task_executor.py535-553 rag/raptor.py graphrag/general/index.py
处理后的分块被索引到文档存储中,以实现高效检索。
来源:rag/svr/task_executor.py594-616 rag/nlp/search.py401-403
处理流程使用先进的任务管理系统,具有进度跟踪和错误处理功能。
来源:rag/svr/task_executor.py100-108 rag/svr/task_executor.py155-184 api/db/services/task_service.py465-518
系统实现了全面的错误处理和自动重试机制
| 错误类型 | 处理策略 | 重试行为 |
|---|---|---|
| 文件未找到 | 跳过处理 | 不重试 |
| MinIO 超时 | 指数退避 | 最多重试 3 次 |
| 嵌入失败 | 模型回退 | 立即重试 |
| 索引错误 | 回滚分块 | 手动干预 |
| 任务取消 | 清理资源 | 不重试 |
来源:rag/svr/task_executor.py243-267 api/db/services/task_service.py110-150
该流程采用多种优化策略
trio 进行并发 I/O 操作来源:rag/svr/task_executor.py67 rag/svr/task_executor.py277-311
文档处理流程为将原始文档转换为可搜索的知识库提供了强大且可扩展的基础,支持多种文档格式、高级处理技术和全面的错误处理。