ai之RAG本地知識庫--基于OCR和文本解析器的新一代RAG引擎:RAGFlow 認識和源碼剖析

目錄標題

  • RAG本地知識庫問答——基于OCR和文本解析器的新一代RAG引擎:RAGFlow 認識和源碼剖析
    • RAGflow 主要功能:
  • 一、RAGflow 簡介
    • 1.1 允許用戶上傳并管理自己的文檔(文檔類型可以是任意類型)
    • 1.2 RAGFlow的4個特色
        • 1.2.1 AI 模型的智能文檔處理系統
        • 1.2.2 包含各種不同模板的智能文檔處理系統
        • 1.2.3 文檔處理的可視化和可解釋性——文本切片過程可視化,支持手動調整
        • 1.2.4 讓用戶隨時查看 LLM 是基于哪些原文來生成答案的
    • 1.3 RAGFlow 的核心 DeepDoc:視覺處理和解析器
        • 1.3.1 視覺處理
        • 1.3.2 文本解析器
    • 1.4 // 待更 。。。。。。。。。。。。。。。。。
  • 二、 對ragflow-main/deepdoc的源碼剖析
    • 2.1 ragflow-main/deepdoc/vision
        • 2.1.1 deepdoc/vision/ocr.py
  • 三、 對ragflow-main/rag的拆解
    • 3.1 ragflow-main/rag/app
        • 3.1.1 app/paper.py中pdf(側重OCR方法)、chunk(側重文本解析器)的實現
  • 王、RAGflow 安裝軟硬件條件檢查

1.【LangGraph】智能體工作流的新基石
https://agent.csdn.net/684111f0606a8318e85b81e4.html
2. 基于LangChain+LLM的本地知識庫問答:從企業單文檔問答到批量文檔問答
https://blog.csdn.net/v_JULY_v/article/details/131552592
3. RAG知識庫問答LangChain+LLM的二次開發:商用時的典型問題及其改進方案
https://blog.csdn.net/v_JULY_v/article/details/135257848

RAG本地知識庫問答——基于OCR和文本解析器的新一代RAG引擎:RAGFlow 認識和源碼剖析

RAGflow 主要功能:

    (1) "Quality in, quality out"基于深度文檔理解,能夠從各類復雜格式的非結構化數據中提取真知灼見。真正在無限下文(token)的場景下快速完成大海撈針測試。(2)基于模板的文本切片不僅僅是智能,更重要的是可控可解釋。多種文本模板可供選擇(3)有理有據、最大程度降低幻覺(hallucination)文本切片過程可視化,支持手動調整。有理有據:答案提供關鍵引用的快照并支持追根溯源。(4)兼容各類異構數據源支持豐富的文件類型,包括 Word 文檔、PPT、excel 表格、txt 文件、圖片、PDF、影印件、復印件、結構化數據、網頁等。(5)全程無憂、自動化的 RAG 工作流全面優化的 RAG 工作流可以支持從個人應用乃至超大型企業的各類生態系統。大語言模型 LLM 以及向量模型均支持配置。基于多路召回、融合重排序。提供易用的 API,可以輕松集成到各類企業系統。

在這里插入圖片描述

一、RAGflow 簡介

    有關 Dify 的簡介,可以查看我之前分享的 《在 Ubuntu24.04 LTS 上 Docker Compose 部署 Dify 社區版 1.0.1》文章。RAGFlow是一款基于深度文檔理解(deepdoc)構建的開源 RAG引擎。其中,深度文檔理解,是 RAGFlow 對文檔解析的一個解決方案,它包含兩個組成部分:視覺處理和解析器。其中視覺處理是通過OCR,布局識別,表結構識別來完成圖像,PDF,表格的識別的。針對PDF、DOCX、EXCEL和PPT四種文檔格式,都有相應的解析器。能夠從各類復雜格式的非結構化數據中提取信息,文本切片過程可視化,還支持手動調整。支持豐富的文件類型,包括 Word 文檔、PPT、excel 表格、txt 文件、圖片、PDF、影印件、復印件、結構化數據、網頁等。更重要的是,他還集成了各種嵌入模型,rerank模型,提供易用的 API,可以輕松集成到各類企業系統。RAGflow 官網地址:https://ragflow.io/

下邊我們來看看 RAGFlow 這款產品,相比目前市面上已有的各類開源方案,都有哪些特點
在這里插入圖片描述

1.1 允許用戶上傳并管理自己的文檔(文檔類型可以是任意類型)

首先, RAGFlow 是一款完整的 RAG 解決方案,它允許用戶上傳并管理自己的文檔,文檔類型可以是任意類型,例如 PDF、Word、PPT、Excel、當然也包含 TXT

在完成智能解析之后,讓數據以正確地格式進入到數據庫,然后用戶可以采用任意大模型對自己上傳的文檔進行提問

也就是說,包含了如下完整的端到端流程

在這里插入圖片描述

1.2 RAGFlow的4個特色

其次,RAGFlow 的最大特色,就是多樣化的文檔智能處理,保證用戶的數據從 Garbage In Garbage Out 變為 Quality In Quality Out

為了做到這一點, RAGFlow 沒有采用現成的 RAG 中間件,而是完全重新研發了一套智能文檔理解系統,并以此為依托構建 RAG 任務編排體系

這個系統的特點包含以下4個點

1.2.1 AI 模型的智能文檔處理系統

它是一套基于 AI 模型的智能文檔處理系統:對于用戶上傳的文檔,它需要自動識別文檔的布局,包括標題,段落,換行等等,還包含難度很大的圖片和表格。

對于表格來說,不僅僅要識別出文檔中存在表格,還會針對表格的布局做進一步識別,包括內部每一個單元格,多行文字是否需要合并成一個單元格,等等,并且表格的內容還會結合表頭信息處理,確保以合適的形式送到數據庫,從而完成 RAG 針對這些細節數字的“大海撈針”

1.2.2 包含各種不同模板的智能文檔處理系統

它是一套包含各種不同模板的智能文檔處理系統:不同行業不同崗位所用到的文檔不同,行文格式不同,對文檔查閱的需求也不同。比如:

  1. 會計一般最常接觸到的憑證,發票,Excel報表
    查詢的一般都是數字,如:看一下上月十五號發生哪些憑證,總額多少?上季度資產負債表里面凈資產總額多少?合同臺賬中下個月有哪些應付應收?
  2. 作為一個HR平時接觸最龐雜的便是候選人簡歷
    且查詢最多的是列表查詢,如:人才庫中985/211的3到5年的算法工程師有哪些?985 碩士以上學歷的人員有哪些?趙玉田的微信號多少?香秀哪個學校的來著?
  3. 作為科研工作者接觸到最多的可能是就是論文了,快速閱讀和理解論文,梳理論文和引文之間的關系成了他們的痛點

這樣看來憑證/報表、簡歷、論文的文檔結構是不一樣的,查詢需求也是不一樣的,那處理方式肯定是不一樣

因此RAGFlow 在處理文檔時,給了不少的選擇:Q&A,Resume,Paper,Manual,Table,Book,Law,通用(當然,這些分類還在不斷繼續擴展中,處理過程還有待完善)…

1.2.3 文檔處理的可視化和可解釋性——文本切片過程可視化,支持手動調整

智能文檔處理的可視化和可解釋性:用戶上傳的文檔到底被處理成啥樣了,如:分割了多少片,各種圖表處理成啥樣了,畢竟任何基于 AI 的系統只能保證大概率正確,作為系統有必要給出這樣的空間讓用戶進行適當的干預,作為用戶也有把控的需求

特別是對于 PDF,行文多種多樣,變化多端,而且廣泛流行于各行各業,對于它的把控尤為重要,RAGFlow不僅給出了處理結果,而且可以讓用戶查看文檔解析結果并一次點擊定位到原文,對比和原文的差異,可增、可減、可改、可查

1.2.4 讓用戶隨時查看 LLM 是基于哪些原文來生成答案的

最后, RAGFlow 是一個完整的 RAG 系統,而目前開源的 RAG,大都忽視了 RAG 本身的最大優勢之一:可以讓 LLM 以可控的方式回答問題,或者換種說法:有理有據、消除幻覺

由于隨著模型能力的不同,LLM 多少都會有概率會出現幻覺,在這種情況下, **一款 RAG 產品應該隨時隨地給用戶以參考,讓用戶隨時查看 LLM 是基于哪些原文來生成答案的,這需要同時生成原文的引用鏈接,并允許用戶的鼠標 hover 上去即可調出原文的內容,甚至包含圖表。**如果還不能確定,再點一下便能定位到原文

一言以蔽之,答案提供關鍵引用的快照并支持追根溯源
————————————————

1.3 RAGFlow 的核心 DeepDoc:視覺處理和解析器

RAGFlow 引擎的核心的是 DeepDoc,它由視覺處理和解析器兩部分組成

1.3.1 視覺處理

模型在視覺層面具備以下能力

  1. OCR(Optical Character Recognition,光學字符識別)
    由于許多文檔都是以圖像形式呈現的,或者至少能夠轉換為圖像,因此OCR是文本提取的一個非常重要、基本,甚至通用的解決方案
python deepdoc/vision/t_ocr.py --inputs=path_to_images_or_pdfs --output_dir=path_to_store_result

AI寫代碼
輸入可以是圖像或 PDF 的目錄,或者單個圖像、PDF文件,可以查看文件夾 path_to_store_result ,其中有演示結果位置的圖像,以及包含 OCR 文本的 txt 文件
在這里插入圖片描述

  1. 布局識別(Layout recognition)
    來自不同領域的文件可能有不同的布局,如報紙、雜志、書籍和簡歷在布局方面是不同的。只有當機器有準確的布局分析時,它才能決定這些文本部分是連續的還是不連續的,或者這個部分需要表結構識別(Table Structure Recognition,TSR)來處理,或者這個部件是一個圖形并用這個標題來描述

它包含 10 個基本布局組件,涵蓋了大多數情況:

  • 文本、標題
  • 配圖、配圖標題
  • 表格、表格標題
  • 頁頭、頁尾
  • 參考引用、公式

且可以通過以下命令查看布局檢測結果:

python deepdoc/vision/t_recognizer.py --inputs=path_to_images_or_pdfs --threshold=0.2 --mode=layout --output_dir=path_to_store_result

輸入可以是圖像或PDF的目錄,或者單個圖像、PDF 文件,可以查看文件夾 path_to_store_result,其中有顯示檢測結果的圖像,如下所示:
在這里插入圖片描述
3. TSR(Table Structure Recognition,表結構識別)
數據表是一種常用的結構,用于表示包括數字或文本在內的數據。表的結構可能非常復雜,比如層次結構標題、跨單元格和投影行標題
當然,除了 TSR,他們還將內容重新組合成 LLM 可以很好理解的句子

TSR 任務有 5 個標簽:

  • 列標題
  • 行標題
  • 合并單元格

你可以通過以下命令查看表結構識別結果:

python deepdoc/vision/t_recognizer.py --inputs=path_to_images_or_pdfs --threshold=0.2 --mode=tsr --output_dir=path_to_store_result

輸入可以是圖像或PDF的目錄,或者單個圖像、PDF 文件。您可以查看文件夾 path_to_store_result,其中包含圖像和 html 頁面,這些頁面展示了以下檢測結果:

在這里插入圖片描述

————————————————

1.3.2 文本解析器

PDF、DOCX、EXCEL 和 PPT 4種文檔格式都有相應的解析器。最復雜的是 PDF 解析器,因為 PDF 具有靈活性。PDF 解析器的輸出包括:

  • 在 PDF 中有自己位置的文本塊(頁碼和矩形位置)。
  • 帶有 PDF 裁剪圖像的表格,以及已經翻譯成自然語言句子的內容。
  • 圖中帶標題和文字的圖
    ————————————————

1.4 // 待更 。。。。。。。。。。。。。。。。。

二、 對ragflow-main/deepdoc的源碼剖析

2.1 ragflow-main/deepdoc/vision

2.1.1 deepdoc/vision/ocr.py

總的來講,OCR 類整合了文本檢測和識別功能。在初始化時,它會嘗試從本地或遠程下載模型,并實例化TextRecognizer 和 TextDetector

  1. 首先,transform 西數用于對數據進行一系列操作
def transform(data, ops=None):""" transform """if ops is None:ops = []for op in ops:data = op(data)if data is None:return Nonereturn data
  • create_operators 函數根據配置創建操作符列表
  • Load model 函數加載ONNX模型,并根據設備類型選擇合適的推理提供者(CPU或GPU)
  1. TextRecognizer 類用于識別文本框中的文宇
    它在初始化時加載模型,并定義了多種圖像預處理方法,如resize_norm_img,用于調整和標準化輸入圖像,最終填充到一個固定大小的張量中

resizenorm_img-VL,類似于上面的resize_norm_img,但它直接將圖像調整為制定的形狀,并進行歸一化處理
resize_norm_img_srn
srn_other_inputs
process_image_srn
resize_norm_img_sar
resize_norm_img_spin
resize_norm_img_svtr
resize_norm_img_abinet
norm_img_can
這些方法根據不同的圖像形狀和需求對圖像進行調整和歸一化處理

最后的__call__方法則是識別的入口,處理輸入圖像并返回識別結果
TextDetector 類用于檢測圖像中的文本框
它在初始化時加載模型,并定義了圖像預處理和后處理的方法,如 order_points_clockwise、clip_det-res 等,__call__方法是檢測的入口,處理輸入圖像并返回檢測結果
2.1.2 deepdoc/vision/recognizer.py
————————————————

三、 對ragflow-main/rag的拆解

https://blog.csdn.net/v_JULY_v/article/details/137711599?ops_request_misc=&request_id=&biz_id=102&utm_term=RAGFLOW_IMAGE=infiniflow/ragfl&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-4-137711599.142^v102^pc_search_result_base1&spm=1018.2226.3001.4187

3.1 ragflow-main/rag/app

3.1.1 app/paper.py中pdf(側重OCR方法)、chunk(側重文本解析器)的實現

在 paper.py 文件中,主要就兩個主要實現

  • 一個pdf的類——即class Pdf(PdfParser),側重用OCR的方法
  • 一個chunk函數——詳見上文2.2.2 pdf_parser.py中對PlainParser類的實現
    在這里插入圖片描述
    對于前者class Pdf(PdfParser),call_方法是一個主要的入口點,用于處理OCR(光學字符識別) 和布局分析
  1. 該方法首先調用 callback 函數通知OCR 開始,然后調用self.–images__方法處理圖像

    def __call__(self, filename, binary=None, from_page=0,to_page=100000, zoomin=3, callback=None):callback(msg="OCR is running...")self.__images__(filename if not binary else binary,zoomin,from_page,to_page,callback)callback(msg="OCR finished.")
    
  2. 接下來,使用timer 記錄布局分析的時問,并調用_layouts_rec方法進行布局分析

            from timeit import default_timer as timerstart = timer()self._layouts_rec(zoomin)callback(0.63, "Layout analysis finished")print("layouts:", timer() - start)
    

————————————————

                        版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

原文鏈接:https://blog.csdn.net/v_JULY_v/article/details/137711599
————————————————

王、RAGflow 安裝軟硬件條件檢查

    (1)官方支持x86 CPU和Nvidia GPU 硬件,其他 ARM 等硬件官方截至目前尚未暫不作為正式支持硬件。(2)Linux 操作系統內核不建議低于6.0 的 LTS 版本;Windows 操作系統不建議低于 Win10 專業版 22H2 或 Window Server 2025 最新穩定版。(3)CPU 大于等于 8核(x86);一會有杠精要抬杠說官方是不少于4核,親咱們是Dify和RAGflow安裝同一臺機子。(4)RAM 大于等于 32 GB 。(5)磁盤 大于等于 512 GB 。(6)Docker 大于等于 28.1.1 ,并且 Docker Compose 大于等于 2.35.1 。(7)Git 大于等于 2.43.0 。

————————————————

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89444.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89444.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89444.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[面試] 手寫題-new

function mynew(Func, ...args) {// 1.創建一個空對象const obj {}// 2.新對象隱式原型指向構造函數的顯式原型obj.__proto__ Func.prototype// 3.將構建函數的this指向新對象let result Func.apply(obj, args)// 4.返回objreturn result instanceof Object ? result : obj…

設計模式精講 Day 20:狀態模式(State Pattern)

【設計模式精講 Day 20】狀態模式(State Pattern) 文章標簽 設計模式, 狀態模式, Java開發, 面向對象設計, 軟件架構, 設計模式實戰, Java應用開發 文章簡述 狀態模式是行為型設計模式中的重要一員,用于管理對象在不同狀態下的行為變化。在…

橋島隧大型工程 3D 可視化監測平臺

深中通道作為“橋、島、隧、水下互通”一體化跨海集群工程,其復雜結構帶來高強度監測難題。借助圖撲軟件 HT 實現深中通道的建設與運營的數字化升級,為交通基建行業邁向高效、智能的未來提供了有力支撐。 圖撲自主研發的 HT for Web 產品搭建深中通道-橋…

基于SpringBoot和Leaflet的區域沖突可視化系統(2025企業級實戰方案)

摘要 在全球地緣沖突與應急事件頻發的2025年,區域態勢可視化系統成為政府及企業的決策剛需。本文提出基于??SpringBoot 3.2??后端與??Leaflet 1.9.5??前端的沖突可視化解決方案,融合多源異構數據(衛星影像、輿情熱力、設施狀態&…

[密碼學實戰]國密TLCP協議報文解析代碼實現(三十)

[密碼學實戰]國密TLCP協議報文解析代碼實現(三十) 本文將深入解析國密TLCP協議報文結構,提供完整的Java實現代碼,幫助開發者理解TLCP協議在國密環境下的通信機制和安全性設計。 一、國密TLCP協議概述 TLCP(Transport Layer Cryptographic Protocol)是基于國密算法(SM2/…

[Python] -基礎篇5-玩轉Python內置數據結構:列表、元組、字典與集合

Python 是一門以簡潔優雅著稱的編程語言,其中內置的數據結構為日常編程提供了強大支持。本文將系統介紹 Python 中四大核心數據結構:列表(list)、元組(tuple)、字典(dict)與集合(set),并配以實用示例,幫助讀者全面掌握其用法及適用場景。 一、列表(List):可變序…

技術突破與落地應用:端到端 2.0 時代輔助駕駛TOP10 論文深度拆解系列【第八篇(排名不分先后)】

HiP-AD: Hierarchical and Multi-Granularity Planning with Deformable Attention for Autonomous Driving in a Single Decoder GitHub地址:?https://github.com/nullmax-vision/HiP-AD? 在自動駕駛技術飛速發展的今天,端到端自動駕駛(E…

transformer位置編碼研究相關的綜述、論文

一、權威綜述 《利用位置編碼實現長度外推》 (騰訊云開發者社區, 2024) 系統分析絕對/相對位置編碼(APE/RPE)在長序列外推中的技術演進,涵蓋RoPE、Alibi、Xpos等優化方案,討論位置插值、NTK-aware縮放等擴展…

垂直領域AI智能體開發指南:用Bright Data MCP接入智能體攻克數據難關

垂直領域AI智能體開發指南:用Bright Data MCP接入智能體攻克數據難關 一、智能體時代的數據困局1.1 AI智能體的爆發式增長1.2 開發者遭遇的"數據瓶頸" 二、Bright Data MCP:智能體的數據引擎2.1 重新定義數據獲取方式2.2 支持的核心場景2.3 四…

Stable Diffusion 項目實戰落地:從0到1 掌握ControlNet 第三篇: 打造光影字形的創意秘技-文字與自然共舞

上一篇,我們一起玩轉了 野外光影字,是不是被那種自然和光影交織的效果驚艷到啦? 如果你錯過了那篇文章,別擔心,趕緊點這里補課:Stable Diffusion 項目實戰落地:從0到1 掌握ControlNet:打造光影文字 第二篇 - 野外光影字。 今天,我們將一起做一個 生成的嵌入式文字【…

CppCon 2018 學習:Feather: A Modern C++ Web Development Framework

你這段內容羅列的是 Web 開發中的幾個基礎概念和組成模塊,下面我逐一用中文進行解釋,并理清它們之間的關系: 基礎概念說明 1. HTTP Server(HTTP服務器) 是一個監聽 HTTP 請求并返回響應的程序。主要功能&#xff1a…

武漢大學機器人學院啟航:一場顛覆性的產教融合實驗,如何重塑中國智造未來?

當百年學府按下“產業加速鍵”,教育革命的號角已經吹響 2025年7月,武漢大學一紙公告震動教育界與科技圈——成立機器人學院,攜手小米、宇樹等硬科技領軍企業,聘請10位產業教授入駐。這絕非一次常規的校企合作,而是一場…

QT記事本4——下拉框修改值后解決亂碼問題

下拉框修改值后解決亂碼問題 void Widget::onCurrentIndexChanged(int index) {qDebug()<<index;//索引從0開始qDebug()<<ui->comboBox->currentText();//切換編碼時&#xff0c;首先清空當前的文本框ui->textEdit->clear();if(file.isOpen()){//僅在…

““ ‘‘ C++

在C中&#xff0c;"" 和 的含義完全不同&#xff0c;只有""是空字符串&#xff0c;而既不是空字符串&#xff0c;也不能表示空字符&#xff0c;具體區別如下&#xff1a; 1. 雙引號 ""&#xff1a;空字符串字面量 類型&#xff1a;const char…

電腦遠程控制另一臺電腦無法連接怎么辦

電腦遠程控制另一臺電腦無法連接怎么辦&#xff1f;遠程桌面連接是遠程管理另一臺計算機時比較常用的方式&#xff0c;在進行電腦遠程控制時&#xff0c;無法連接是常見的問題&#xff0c;以下將從多個方面分析原因并提供解決方法。如果涉及無公網IP目標主機需要遠程桌面連接的…

springboot3.2/3.4+rocketmq5.3.3測試程序的基本例子

想測試下springboot新版中與rocketmq5.3.3的配置使用&#xff0c;今天嘗試了下&#xff0c;記錄如下&#xff1a; 1、首先springboot使用3.2.7&#xff0c;rocketmq使用5.3.3&#xff0c;且使用docker部署rocketmq。 docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/do…

深入剖析AI大模型:TensorFlow

今天來聊一下TensorFlow&#xff0c;任何一門技術我建議還是從它出現的背景開始。因為你這就知道它存在的原因是什么。2015 年&#xff0c;Google 開源了深度學習框架 TensorFlow&#xff0c;一經推出便在學術界和工業界引起巨大反響。當時&#xff0c;深度學習模型的復雜度與日…

【數字后端】- tcbn28hpcplusbwp30p140,標準單元庫命名含義

tcbn28: 代表工藝類型是臺積電28nm工藝hpcplus: 代表工藝平臺是HPC BWP: 其中B代表標準單元的類型是 “standard” base cell&#xff1b;W代表N-well 工藝&#xff0c;放置在 P-substrate上&#xff1b;P表示該 cell 使用的是 P-type transistor layout orientation&#xff1…

KNN算法詳解及Scikit-learn API使用指南

一、KNN算法介紹 K最近鄰(K-Nearest Neighbor, KNN)算法是機器學習中最簡單、最直觀的分類算法之一。它既可以用于分類問題&#xff0c;也可以用于回歸問題。KNN是一種基于實例的學習(instance-based learning)或懶惰學習(lazy learning)算法&#xff0c;因為它不會從訓練數據…

【PMP】項目管理入門:從基礎到環境的體系化拆解

不少技術管理者都有過這樣的困惑&#xff1a; 明明按流程做了項目管理&#xff0c;結果還是延期、超預算&#xff1f;需求變更多到炸&#xff0c;到底是客戶無理還是自己沒管好&#xff1f;跨部門協作像“推皮球”&#xff0c;資源總不到位&#xff1f; 其實&#xff0c;項目失…