概述
由于大多数 LLMs 只是定期对大量公共数据进行训练,因此他们无法访问的最新信息和/或私有数据。检索增强生成 (RAG) 是应用程序开发中 LLM 的核心范式,通过连接到 LLMs 外部数据源来解决这个问题。基本的 RAG pipeline 包括 embedding 用户查询、将相关文档检索到查询中,以及将文档传递给 LLM 以生成基于检索上下文的答案。
基本 RAG 流程
简单来说,就是把相关的内容从知识库中查询出来,然后扔给 LLMs ,最后基于检索内容生成最终结果反馈给用户。
缺点是,查出来的内容经常可能和问题不相关或者不是很有用的内容,导致生成的内容不符合预期。
在上图的流程中,当回答不满意的时候,无法进行上述调整。在这种情况下,我们实际的操作是需要去重新做一些迭代或对问题进行优化,或对内容进行一定的筛选或排序,重新回到某个节点,然后进行一定的优化,再重新执行一遍,直到我们在一定的判断条件下得到一个满意的结果,这样就可以得到一个更好的输出,如下图所示:
RAG 的认知体系结构
在实践中,发现实现 RAG 需要围绕这些步骤进行逻辑推理:例如,我们可以询问何时检索(基于问题和索引的组成),何时重写问题以便更好地检索,或者何时丢弃不相关的检索文档并重新尝试检索?引入了 Self-Reflective RAG,提出了使用 LLM 自我纠正质量差的检索和/或生成思想。
基本的 RAG 流程仅使用一个链:根据检索到的文档 LLM 确定要生成的内容。
一些 RAG 流使用路由,例如,根据问题 LLM 在不同的检索器之间做出决定。但是 Self-Reflective RAG 通常需要某种反馈,重新生成问题和/或重新检索文档。
状态机是第三种支持循环的认知架构,它非常适合于此:状态机只是让我们定义一组步骤(例如,检索、分级文档、重写查询)并设置它们之间的转换选项;例如,如果我们检索到的文档不相关,则重写查询并重新检索新文档。
RAG 的认知体系结构
Corrective RAG (CRAG)
CRAG 核心是检索到相关文档后,使用 LLMs 进行评估,分类三类 Correct、Incorrect、Ambiguous:
- 通过 LLMs 进行检索评估( retrieval evaluator )来评估查询检索文档的整体质量,并为每个文档返回置信度分数。
- 如果vectorstore检索被认为不明确或与用户查询无关,则执行基于 Web 的文档检索以补充上下文。
- 通过将检索到的文档划分为“知识条”,对每个条带进行分级,并过滤不相关的条带,对检索到的文档进行知识细化。
可以将其表示为如下图
CRAG的流程
- Correct:将 Correct 文档传递给 LLM 以生成基于检索上下文的答案。
- Incorrect:基于 Web 的文档检索以补充上下文传递给 LLM 用以生成答案。
- Ambiguous:两者都传递给 LLMs 作为上下文信息用以生成答案。
简化步骤如下图:
Self-Reflective RAG
核心思想:要有自主的判断,当判断觉得结果不是很满意的时候,要形成一个环,要能再次的对之前的步骤进行优化。
Retrieve
token 决定使用D
输入x (question)
ORx (question)
, .y (generation)
输出为yes, no, continue
ISREL
token 决定段落D
是否与x
d
inD
的输入 (x (question)
,d (chunk)
) 相关。输出为relevant, irrelevant
。ISSUP
token 决定每个块的LLMD
生成是否与该块相关。输入为x
,d
,y
ford
inD
。它确认了 中y (generation)
所有值得验证的语句都得到d
的支持。输出为fully supported, partially supported, no support
。ISUSE
token 决定从 中的D
每个块生成是否是对x
的有用响应。输入为x
,y
ford
inD
。输出为{5, 4, 3, 2, 1}.
Four types of tokens used in Self-RAG
我们可以将其概述为简化的图形来理解信息流:
Self-RAG 中使用的流程示意图
详细内容如下图:
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)