目录标题

  • 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;项目失…