返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

RAGFlow 深度介绍

[复制链接]
链载Ai 显示全部楼层 发表于 3 天前 |阅读模式 打印 上一主题 下一主题

一、介绍

RAGFlow 是一个基于深度文档理解的开源 RAG(检索增强生成)引擎。与 LLM 集成后,它能够提供真实的问答功能,并以来自各种复杂格式数据的可靠引用为支撑。

RAGFlow 的安装是基于Docker的,具体的安装步骤可以直接参考官方使用文档或者仓库的README文件,官方建议的配置是 16G 的内存、50G 的硬盘。如果不想安装也可以访问官方提供的演示站点进行体验。

目前的各个版本区别如下表所示,slim精简版的镜像会小一点。这里的镜像大小指的是已下载的 Docker 镜像的大小,该镜像是被压缩过的。Docker 运行镜像时会将其解压,这会导致磁盘占用量显著增加。例如,精简版镜像解压后会膨胀到 7GB 左右。

RAGFlow image tag
Image size (GB)
Has embedding models and Python packages?
Stable?
v0.20.5
≈9
✔️
Stable release
v0.20.5-slim
≈2
Stable release
nightly
≈9
✔️
Unstable
nightly build
nightly-slim
≈2
Unstable
nightly build

二、功能

2.1 首页和设置

进入首页可以切换语言,有知识库、聊天、搜索、智能体、文件管理 5 个功能,将知识库放在第一个而不是聊天或者智能体,可能也说明该工具侧重点跟名字一样,是在于 RAG 的功能吧。

和 dify 类似,设置里面可以配置模型、MCP 等功能,也提供了 HTTP API 接口及文档供外部调用。


2.2 知识库(Dataset)

知识库的操作

进入知识库首页可以管理之前的知识库或创建新的知识库。每创建 1 个知识库,都会在文件管理的root/.knowledgebase目录下创建对应的同名文件夹,这个可以先不用管。

知识库可以上传文件,也可以上传空文件,上传的文件会存放在文件管理中。文档解析可以在上传创建时,也可以传好后在列表中操作。官方建议直接将文件上传到文件管理中,然后链接到目标知识库,以便于解耦。

文件操作

上传后的文件有未解析、解析中、取消、失败等状态,可以进行启用/禁用、改名、查看属性、下载、删除等操作。

可以重新解析,重新解析的时候可以选择是否清空已解析出来的分块,每个文件可以单独设置切片方式,解析或重新解析的时候以自己的为准,不会使用知识库配置的切片方法。

文档可以设置元数据,比如如果您有一个 HTML 文件数据集,并且希望 LLM 在响应您的查询时引用源 URL,请向每个文件的元数据添加 "url" 参数。

分块管理

RAGFlow 具有可见性和可解释性,允许您查看分块结果并在必要时进行干预。点击标题可以查看详细的分块结果,可以创建、启用/禁用、删除分块,双击分块可以添加关键字、问题、标签,或在必要时进行手动更改。

检索测试

可以进行检索/召回测试,详细内容可以参考:https://ragflow.io/docs/dev/run_retrieval_test

RAGFlow 在聊天中使用了全文搜索和向量搜索的多重召回功能。在设置 AI 聊天之前,请考虑调整以下参数,以确保预期信息始终出现在答案中:

  • • 相似度阈值:相似度低于阈值的块将被过滤。默认情况下,该值设置为 0.2。
  • • 向量相似度权重:向量相似度对总分的贡献百分比。默认设置为 0.3。

分块方式

可以配置知识库,普通选项可以修改名称、头像、描述这些基本信息。也可以修改分块方式,每一种切片方法还配了说明和示例。

可选的分块方式如下所示,不同方式支持的文件格式是不一样的,一般用General就行。

Template
Description
File format
General
根据预设的块标记号对文件进行连续分块。
MD, MDX, DOCX, XLSX, XLS (Excel 97-2003), PPT, PDF, TXT, JPEG, JPG, PNG, TIF, GIF, CSV, JSON, EML, HTML
Q&A
只能有两列,问题和答案。
XLSX, XLS (Excel 97-2003), CSV/TXT
Resume
仅限企业版。您还可以在 demo.ragflow.io 上进行试用。将简历解析为结构化数据。
DOCX, PDF, TXT
Manual

PDF
Table
第一行必须是列标题,列标题必须是有意义的术语,会被按行分块。
XLSX, XLS (Excel 97-2003), CSV/TXT
Paper

PDF
Book

DOCX, PDF, TXT
Laws

DOCX, PDF, TXT
Presentation

PDF, PPTX
Picture

JPEG, JPG, PNG, TIF, GIF
One
每份文件都会完整地进行分块处理(作为一个整体)。
DOCX, XLSX, XLS (Excel 97-2003), PDF, TXT
Tag
知识库的作用是作为其他知识的标签集。一列用于标签描述,另一列用于标签,标签描述列位于标签列之前。
XLSX, CSV/TXT

文档解析器

其实在我们选择切片方法的同时,还有一个很重要的一个设置文档解析器:DeepDoc。不同格式和不同检索要求的大量文档,准确的分析成为一项极具挑战性的任务。DeepDoc 就是为了这个目的而诞生的。到目前为止,DeepDoc 中有两个组成部分:视觉处理和解析器。

  • • 视觉处理
    • • OCR(Optical Character Recognition,光学字符识别)。由于许多文档都是以图像形式呈现的,或者至少能够转换为图像,因此 OCR 是文本提取的一个非常重要、基本,甚至通用的解决方案。
    • • 布局识别(Layout recognition)。来自不同领域的文件可能有不同的布局,如报纸、杂志、书籍和简历在布局方面是不同的。只有当机器有准确的布局分析时,它才能决定这些文本部分是连续的还是不连续的,或者这个部分需要表结构识别(Table Structure Recognition,TSR)来处理,或者这个部件是一个图形并用这个标题来描述。我们有 10 个基本布局组件,涵盖了大多数情况:文本、标题、配图配图标题、表格、表格标题、页头、页尾、参考引用、公式
    • • TSR(Table Structure Recognition,表结构识别)。数据表是一种常用的结构,用于表示包括数字或文本在内的数据。表的结构可能非常复杂,比如层次结构标题、跨单元格和投影行标题。除了 TSR,我们还将内容重新组合成 LLM 可以很好理解的句子。TSR 任务有五个标签:列、行、列标题、行标题、合并单元格
  • • 解析器
    • • PDF、DOCX、EXCEL 和 PPT 四种文档格式都有相应的解析器。最复杂的是 PDF 解析器,因为 PDF 具有灵活性。PDF 解析器的输出包括:
      • • 在 PDF 中有自己位置的文本块(页码和矩形位置)。
      • • 带有 PDF 裁剪图像的表格,以及已经翻译成自然语言句子的内容。
      • • 图中带标题和文字的图。

2.3 聊天应用(Chat)

知识库、无幻觉聊天和文件管理是 RAGFlow 的三大支柱。RAGFlow 中的聊天基于一个或多个特定知识库。创建知识库、完成文件解析并运行检索测试后,即可开始 AI 对话。

具有管理会话、多模型对比、嵌入网站、聊天设置等功能,前三个功能没有什么复杂的内容,挑一点聊天设置中的一些内容说下。

知识库

选择对应的知识库,可以选择一个或多个知识库,但请确保它们使用相同的嵌入模型,否则会出错。

推理

v0.17.0开始,RAGFlow 支持在 AI 聊天中集成 DeepResearch。要激活此功能,需要在聊天设置中启用推理切换。

变量

变量是指系统提示中要使用的变量(键)。{knowledge}为保留变量。点击 “添加” 可为系统提示添加更多变量。{knowledge}是系统的保留变量,表示从“助手设置”选项卡下“知识库”指定的知识库中检索到的块。如果您的聊天助手与某些知识库关联,您可以保留它。从v0.17.0开始,您可以在不指定知识库的情况下启动 AI 聊天,在这种情况下,我们建议删除{knowledge}变量以避免不必要的引用,并将 Empty response 字段保留为空以避免出现错误。除了{knowledge},您还可以定义自己的变量来与系统提示配对。要使用这些自定义变量,您必须通过 RAGFlow 的官方 API 传入它们的值。从v0.20.5开始,如果您在此处添加自定义变量,则传递其值的唯一方法是调用 API。

执行过程

可以点击在答案上方的灯泡💡按钮查看执行过程的详细信息,但是要注意只有在当前会话中,答案全部输出完才有,离开或者查看其他对话不会有这个按钮。一开始我都没注意,以为是黑盒的看不到呢。

点击答案上方的灯泡图标,查看扩展的系统提示:Click the light bulb icon above the answer to view the expanded system prompt:

灯泡图标仅适用于当前对话。The light bulb icon is available only for the current dialogue.


2.4 搜索( Search)

AI 搜索是使用预定义检索策略(加权关键词相似度和加权向量相似度的混合搜索)和系统默认聊天模型进行的单轮 AI 对话。它不涉及知识图谱、自动关键词或自动提问等高级 RAG 策略。相关块会根据其相似度得分按降序排列在聊天模型的响应下方。

在调试聊天助手时,您可以参考 AI 搜索来验证您的模型设置和检索策略。

聊天是一种多轮 AI 对话,您可以在其中定义检索策略(在混合搜索中,可以使用加权重排序分数来替代加权向量相似度)并选择聊天模型。在 AI 聊天中,您可以根据具体情况配置高级 RAG 策略,例如知识图谱、自动关键词和自动提问。检索到的区块不会与答案一起显示。

搜索和知识库检索测试的区别,检索测试应该是看纯召回重排序的效果,搜索感觉是介于检索和聊天之间的一种状态,与聊天最大的区别是没有多轮对话。


2.5 智能体(Agent)

Agent 和 RAG 是互补的技术,在业务应用中相互增强。RAGFlow v0.8.0 引入了 Agent 机制,前端提供无代码工作流编辑器,后端提供基于图的全面任务编排框架。该机制构建于 RAGFlow 现有的 RAG 解决方案之上,旨在编排查询意图分类、对话引导和查询重写等搜索技术,以实现以下目标:提供更高的检索率,适应更复杂的场景。

组件

开始组件(Begin)

开始组件只能有一个,可以配置模式、开场白和输入参数。模式可以从对话式任务之中选一个,就是对话流和工作流的区别;开场白只能在对话模式下选择开启,在聊天中向用户发送的第一条消息,可以是欢迎语或引导用户继续操作的指令;输入可以配置输入参数以及全局变量,可选类型:单行文本、段落文本、下拉选项、文件上传、数字、布尔值。

Agent 组件

Agent 节点具备推理、反思、工具使用和多智能体协作能力,RAGFlow 只有 Agent 节点,没有纯 LLM 节点,需要用 LLM 的地方就要选择 Agent 组件了。

首先可以选择模型,并配置推理参数,并且预设了一些自由度选项,不理解这些参数的可以从中选一个。

然后是系统提示词和用户提示词,输入斜杠可以插入变量。

可以配置工具和子智能体,工具包括系统内置工具(联网、检索等)和 MCP,智能体可以配置子智能体。

最后是高级设置,包括历史消息窗口大小、引用、最大重试次数、错误后延迟、最大反思轮数、异常处理方式等配置内容。

检索组件(Retrieval)

从指定数据集检索信息的组件。在大多数 RAG 场景中,信息从指定的知识库中提取,然后发送到 LLM 进行内容生成。 检索组件既可以作为独立的工作流模块运行,也可以作为 Agent 组件的工具运行。在后者角色中, Agent 组件可以自主控制何时调用它进行查询和检索。

两种方式的配置项内容是一样的,知识库可以多选,高级设置可以定义和微调检索组件的搜索行为。

其他组件

开始组件是自带的,Agent 和检索组件是 RAG 的核心组件。除此之外还有对话类的回复消息和等待输入组件,流程控制的判断、循环、问题分类,以及数据操控和工具等组件。

保存和历史版本

修改的智能体可以保存以及查看历史版本,但是我在写文档进行一些修改的时候,发现没有取消的功能,历史版本也只能下载没有覆盖的功能。

运行和日志

前面讲聊天应用的时候是没有日志的,只是右侧有个会话列表,Agent 这里有日志选项可以查看。不过聊天应用点击答案上方小灯泡查看执行过程的详细信息的功能应该是没有的。


2.6 文件管理(File Management)

虽然直接将文件上传到知识库似乎更方便,但我们强烈建议您将文件上传到文件管理 ,然后将其链接到目标知识库。这样,您就可以避免永久删除已上传到知识库的文件。
相比直接将文件上传到各个知识库,将文件上传到 RAGFlow 的文件管理中,再链接到不同的知识库, 并不是一个多余的步骤,尤其是当你想删除一些解析过的文件或者整个知识库,但保留原始文件的时候。

官方文档建议直接将文件上传到文件管理中,然后链接到目标知识库,以便于解耦。每个知识库在文件管理的root/.knowledgebase目录下都有对应的文件夹,在知识库中直接添加的文件在这个文件夹中,这个文件夹不能创建子文件夹。文档地址:https://ragflow.io/docs/dev/manage_files

RAGFlow 的文件应该是存在 MinIO 中的,文件管理提供了树形多级目录的管理界面。基本的操作该有的都有,包括目录和文件的增、删、改名、移动、下载(仅单文件)、预览(个别文件格式)以及批量的移动和删除操作。可以自己试下或者参考官方文档。

除此之外,就是将整个目录或某个文件关联到单个或多个知识库的操作。被关联的内容会在知识库中显示,但不会存在于root/.knowledgebase/对应知识库名称文件夹中,可以在知识库中删除关联的内容。关联是一个单次的操作,一直关联同一个内容是允许的,也就是说这个关联是一个单向的:知识库->内容,所以在知识库中可以放心的操作。

文件管理仅支持当前目录下的文件名和文件夹名过滤,不会检索子目录中的文件或文件夹。

从 RAGFlow v0.20.5 开始,不支持批量下载,也不能下载整个文件夹。


2.7 API 集成

RAGFlow 的 API 调用是通过 RESTful 风格的 HTTP API 或者 Python SDK,使用 API 需要先在账号设置中创建一个 API KEY。

API 文档在官方文档中有详细说明,包括知识库、知识库内文件、知识库内文件的分块、聊天应用、智能体应用、会话管理等操作接口,具体链接放在文末。不过似乎是没有提供文件管理模块的 API,不过都用 API 调用了,文件应该也不太需要平台统一管理,通过外部系统集成就行。


三、 RAG 使用体验

3.1 文档处理和检索

前面看了不仅有多种切片方法,针对各种类型的文件都有对应的优化,特别是还有自研的 DeepDoc 可以从视觉上处理 PDF 文件内容,而不仅仅只是读取 PDF 中的文本来处理,对于表格处理的也很好。

RAGFlow 并非万能之选。它注重灵活性,并支持深度定制,以适应更复杂的用例。从 v0.17.0 开始,RAGFlow 将 DeepDoc 特定的数据提取任务与 PDF 文件的分块方法分离。这种分离使您能够自主选择 OCR(光学字符识别)、TSR(表格结构识别)和 DLR(文档布局识别)任务的视觉模型,以平衡速度和性能,从而满足您的特定用例。如果您的 PDF 仅包含纯文本,您可以选择 “Naive” 选项跳过这些任务,以减少整体解析时间。

知识库可以设置标签、召回增强、知识图谱,文档可以设置元数据,分块可以设置关键词、QA。当然也提供了检索测试等 RAG 系统基本的功能,不过定义和微调检索组件的搜索行为不是在知识库配置,而是各个应用中分开配置的。

3.2 聊天和智能体

基本的都有但是体验一般,比如完全没有错误检测,提示词编辑器可以用变量但是没有(x)按钮。

提供了多种语言可供选择但是中文翻译差,比如有一个相似度相似度权重,其实是向量相似度(Vector similarity weight)的意思,有种浏览器插件翻译的感觉。

3.3 资源占用

我本地使用 docker 部署未限制的情况下,内存占用约为 8G,主要是 ES 的占用还是比较高的。使用 Infinity 替换 ES 的话会减少到 4G 左右。

关于 ES 和 Infinity 的区别,我让 AI 帮我简单总结了下:

对比点
Elasticsearch
Infinity
主要定位
通用搜索引擎(全文检索为主,向量检索为辅)
专注 RAG(全文 + 向量)场景的数据库
向量检索
插件扩展,性能一般
原生内核支持,性能优化好
全文检索
成熟、功能强大
功能覆盖常见需求,优化更贴近 RAG
资源开销
JVM 体系,内存大、运维成本高
较轻量,无 JVM 依赖
混合检索(Hybrid Search)
需要额外配置 / pipeline
内置支持
生态成熟度
高,配套工具多
仍在发展中,生态相对弱
适合场景
通用搜索 + 简单 RAG
专注 RAG,追求性能 / 精度 / 一体化

也可以限制资源占用或使用外部独立部署的组件,但不建议低于 4C8G,带图片的复杂文件处理解析的时候占用很高,资源不够会出现未知问题。参考 FAQ:https://ragflow.io/docs/dev/faq#why-does-my-pdf-parsing-stall-near-completion-while-the-log-does-not-show-any-error,https://github.com/infiniflow/ragflow/issues/1453


3.4 总结

从目前的对比看,下面这些情况 RAGFlow 特别有优势:

  1. 1. 处理大量复杂、格式多样的文档,包含扫描件、图片、表格、混合格式,需要 OCR 或解析排版结构的场合。
  2. 2. 对检索准确性要求高,包括精确引用、减少 hallucination、要保证答案可追溯性(traceability)。例如法律、医疗、金融报告、合同审查、审计等。
  3. 3. 需要定制检索策略/重排序/混合检索,甚至对比试不同 embedding 模型或召回策略的业务。
  4. 4. 团队有一定技术实力:能够调试、部署、维护、调优模型和流程。资源充足。

四、RAG 检索优化

实践中在知识库文件比较多了之后,经常存在语义模糊、同质化严重,可以采用以下思路进行优化:

  • • 原始数据源
    • • 相似文档合并。
    • • 格式比较固定的文档采用表格形式。
    • • 结构化数据,给原始文件定义属性、分类、关键词、元数据等结构化信息,检索时可以直接根据字段过滤。
  • • 检索召回
    • • 混合检索,全文检索、向量相似度检索、Reank 重排序。
    • • 使用强 Reank 模型,先宽召回 TopK,再精排选 TopN,保证多样性但减少同质。
    • • 意图识别 + 查询改写,先用 LLM 判断查询意图,提示词带着意图进行查询,减少语义漂移和幻觉。
  • • 流程上
    • • 查询意图特别模糊的,可以追问或者列出候选问,让用户二次提问。
    • • 分类、路由、分层,先识别主题/分类/层级,然后检索时可以缩小范围。
  • • 生成
    • • 以上优化不了的方面可以优化生成逻辑,保障用户体验。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ