RAGFlow 2024年度的最终版本 v0.15.0 刚刚发布,带来了以下关键更新:
Agent改进
此版本对 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 可以解决语义鸿沟问题,但这些解决方案比较“重”,并且消耗大量 tokens。一个相对轻量级的方法是今年9月 Claude 推出的上下文检索(Contextual Retrieval)。该方法利用 LLM 为每个文本块生成补充信息,从而提高召回准确性。例如,如果一段文本包含某种医疗治疗方案但没有疾病描述,可能无法有效召回。LLM 可以方便地添加相关的补充信息,以便于召回。
该上下文检索功能自 v0.13.0 版本起已在 RAGFlow 中可用。在知识库配置页面选择自动关键词提取,即可启用此功能。
数据量
数据量的增加会显著影响召回准确性。v0.15.0 版本引入了分层知识库功能,优先考虑更高质量的数据。要启用分层知识库排序,只需拖动下图所示的“Page Rank”滑块。此功能允许用户自定义其知识库的评分权重。
任务执行器改进
任务执行器自 RAGFlow 开源以来一直是受诟病之处。随着 v0.14.0 版本的发布,引入了一系列健壮性改进,而 v0.15.0 版本则专门增强了对 GraphRAG 和 RAPTOR 等高要求任务的支持。这些任务需要消耗大量的 tokens,如果在文档解析过程中发生异常,任务可能会中断,导致之前解析的结果丢失,用户体验不佳。在 v0.15.0 中,文档解析和预处理任务现在可以重用先前的解析结果,即使任务被异常中断,也能最大限度地减少浪费并提高效率。
Infinity 改进
Infinity 数据库已集成到 RAGFlow v0.14.0 中,作为 Elasticsearch 的替代方案,并在 v0.15.0 中获得了大量的错误修复,解决了与 Infinity 本身及其与 RAGFlow 集成相关的各种问题。我们还优化了从 RAGFlow 进行查询的过程和性能:当收到用户查询时,RAGFlow 不会简单地将其转发到后端文档搜索引擎;相反,它会结合一系列操作来增强整个查询过程。
- 分词后移除停用词和其他无意义的 token。
- 为每个 token 生成词项权重。
- 根据步骤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 并给我们一个星!