跳转到主内容

深入了解 RAGFlow v0.15.0

阅读时长6分钟

RAGFlow 2024 年的最终版本 v0.15.0 刚刚发布,带来了以下关键更新

Agent 改进项

此版本对 Agent 进行了多项增强,包括新增 API、分步运行调试以及导入/导出功能。自 v0.13.0 以来,RAGFlow 的 Agent 经过重构以提高可用性。分步运行调试功能完善了这一过程,允许 Agent 工作流中的操作符单独执行,从而帮助用户根据输出信息进行调试。<!--truncate-->

Agent 的导入和导出功能为 Agent 的复用奠定了基础。目前,在 LLM 生态系统中,有许多 Agent 和工作流框架可用。这些框架充当非程序员的 IDE,使得为业务场景编排特定的 Agent 和工作流变得非常具有挑战性。我们可以将这些编排好的 Agent 比作应用程序,而部署和执行它们的框架则类似于应用程序商店。因此,从长远来看,Agent 的发展可能会朝着接口兼容性和互操作性方向迈进。

另一方面,当前主流的 Agent 产品主要关注工作流,但今年在将推理能力集成到 Agent 框架方面取得了显著进展。预计明年将在这一领域取得进一步发展,特别是在多 Agent 场景中。LangGraph 已经发布了 LLM Agent 的互操作协议,RAGFlow 将在未来的版本中支持该协议。由于 Agent 与 RAG 紧密交互,RAGFlow 旨在通过提供此功能来增强用户便利性。然而,RAGFlow 仍专注于 RAG 本身,我们鼓励用户在 RAGFlow 上构建自己的 Agent,或使用其他工作流框架中开发的 Agent 来利用 RAGFlow 的能力。

DeepDoc 升级

文档布局分析模型是 DeepDoc 的入口点。自 4 月 1 日发布以来,DeepDoc 尚未进行任何升级。社区提出了许多请求,希望有一个统一的接口,使 DeepDoc 能够始终以 Markdown 格式输出,从而促进模型与后续处理之间的松散耦合。随着 MinerU 等优秀开源项目的出现,这一需求更加强烈。我们尚未朝这个方向发展,主要是因为 Markdown 无法完全表示多模态文档转换的结果;例如,它无法处理复杂的嵌套表格。同样,对于未来的数据类型,如流程图和饼图,直接以 JSON 格式输出会更方便。

另一方面,DeepDoc 的开源模型显然需要升级。此次升级侧重于增强文档布局模型,该模型将继续利用 YOLO 训练,在保持效率的同时显著提高文档布局识别的准确性。

检索增强生成

即使 DeepDoc 完美运行,它也无法单独解决召回准确性问题。除了混合搜索之外,文本数据的召回受两个因素影响:语义鸿沟和数据量。

语义鸿沟

我们知道 GraphRAG 和 RAPTOR 可以解决语义鸿沟问题,但这些解决方案很重,并且消耗大量令牌。一种相对轻量级的方法是 Claude 今年 9 月推出的 Contextual Retrieval(上下文检索)。此方法利用 LLM 为每个文本块生成补充信息,从而提高召回准确性。例如,如果一段文本包含医疗治疗方案而没有疾病描述,则可能无法有效检索。LLM 可以方便地添加相关的补充信息以方便召回。

自 v0.13.0 以来,RAGFlow 已提供此 Contextual Retrieval 功能。通过在知识库配置页面上选择自动关键词提取,您可以启用此功能。

数据量

数据量的增加会显著影响召回准确性。v0.15.0 版本引入了分层知识库功能,优先考虑高质量数据。要启用分层知识库排序,只需拖动“页面排名”滑块,如下图所示。此功能允许用户自定义其知识库的评分权重。

任务执行器改进

自 RAGFlow 开源以来,任务执行器一直是其备受诟病的问题。随着 v0.14.0 版本的发布,引入了一系列鲁棒性改进,v0.15.0 版本专门增强了对 GraphRAG 和 RAPTOR 等高要求任务的支持。这些任务需要大量的令牌消耗,如果文档解析期间发生异常,任务可能会中断,导致先前解析的结果丢失,用户体验不佳。在 v0.15.0 中,文档解析和预处理任务现在可以重用早期解析结果,即使异常中断了任务,从而最大限度地减少浪费并提高效率。

Infinity 改进

Infinity 数据库作为 Elasticsearch 的替代方案集成到 RAGFlow v0.14.0 中,并在 v0.15.0 中获得了显著的错误修复,解决了与 Infinity 本身及其与 RAGFlow 集成相关的各种问题。我们还优化了从 RAGFlow 查询的过程和性能:当收到用户查询时,RAGFlow 不会简单地将其转发到后端文档搜索引擎;相反,它会结合一系列操作来增强整个查询过程

  1. 分词后删除停用词和其他无意义的标记。
  2. 为每个标记生成词项权重。
  3. 根据步骤 2 之后的结果生成二元组短语查询。这些短语查询也与步骤 2 之后的结果一起发送到搜索引擎。

例如,对于问题“Tom 交付了什么结果?”,我们可能会得到以下查询

(results^0.0667) (tom^0.0667) (deliver^0.0667) "results tom"^0.1335 "tom deliver"^0.1335

RAGFlow 会为任何提出的问题生成大量的短语查询。在早期的全文搜索实现中,Infinity 只对标准查询应用动态剪枝优化,而没有处理短语查询或组合查询。在 Infinity 的最新版本 0.5.0 中,已经实现了对这些组合查询的优化,从而使整体查询性能提高了 3-5 倍。

最终思考

RAGFlow v0.15.0 标志着 2024 年的最终发布。自开源以来,RAGFlow 经历了快速迭代,导致其代码库中积累了“技术债务”。在最近的版本中,我们投入了大量时间进行代码重构和错误修复,这代表着将 RAGFlow 打造为企业级生产解决方案的关键一步。我们邀请大家继续关注 GitHub 上的 RAGFlow 并给我们加星!

© . This site is unofficial and not affiliated with InfiniFlow.