高级 RAG(Self-Reflective RAG)

向量数据库大模型机器学习

概述

由于大多数 LLMs 只是定期对大量公共数据进行训练,因此他们无法访问的最新信息和/或私有数据。检索增强生成 (RAG) 是应用程序开发中 LLM 的核心范式,通过连接到 LLMs 外部数据源来解决这个问题。基本的 RAG pipeline 包括 embedding 用户查询、将相关文档检索到查询中,以及将文档传递给 LLM 以生成基于检索上下文的答案。

picture.image

基本 RAG 流程

简单来说,就是把相关的内容从知识库中查询出来,然后扔给 LLMs ,最后基于检索内容生成最终结果反馈给用户。

缺点是,查出来的内容经常可能和问题不相关或者不是很有用的内容,导致生成的内容不符合预期。

在上图的流程中,当回答不满意的时候,无法进行上述调整。在这种情况下,我们实际的操作是需要去重新做一些迭代或对问题进行优化,或对内容进行一定的筛选或排序,重新回到某个节点,然后进行一定的优化,再重新执行一遍,直到我们在一定的判断条件下得到一个满意的结果,这样就可以得到一个更好的输出,如下图所示:

picture.image

RAG 的认知体系结构

在实践中,发现实现 RAG 需要围绕这些步骤进行逻辑推理:例如,我们可以询问何时检索(基于问题和索引的组成),何时重写问题以便更好地检索,或者何时丢弃不相关的检索文档并重新尝试检索?引入了 Self-Reflective RAG,提出了使用 LLM 自我纠正质量差的检索和/或生成思想。

基本的 RAG 流程仅使用一个链:根据检索到的文档 LLM 确定要生成的内容。

一些 RAG 流使用路由,例如,根据问题 LLM 在不同的检索器之间做出决定。但是 Self-Reflective RAG 通常需要某种反馈,重新生成问题和/或重新检索文档。

状态机是第三种支持循环的认知架构,它非常适合于此:状态机只是让我们定义一组步骤(例如,检索、分级文档、重写查询)并设置它们之间的转换选项;例如,如果我们检索到的文档不相关,则重写查询并重新检索新文档。

picture.image

RAG 的认知体系结构

Corrective RAG (CRAG)

CRAG 核心是检索到相关文档后,使用 LLMs 进行评估,分类三类 Correct、Incorrect、Ambiguous:

  • 通过 LLMs 进行检索评估( retrieval evaluator )来评估查询检索文档的整体质量,并为每个文档返回置信度分数。
  • 如果vectorstore检索被认为不明确或与用户查询无关,则执行基于 Web 的文档检索以补充上下文。
  • 通过将检索到的文档划分为“知识条”,对每个条带进行分级,并过滤不相关的条带,对检索到的文档进行知识细化。

可以将其表示为如下图

picture.image

CRAG的流程

  • Correct:将 Correct 文档传递给 LLM 以生成基于检索上下文的答案。
  • Incorrect:基于 Web 的文档检索以补充上下文传递给 LLM 用以生成答案。
  • Ambiguous:两者都传递给 LLMs 作为上下文信息用以生成答案。

简化步骤如下图:

picture.image

Self-Reflective RAG

核心思想:要有自主的判断,当判断觉得结果不是很满意的时候,要形成一个环,要能再次的对之前的步骤进行优化。

  • Retrieve token 决定使用 D 输入 x (question) OR x (question) , . y (generation) 输出为 yes, no, continue
  • ISREL token 决定段落 D 是否与 x d in D 的输入 ( x (question)d (chunk) ) 相关。输出为 relevant, irrelevant
  • ISSUP token 决定每个块的LLM D 生成是否与该块相关。输入为 xdy for d in D 。它确认了 中 y (generation) 所有值得验证的语句都得到 d 的支持。输出为 fully supported, partially supported, no support
  • ISUSE token 决定从 中的 D 每个块生成是否是对 x 的有用响应。输入为 xy for d in D 。输出为 {5, 4, 3, 2, 1}.

picture.image

Four types of tokens used in Self-RAG

我们可以将其概述为简化的图形来理解信息流:

picture.image

Self-RAG 中使用的流程示意图

详细内容如下图:

picture.image

overview-of-self-rag

总结

Self-Reflective 可以大大提高 RAG,从而能够纠正质量差的检索或生成。

推荐阅读

参考资料:

Self-Reflective RAG with LangGraph (https://blog.langchain.dev/agentic-rag-with-langgraph/)

Corrective RAG (CRAG)(https://arxiv.org/pdf/2401.15884.pdf)

Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection(https://arxiv.org/abs/2310.11511)

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论