Skip to main content

深入探讨RAGFlow v0.15.0

· 5 min read
Yingfeng Zhang

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

代理改进

此版本引入了对Agent的多项增强,包括额外的API、逐步运行调试以及导入/导出功能。自v0.13.0以来,RAGFlow的Agent已进行了重构以提高可用性。逐步运行调试功能完成了这一过程,使得Agent工作流中的操作可以单独执行,从而帮助用户基于输出信息进行调试。

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可以解决语义差距,但这些解决方案是重量级的,消耗大量token。相对轻量级的方法是Contextual Retrieval,由Claude在今年9月推出。这种方法利用LLMs为每个文本块生成补充信息,提高召回准确性。例如,如果文本包含医疗解决方案但没有疾病描述,可能无法有效检索。LLMs可以方便地添加相关补充信息以促进召回。

此上下文检索功能自v0.13.0版本起已在RAGFlow中提供。通过在知识库配置页面上选择自动关键词提取,您可以启用此功能。

数据量

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

任务执行器改进

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

无限改进

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

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

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

(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 建立为企业级生产解决方案的关键一步。我们邀请大家继续关注 RAGFlow on GitHub 并给我们一个星标!