RAG优化技术
之前的课程我们已经学完了RAG的完整流程,这里先做个回顾:
-
索引阶段
-
文档解析技术
-
分块策略
- 固定大小分块、重叠分块、递归分块、文档特定分块、语义分块、混合分块
-
嵌入模型选择
-
-
检索阶段
-
向量数据库选择
-
混合检索
-
关键词检索
-
向量检索
-
-
重排序
-
-
生成阶段
-
大语言模型选择
-
提示词工程
-
这节课我们来补充工程化RAG全流程优化技术(进一步提高RAG系统的检索精度和效率以及回答的准确度):
-
索引阶段(提升检索的精度和效率)
-
除了常规的分块策略,这里介绍几个其他的知识入库的技术
-
按树入库
- 我们可以将知识按树入库。我们可以这样想象,我们像整理一本书那样将知识入库,例如按章、节、小节、段这样把内容整理成一棵树,其中每章包括哪些节,每节包括哪些小节,每小节包括哪些段。
-
分层入库
- 我们可以将知识分成多层,然后再入库。例如我们可以建立一个两层系统,一层是文本摘要,一层是详细内容,然后两者都包含指向数据中相同位置的元数据。
-
信息压缩入库
- 有些业务场景下,我们不需要把所有信息都入库,只需要把关键的信息入库,这时候我们可以使用大模型将与业务场景无关或者次要的信息先剔除掉,然后再入库。
-
-
-
检索阶段
-
综合应用多种过滤技术
- 我们可以综合应用多种过滤技术来改进检索结果的质量。例如我们可以综合应用元数据(例如用户权限,知识库权限)、相似度、关键词、内容过滤(删除不符合特定内容标准或基本关键词的结果)、多样性过滤(通过过滤掉近似重复的条目来确保结果的多样性)
-
投票和加权检索
- 我们可以在混合检索之后,再加上投票和加权机制来确定最终检索到的知识。
-
分解成子查询再整合
- 我们可以将复杂的查询分解为更简单的子查询去检索知识,然后再整合在一起。
-
多轮检索
- 我们可以检索出一轮之后用大模型分析结果并生成后续查询,这样循环迭代,直到生成最终的结果。不过这种方法只能用在对实时性要求不高的业务场景里,例如每日生成报告的场景。
-
查询扩展
-
查询扩展策略通过大模型从原始查询语句生成多个语义相关的查询,可以覆盖向量空间中的不同区域,从而提高检索的全面性和准确性。这些查询在嵌入后能够击中不同的语义区域,确保系统能够从更广泛的文档中检索到与用户需求相关的有用信息。
-
查询扩展指令模板:
1
2
3
4你是一个AI语言模型助手。
你的任务是生成五个不同版本的用户问题,以便从向量数据库中检索相关文档。
通过从多个角度生成用户问题,你的目标是帮助用户克服基于距离的相似性搜索的一些局限性。
请将这些替代问题用换行符分隔。原始问题:{查询原文}
-
-
预生成问题和回答(命中缓存,撞库回答)
- 我们可以按照一些模式去预先生成问题,然后使用前面的一些高级但是比较耗时的方法,例如 AI 智能体检索和多轮检索的方式来生成回答。然后把这些问题和回答存进知识库,当用户提问时,我们根据用户提问检索对应的问题,并返回对应的回答。
-
-
生成阶段
-
提示压缩
-
提示压缩旨在减少上下文中的噪声,并突出最相关的信息,从而提高检索精度和生成质量。在 RAG 系统中,检索到的文档通常包含大量无关的文本,这些无关内容可能会掩盖与查询高度相关的信息,导致生成结果的相关性下降。提示压缩通过精简上下文、过滤掉不相关的信息,确保系统只处理与查询最相关、最重要的内容。
-
提示压缩的指令模版
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17你是一个AI语言模型助手,负责对检索到的文档进行上下文压缩。
你的目标是从文档中提取与用户查询高度相关的段落,并删除与查询无关或噪声较大的部分。
你应确保保留所有能够直接回答用户查询的问题核心信息。
输入:
用户查询:{用户的原始查询}
检索到的文档:{检索到的文档内容}
输出要求:
提取与用户查询最相关的段落和信息。
删除所有与查询无关的内容,包括噪声、背景信息或扩展讨论。
压缩后的内容应简洁清晰,直指用户的核心问题。
输出格式:
{压缩段落1}
{压缩段落2}
{压缩段落3} -
通过提示压缩,系统能够准确提取出与查询高度相关的核心信息,去除冗余内容,并返回简洁的压缩结果。组合成为新的指令,输入大模型获得回复,提高 RAG 系统答案准确度。
-
-