RAGFlow:基于 OCR 和文档解析的下一代 RAG 引擎

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net

一、引言

人工智能的浪潮中,检索增强生成(Retrieval-Augmented Generation,简称 RAG)技术以其独特的优势成为了研究和应用的热点。RAG 技术通过结合大型语言模型(LLMs)的强大生成能力和高效的信息检索系统,为用户提供了一种全新的交互体验。然而,随着技术的深入应用,一系列挑战也逐渐浮现。

首先,现有的 RAG 系统在处理海量数据时面临着效率和准确性的双重压力。尽管 LLMs 能够生成流畅的文本,但在面对复杂、非结构化的数据时,它们往往难以准确把握和召回关键信息。此外,RAG 系统在数据管理和理解方面也存在局限,这导致了所谓的 “垃圾输入,垃圾输出”(GIGOut)问题,即如果输入数据质量不高,那么生成的答案也很难达到预期的准确性

正是在这种背景下,RAGFlow 应运而生。作为一款端到端的 RAG 解决方案,RAGFlow 旨在通过深度文档理解技术,解决现有 RAG 技术在数据处理和生成答案方面的挑战。它不仅能够处理多种格式的文档,还能够智能地识别文档中的结构和内容,从而确保数据的高质量输入。RAGFlow 的设计哲学是 “高质量输入,高质量输出”,它通过提供可解释性和可控性的生成结果,让用户能够信任并依赖于系统提供的答案

2024 年 4 月 1 日,RAGFlow 宣布正式开源,这一消息在技术界引起了轰动。开源当天,RAGFlow 在 GitHub 上迅速获得了数千的关注,不到一周时间,已吸收 2900 颗星,这不仅体现了社区对 RAGFlow 的高度认可,也显示出大家对这一新技术的热情。

随着 RAGFlow 的开源,它不仅为技术社区带来了新的活力,也为解决 RAG 技术面临的困难提供了新的思路和工具。RAGFlow 的出现,标志着我们在构建更加智能、高效和可靠的 RAG 系统的道路上迈出了坚实的一步。

二、RAGFlow 的核心功能

三、技术架构

3.1、RAGFlow 系统架构

RAGFlow 系统是一个高效、智能的信息处理平台,它通过一系列精心设计的组件,实现了对复杂查询的快速响应和精准处理。这个系统的核心组件包括:

这些组件共同构成了 RAGFlow 系统的强大架构,使得它能够高效地处理用户的查询,快速地从文档中检索信息,并生成准确、有用的答案。这个系统不仅提高了信息处理的效率,也极大地提升了用户的使用体验。

RAG 系统的架构是一个精密而高效的工作流程,它通过一系列精心设计的组件,确保了用户查询的准确处理和高质量答案的生成。这个系统的工作流程可以概括为以下几个步骤:

通过这样的工作流程,RAG 系统架构能够高效地处理用户的查询,从文档中提取有价值的信息,并生成准确、有用的答案。这种系统不仅提高了信息检索的效率,也极大地提升了用户体验。

3.2、DeepDoc:深度文档理解的基石

DeepDoc 是 RAGFlow 的核心组件,它利用视觉信息和解析技术,对文档进行深度理解,提取文本、表格和图像等信息。DeepDoc 的功能模块包括:

3.3、LLM 和嵌入模型在 RAGFlow 中的作用

在 RAGFlow 中,LLM(Large Language Models,大型语言模型)和嵌入模型(Embedding Models)扮演着至关重要的角色,它们共同协作以实现高效的信息检索和生成任务。

LLM 是 RAGFlow 中的核心组件之一,负责理解和生成自然语言。在 RAGFlow 中,LLM 的主要作用包括:

嵌入模型在 RAGFlow 中主要用于将文本数据转换为向量表示,这对于信息检索和相似性比较至关重要。嵌入模型的主要作用包括:

在 RAGFlow 中,LLM 和嵌入模型的结合使用,使得系统不仅能够理解复杂的自然语言查询,还能够在海量数据中快速准确地检索到相关信息,并生成高质量的回答。这种协同工作机制大大提高了 RAGFlow 在知识库问答、企业数据集成和多模态信息处理等场景下的应用潜力和效率。

3.4、文本分块过程中的可视化和人工干预

RAGFlow 在处理文档时,特别强调了智能文档处理的可视化和可解释性。这意味着用户不仅可以获得由系统处理后的结果,还能够清晰地看到文档是如何被分块和解析的。这样的设计使得用户可以对 AI 的处理结果进行核查和必要的干预,确保最终输出的准确性和可靠性。

在文本分块过程中,RAGFlow 首先会对用户上传的文档进行结构识别,这包括但不限于标题、段落、换行等。对于更为复杂的元素,如图片和表格,RAGFlow 也会进行详细的布局识别和结构分析。例如,在处理表格时,系统不仅会识别出表格的存在,还会进一步识别表格内部的每一个单元格,以及多行文字是否需要合并成一个单元格等。这些信息都会被合理地处理并结合表头信息,以确保数据的正确性和完整性。

RAGFlow 的可视化功能允许用户查看文档解析的具体结果。用户可以看到文档被分割成了多少块,各种图表是如何处理的。如果系统识别的结果与用户的预期有所出入,用户可以进行适当的干预。这种干预可能包括调整分块的方式、合并或分割某些部分,以及修改表格的识别结果等。RAGFlow 提供了直观的用户界面,使得用户可以轻松地进行这些操作。

此外,RAGFlow 还提供了一种机制,允许用户通过点击来定位到原文,对比处理结果和原文的差异。这种对比功能不仅可以帮助用户确认 AI 的处理是否准确,还可以让用户对处理过程有更多的了解和控制。这种可视化和可解释性的设计,大大提高了用户对 AI 处理结果的信任度,同时也使得 RAGFlow 成为一个更加强大和灵活的工具。

四、设置和运行 RAGFlow

RAGFlow 是一个基于深度文档理解的开源 RAG(检索增强生成)引擎,旨在为企业提供一个简化的 RAG 工作流程。以下是设置和运行 RAGFlow 的详细指南:

4.1、系统要求

在开始安装 RAGFlow 之前,请确保您的系统满足以下基本要求:

4.2、安装 Docker

RAGFlow 需要 Docker 来运行。如果您的本地计算机(Windows、Mac 或 Linux)尚未安装 Docker,请访问 Docker 官网进行安装。

4.3、启动 RAGFlow 服务器

  1. 调整系统设置:确保 vm.max_map_count 的值大于或等于 262144。您可以通过运行以下命令来检查和设置该值:
# 要检查 vm.max_map_count 的值:
sysctl vm.max_map_count
 
# 如果不是,请将 vm.max_map_count 重置为至少 262144 的值。
sudo sysctl -w vm.max_map_count=262144

为了使更改永久生效,请在 /etc/sysctl.conf 文件中添加或更新 vm.max_map_count=262144

1、克隆 RAGFlow 存储库

git clone https://github.com/infiniflow/ragflow.git

2、克隆 RAGFlow 存储库:

git clone https://github.com/infiniflow/ragflow.git

3、构建 Docker 镜像并启动服务器

cd ragflow/docker
docker compose up -d

核心映像大小约为 9 GB,加载可能需要一些时间。

4、检查服务器状态

docker logs -f ragflow-server

如果系统成功启动,您将看到确认消息。

    ____                 ______ __
   / __ \ ____ _ ____ _ / ____// /____  _      __
  / /_/ // __ `// __ `// /_   / // __ \| | /| / /
 / _, _// /_/ // /_/ // __/  / // /_/ /| |/ |/ /
/_/ |_| \__,_/ \__, //_/    /_/ \____/ |__/|__/
              /____/
 
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:9380
 * Running on http://172.22.0.5:9380
 INFO:werkzeug:Press CTRL+C to quit

4.4、配置选项

  1. 选择 LLM 工厂:在 service_conf.yaml 文件中的 user_default_llm 部分选择所需的 LLM 工厂。

  2. API 密钥设置:使用相应的 API 密钥更新 service_conf.yaml 文件中的 API_KEY 字段。更多信息请参阅 /docs/llm_api_key_setup.md

  3. 要更新默认 HTTP 服务端口 (80),请转到 docker-compose.yml 并将 80:80 更改为 <YOUR_SERVING_PORT>:80

所有系统配置的更新需要重新启动系统才能生效:docker-compose up -d

4.5、访问 RAGFlow 界面

一旦服务器启动并运行,您可以通过浏览器访问 RAGFlow 界面。在默认配置下,您可以省略默认 HTTP 服务端口 80。只需在浏览器中输入 RAGFlow 服务器的 IP 地址即可。

通过上述步骤,您可以成功设置和运行 RAGFlow。确保遵循所有配置指南,并在启动服务器后检查其状态以确认一切正常。通过选择适当的 LLM 工厂和设置 API 密钥,您可以确保 RAGFlow 与您的业务需求无缝集成。最后,通过简单的浏览器操作,您就可以开始使用 RAGFlow 强大的文档理解和问答功能了。

五、RAGFlow 未来规划

RAGFlow 作为一款先进的检索增强生成引擎,其未来发展规划主要围绕以下几个核心方向:

  1. 增强多语言支持能力

  2. RAGFlow 将致力于提升其对不同语言的支持能力,使其能够更好地服务于全球化的市场。这意味着 RAGFlow 将开发和集成更多语言的文档结构识别模型,从而能够准确理解和处理各种语言的非结构化数据。这不仅包括常见的英语、中文等,还将扩展到其他语种,以满足不同地区用户的需求。

  3. 提升本地大型语言模型(LLM)的性能

  4. 为了提高 RAGFlow 在处理非结构化数据时的准确性和效率,未来将对本地的大型语言模型进行优化和升级。这可能包括改进模型的训练数据、调整模型结构以及采用新的算法和技术,以提高模型的理解和生成能力。通过这些改进,RAGFlow 将能够更准确地理解和生成复杂的语言内容,为用户提供更加丰富和精准的信息。

  5. 扩展网络爬虫功能

  6. RAGFlow 计划扩展其网络爬虫的功能,以便能够从更广泛的来源获取数据。这包括接入企业的各类数据源,如 MySQL 的 binlog、数据湖的 ETL 以及外部的爬虫等。通过这些数据源的集成,RAGFlow 将能够更全面地收集和分析信息,为用户提供更全面的知识库和更准确的检索结果。

  7. 适应更多复杂场景

  8. RAGFlow 的设计目标之一是让其能够适应更多的复杂场景,尤其是企业级(B 端)的应用场景。为此,RAGFlow 将开发更多的定制化模板和处理流程,以满足不同行业和岗位对文档处理和信息检索的特殊需求。这可能涉及到对特定行业术语的理解、对复杂文档结构的处理等。

  9. 提供更灵活的企业级数据接入

  10. RAGFlow 将推出面向企业级数据接入的低代码平台,使得企业能够更容易地将内部数据和文档整合到 RAGFlow 系统中。这将极大地提高企业使用 RAGFlow 的便利性和效率,同时也为企业提供了更多的灵活性和自主性。

  11. 高级内容生成

  12. 除了问答对话之外,RAGFlow 还将提供高级内容生成的功能,如长文生成等。这将使得 RAGFlow 不仅能够回答用户的问题,还能够创作文章、报告等内容,为用户提供更加全面的服务。

通过这些未来规划,RAGFlow 旨在成为一个更加强大、灵活且易于使用的系统,能够满足不同用户在各种场景下的需求,特别是在企业级应用中发挥重要作用,可以期待一下。

六、总结

在对 RAGFlow 的探索中,我们可以清晰地看到其在 RAG(Retrieval-Augmented Generation)领域中的重要地位和显著优势。RAGFlow 作为一款下一代开源 RAG 引擎,不仅在问答对话方面表现出色,还具备高级内容生成的能力,例如长文生成等。这使得 RAGFlow 能够为用户提供更为全面和深入的服务,满足不同场景下的需求,尤其在企业级应用中发挥着重要作用。

RAGFlow 的核心功能和技术架构,包括其系统架构、DeepDoc 深度文档理解模块、LLM 和嵌入模型的应用,以及文本分块过程中的可视化和人工干预等,共同构成了一个强大、灵活且易于使用的系统。这些特点不仅提升了用户体验,也为开发者提供了更多的创新空间。

开源项目如 RAGFlow 在推动技术创新方面扮演着至关重要的角色。它们促进了知识的共享和技术的民主化,为全球开发者社区提供了一个共同成长和协作的平台。通过开源,RAGFlow 鼓励更多的开发者参与到项目中来,共同解决问题,分享最佳实践,从而加速了创新的步伐。

最终,RAGFlow 的成功不仅体现在其技术成就上,更在于其对整个 RAG 领域乃至人工智能技术发展的贡献。它不仅推动了相关技术的创新和应用,也为未来的技术进步和产业发展奠定了坚实的基础。随着 RAGFlow 的不断发展和完善,我们有理由相信,它将继续在推动人工智能技术进步和促进社会数字化转型方面发挥重要作用。

七、参考文献

[1]. DeepDoc: https://huggingface.co/InfiniFlow/deepdoc

[2]. RAGFlow GitHub: https://github.com/infiniflow/ragflow

[3]. RAGFlow Demo: https://demo.ragflow.io/

[4]. Infinity : _https://github.com/infiniflow/infinity_

[5]. RAGFlow YC News: https://news.ycombinator.com/item?id=39896923

[6]. DTrOCR: Decoder-only Transformer for Optical Character Recognition: https://arxiv.org/pdf/2308.15996v1.pdf