跳转到主内容

基于 RAPTOR 实现长上下文 RAG

阅读时间 4 分钟

RAGFlow v0.6.0 于本周发布,解决了自今年 4 月开源以来出现的许多易用性和稳定性问题。RAGFlow 的未来版本将专注于解决 RAG 能力的深层次问题。不得不说,目前市场上的现有 RAG 解决方案仍处于 POC(概念验证)阶段,无法直接应用于真实的生产场景。<!--truncate-->这主要是由于 RAG 内部仍存在许多未解决的问题。

数据质量:RAGFlow 提供开源的数据清洗模型和分块模板以提高数据质量,并将继续迭代和进化这些内置模型与工具。数据检索:具有明确问题意图的场景需要多路召回(multiple recall)来检索相关上下文,目前的 RAGFlow 已经集成了具备多路召回能力的数据库。答案检索挑战:在许多情况下,仅凭问题内容进行搜索并不一定能捕获答案的上下文。在问题和答案的语义之间显然存在需要弥合的鸿沟。

我们可以从多个方面解决上述最后一点,包括:实施外部知识图谱进行查询改写和用户意图理解;通过引入 Agent 来提高回答质量,使 LLM 能通过增加对话交互来完善答案;为 LLM 检索更长的上下文以寻找答案。

RAGFlow 的路线图包含了针对这三个方面的功能。今天,我们将讨论 RAGFlow 最近添加到主分支(或 Docker dev 标签)的一个实验性功能,旨在解决上述最后一点 —— 基于 RAPTOR 实现长文本 RAG。

RAPTOR 的想法源于今年早些时候发布的一篇题为《Recursive Abstractive Processing for Tree Organized Retrieval》的论文。如下图所示,该论文提出了一种增强的文档处理方法:对文档内容进行层次化聚类。

在将原始文档划分为数据块(chunks)后,RAPTOR 以递归和层次化的方式对这些块进行聚类:聚类过程从叶节点(图中的蓝色块)开始,并通过嵌入(embedding)将叶节点总结为更高级别的信息。该过程递归执行,从叶节点开始形成一个“树状”结构。聚类过程的产物是摘要,可以使用 LLM 生成。利用聚类和摘要生成至关重要,因为它捕获了处理复杂主题查询和问答任务中多步推理所需的更精细细节。RAPTOR 论文讨论了两种检索聚类内容的过程,如下图所示:

第一种过程保持树状结构:检索从根节点开始,并在整个树结构中分层推进。这种检索实现起来稍微复杂一些,且对多路召回“不友好”。

第二种过程将树状结构展平进行检索。它易于实现,并能自然地与多路召回集成。

RAGFlow 实现了论文中提出的展平树结构检索:在使用 Deepdoc 进行文件解析后,您可以选择激活 RAPTOR 开关来进行聚类和摘要生成。原始数据块和这些生成的摘要随后被发送到数据库,以建立全文和向量索引。后续操作与传统的 RAG 解决方案类似。

请注意,默认情况下 RAPTOR 开关是关闭的,因为启用此功能会消耗更多的 token 配额。

当您需要更好地理解长上下文窗口时,可以激活此 RAPTOR 开关,从聚类结果中生成摘要。

如下图所示:左半部分是 LLM 根据聚类结果生成的摘要。RAGFlow 将这些摘要可视化,它们将与原始数据一起用于 RAG 的检索过程。

RAPTOR 帮助 LLM 更好地理解上下文。这是因为聚类树结构中的上层节点对文本具有更“宏观”的理解,这对于需要跨块总结或无法直接从相应上下文中检索答案的多跳问答场景非常有利。

RAPTOR 方法是 RAGFlow 解决 RAG 检索痛点的尝试之一。在即将发布的版本中,我们将带来更多增强功能。敬请期待!

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