RAG的10个优化技巧!

Small To Big

Small(小)

检索阶段,使用较小的、细粒度的文档块(例如一个段落、几个句子)进行向量相似度计算。

Big(大)

提供给LLM的阶段,则返回这些小文档块所属的、更大的父文档块作为上下文。

摘要检索

用摘要来寻找,用原文来回答。

在检索阶段,并不直接拿用户的查询去匹配庞大的原始文档,而是去匹配预先为这些文档生成好的、高度浓缩的摘要。

一旦找到相关的摘要,再定位到该摘要所对应的完整原始文档。

并将这些原始文档作为上下文提供给大语言模型(LLM)来生成最终答案。

子问题检索

先拆解,分头找,再汇总。

当系统接收到一个复杂的用户问题时,并不直接用它去检索文档。

  • 而是先让一个大语言模型(LLM)将这个复杂问题分解成一系列逻辑相关的、更简单的子问题。

然后,系统并行地为每一个子问题独立地进行检索,获取相关的文档片段。

最后,将所有子问题检索到的信息综合起来,交给LLM生成一个全面、准确的最终答案。

句子窗口检索

先检索最相关的单个句子,然后自动地将这个句子的原始上下文(即它前后相邻的句子)窗口一并找回

最终将这个完整的窗口提供给LLM。

多路召回

不要把所有的鸡蛋放在一个篮子里。

采用多种不同的策略、方法或渠道(即多路)分别进行信息检索。

然后将各路的结果进行合并、去重和排序,最终筛选出最相关的结果集合。

Rerank

初步检索到一批相关文档后,使用一个更精细、更强大的模型对这些文档进行重新评估和排序

以挑选出与问题真正最相关的少数几个文档的过程。

img

Refine模式

不一次性处理所有上下文,而是通过多次、迭代的方式,让LLM逐步地、不断地优化和精炼答案。

img

多文档场景的Refine

不一次性处理所有文档,而是让LLM迭代地、一个接一个(或一小批接一小批)地处理文档。

并不断地基于新看到的信息来优化、修正和扩展之前的答案。

img

tree_summarize

分而治之。

  • 通过并行处理文本块来显著提高速度降低延迟
  • 通过分层递归汇总突破上下文窗口限制,处理超长文档。

img

改写提问

在保持用户原始意图不变的前提下,对用户输入的问题或查询(Query)进行重新表述、扩展或优化。

以提升后续检索或回答质量的技术。

img