Dify
默認只解析文檔中的文本,對于表格、圖表類不做處理
- 文檔加載流程
a.) 入口 api\core\indexing_runner.py
b.) 路由 api\core\rag\index_processor\index_processor_factory.py
text_model: api\core\rag\index_processor\processor\paragraph_index_processor.py
qa_model: api\core\rag\index_processor\processor\qa_index_processor.py
hierarchical_model:api\core\rag\index_processor\processor\parent_child_index_processor.py
c.) 解析行為(text_model為例)
【extract操作】api\core\rag\index_processor\processor\paragraph_index_processor.py -> api\core\rag\extractor\extract_processor.py
不同文檔類型的實現(api\core\rag\extractor):
extractor
【transform操作】api\core\rag\index_processor\processor\paragraph_index_processor.py
文檔清理: api\core\rag\cleaner\clean_processor.py
分nodes:
nodes
RagFlow
文本、復雜表格,圖表都可以支持,結合DeepDoc進行文檔處理
- 上傳文檔
【api接口】v1/document/upload(api\apps\document_app.py)
上傳文件到服務器,并保存上傳文件的相關信息,并進行知識庫文檔的基本初始化處理 - 文檔解析
【api接口】v1/document/run (api\apps\document_app.py)
更新文檔狀態,供后臺任務解析、分塊該文檔 -
文檔解析分塊
【后臺任務】rag\svr\task_executor.py
根據不同的類型使用不同的實現進行處理
build_chunks
Factory:
FACTORY = {
"general": naive,
ParserType.NAIVE.value: naive,
ParserType.PAPER.value: paper,
ParserType.BOOK.value: book,
ParserType.PRESENTATION.value: presentation,
ParserType.MANUAL.value: manual,
ParserType.LAWS.value: laws,
ParserType.QA.value: qa,
ParserType.TABLE.value: table,
ParserType.RESUME.value: resume,
ParserType.PICTURE.value: picture,
ParserType.ONE.value: one,
ParserType.AUDIO.value: audio,
ParserType.EMAIL.value: email,
ParserType.KG.value: naive,
ParserType.TAG.value: tag
}
對應代碼(rag\app):
文檔處理
deepdoc對應代碼(deepdoc):
deepdoc