一、RAG的基本概念与工作流程
RAG框架主要由四个核心组件构成:索引、检索器、增强器和生成器。
-
索引:首先,将各种格式的文档分割成小块,并为这些块创建嵌入表示。这些嵌入随后被添加到向量存储中,以便快速检索。
-
检索器:根据用户的查询,检索器利用向量相似性等技术从向量存储中找到最相关的文档。
-
增强器:增强器将用户查询与检索到的上下文结合,形成一个提示,确保LLM拥有生成准确响应所需的信息。
-
生成器:最后,将组合后的查询和提示传递给模型,生成对用户查询的最终响应。
这种设计使得RAG模型能够访问最新、最准确的信息,并基于外部知识生成响应。
二、RAG技术的多样性
RAG技术涵盖了多种实现方法,每种方法都有其独特的优势和局限性。
- Naive RAG(朴素RAG)
Naive RAG是RAG的基础技术,通过语义相似性直接将用户查询与文档数据库进行匹配。该方法简单直接,计算开销低,对于上下文易于识别的简单查询表现良好。然而,它可能因缺乏复杂的过滤机制而检索到不相关的上下文,且由于上下文窗口的限制,可能导致信息截断或不完整。
- Hybrid RAG(混合RAG)
Hybrid RAG通过结合向量搜索(语义相似性)和传统基于关键词的检索方法(如BM25)来克服Naive RAG的局限性。这种方法能够同时捕捉查询的深层语义含义和精确关键词匹配,从而提高文档检索的全面性和准确性。然而,它增加了计算成本,且需要精细调整关键词和语义搜索结果之间的平衡。
- Hyde RAG(假设文档嵌入RAG)
Hyde RAG提出了一种创新性的文档检索方法。它首先生成一个可能回答查询的假设文档,然后使用该假设文档的嵌入来指导实际相关文档的搜索。这种方法特别适用于复杂或抽象查询,其中传统搜索方法可能表现不佳。然而,它增加了生成假设答案的计算开销,且结果的质量高度依赖于初始假设文档的生成质量。
工作原理
-
生成假设答案:HyDE RAG利用大型语言模型(如GPT系列)根据用户的问题生成一个假设的答案。这个答案可能不完全准确,甚至可能包含错误的细节,但它尝试捕捉与查询相关的信息。
-
嵌入假设答案:接着,使用一个无监督学习训练的对比编码器(如Contriever)将假设答案编码成一个向量。这个向量表示了假设答案的关键信息,并用于后续的检索过程。
-
检索相似文档:编码得到的向量被用于在文档库中检索与假设文档向量最相似的真实文档。这一步骤基于向量空间模型,使用内积(或余弦相似度)来衡量文档之间的相似性。
-
生成最终答案:最后,将原始问题、假设答案和检索到的相关文档一起输入到大型语言模型中。模型综合这些信息,生成一个更加准确和全面的回答。
-
Parent Document Retriever RAG(父文档检索器RAG)
该技术通过将大型文档分解为更小、更易管理的块来解决文档检索中的常见挑战。在搜索时,系统首先检索相关的小块,如果某个块看起来很有希望,则检索整个父文档。这种方法确保了初始搜索的精确性,同时提供了全面的最终上下文。它特别适用于大型文档,其中相关信息可能分散在不同的部分。然而,它可能包含父文档中不相关的部分,且需要更高的内存来存储父子关系。
- RAG Fusion(融合RAG)
RAG Fusion采用多面信息检索方法,生成与原始查询相关的多个子查询,为每个子查询检索文档,然后使用互惠排名融合(Reciprocal Rank Fusion)来组合和排名结果。这种方法允许系统从多个角度处理查询,可能会发现单个查询可能错过的相关信息。它类似于多个研究人员从不同角度研究同一主题。然而,它显著增加了计算成本,且实现和维护相对复杂。
RAG Fusion的工作原理主要基于以下几个步骤:
-
查询生成/改写:使用大型语言模型(LLM)对用户的初始查询进行改写,生成多个相关查询。这些查询提供了原始问题的不同视角,有助于扩大搜索范围并捕获更多相关信息。
-
向量搜索:对每个生成的查询进行基于向量的搜索,形成多路搜索召回。这一步骤利用向量嵌入等技术,在包含预处理数据的向量数据库中进行搜索,以找到与查询最相关的信息。
-
倒数排序融合(RRF):应用倒数排名融合算法,根据文档在多个查询中的相关性重新排列文档。RRF通过汇总不同搜索请求的排名,提高了最相关文档在结果列表顶部出现的可能性。具体来说,RRF会为每个结果集中的每个匹配项生成新的搜索分数,该分数基于文档在列表中的位置计算得出(通常为1/(rank+k),其中rank是文档在列表中的位置,k是一个常量)。然后,RRF会将从每个搜索系统获得的倒数排名分数相加,为每个文档生成合并分数,并根据这些合并分数对文档进行排名和排序。
-
结果重排:使用一些重排算法对结果进行进一步的优化和调整,以确保最终输出的准确性和相关性。
-
输出生成:参考重新排列后的TopK搜索结果,生成最终输出。这一步骤通常涉及将重新排名的文档和所有查询输入到LLM提示中,以生成典型的RAG方式的生成性输出,如请求回应或摘要。
-
Contextual RAG(上下文RAG)
Contextual RAG注重效率和精确性,通过压缩检索到的文档到其最相关的细节来改进响应生成。它提取和浓缩最关键的信息,帮助语言模型生成更简洁、更集中的响应。这种方法在处理大量信息时特别有用,其中简洁性是关键。然而,它需要维护对话历史,且对于长对话来说,计算成本可能很高。
Contextual RAG的工作流程主要包括以下几个步骤:
-
上下文增强:对于文档中的每个chunk,系统会在其前面添加一段解释性的上下文片段,这段片段由一个小型、高效的LLM生成,旨在帮助chunk更好地融入整个文档的语境。
-
混合搜索:系统会同时使用稀疏(关键词)和密集(语义)两种方式对chunk进行嵌入。这使得系统能够同时理解chunk的字面意义和深层含义,从而提高检索的准确性。
-
排名融合:使用递归排名融合(Reciprocal Rank Fusion, RRF)算法来合并搜索结果。这个过程类似于在多个专家意见中寻找最佳答案,通过综合多个搜索结果来得出更准确的排名。
-
重排序:系统会检索前150个chunks,然后通过一个专门的重排序模型筛选出top 20。这一步确保了最相关的信息被推到最前面,进一步提高了检索的准确性。
-
答案生成:最后,将这20个精选chunks传递给一个大型LLM,生成最终答案。这个LLM能够综合考虑所有相关信息,生成准确且连贯的答案。
-
Rewrite Retrieve Read RAG(重写检索读取RAG)
该技术通过改进原始查询来提高检索过程。在搜索文档之前,系统重新制定查询以使其更精确、更有效。通过提高查询的清晰度和语义丰富性,Rewrite Retrieve Read RAG可以检索到更相关的文档,从而生成更准确、更全面的响应。然而,多次检索轮次增加了延迟,且存在查询漂移的风险。
核心模块与流程
Rewrite Retrieve Read RAG框架主要由以下三个核心模块组成:
-
Rewrite(改写)模块:该模块的主要任务是理解用户的初衷,并洞察用户的真正需求。然后,它会对原始查询进行改写,以更准确地反映用户的需求,从而有助于提高检索的质量和相关性。改写可能涉及语言的转换、问题的细化或扩展等。
-
Retrieve(检索)模块:在改写模块完成后,检索模块会负责搜集信息。它会在庞大的数据库中快速筛选出与改写后的查询最相关的数据块。这一步骤通常基于语义相似度进行检索,以确保检索到的信息与用户需求高度匹配。
-
Read(阅读/生成)模块:最后,阅读模块会对检索到的信息进行进一步的处理和分析。它会提炼出关键信息和趋势,并生成一个精炼且准确的回答。这个回答不仅基于检索到的信息,还可能结合模型自身的知识和推理能力。
-
Corrective RAG(校正RAG)
Corrective RAG引入了一种动态的信息检索方法,通过移除不相关信息并可能执行额外的网络搜索来填补知识空白来不断精炼检索到的文档。这种方法确保了语言模型使用最高质量、最相关的信息。它特别适用于初始检索可能不完整或略有偏差的场景。然而,它增加了由于多次处理步骤而导致的延迟,且错误检测和校正的计算成本较高。
工作原理
Corrective RAG通过多步骤的评估和纠正机制来工作,主要包括以下几个关键步骤:
-
文档检索:使用查询向量在预先构建的知识库中检索与之相似的文档或段落。这一步骤类似于标准的RAG方法,但Corrective RAG更注重检索结果的准确性和相关性。
-
评估与纠正:引入一个轻量级的检索评估器,用于评估检索到的文档与输入查询的相关性。评估器为每个检索到的文档生成一个相关性得分,并根据该得分触发不同的知识检索操作。这些操作包括:
-
Correct(正确):如果文档相关性得分高于上限阈值,则认为文档是正确的,可以直接用于生成过程。
-
Incorrect(错误):如果文档相关性得分低于下限阈值,则认为文档是错误的,需要进行纠正或替换。
-
Ambiguous(模糊):如果文档相关性得分介于上下限阈值之间,则认为文档是模糊的,需要进一步的处理或验证。
-
-
知识精炼:对于触发Correct操作的文档,Corrective RAG会进一步精炼其中的关键知识条目,包括将文档分解为细粒度的知识条目、过滤掉不相关的部分,并重新组合相关条目。
-
网页搜索:对于触发Incorrect操作的文档,Corrective RAG会进行网页搜索,以补充和修正知识源。这一步骤确保了即使初始检索结果不准确,也能通过额外的信息来源来提高生成内容的准确性。
-
生成过程:在完成上述操作后,Corrective RAG将优化后的知识输入到生成器中,生成最终的输出文本。
特点与优势
-
提高准确性:通过自我反思和自我评分机制,Corrective RAG能够识别和纠正语言模型输出中的错误,从而提高生成内容的准确性。
-
增强鲁棒性:通过引入轻量级的检索评估器和知识精炼步骤,Corrective RAG能够处理模糊和错误的检索结果,增强了生成的鲁棒性。
-
模块化设计:Corrective RAG具有模块化设计,可以无缝集成到各种基于RAG的方法中,增强了其灵活性和可扩展性。
-
Self RAG(自我RAG)
Self RAG在检索和生成过程中添加了一个反思、自我评价的组件。在检索文档后,语言模型评估其相关性、准确性和全面性。这种方法就像一个内置的验证器,允许系统反思检索到的信息,并可能需要额外的上下文或澄清。它旨在通过批判性地检查原始材料来生成更可靠、更可信的响应。然而,它显著增加了计算开销,且有效自我评估标准的实施相对复杂。
主要特点
-
检索灵活性:Self-RAG不是机械地在每次生成文本时就查阅资料,而是根据查询的具体需要来决定是否进行检索。如果需要检索,它会评估检索到的文档是否相关,并根据所发现的内容生成响应的下一个部分。
-
自我评估与调整:Self-RAG在生成内容的同时,会不断检查自己的工作,评估生成内容的整体质量和事实性。如果发现问题或需要改进的地方,它会进行自我调整。
-
并行处理多个文档:Self-RAG能够并行处理多个检索到的文档,评估它们的相关性,并生成相应的任务输出。然后,它生成批判标记来批判自己的输出,并从事实性和整体质量方面选择最佳输出。
反思标记类型
Self-RAG框架中定义了四种不同类型的反思标记,每种类型都有自己的职责:
-
Retriever:用于指示是否需要从外部数据源检索信息。包括“是”(Yes)、“否”(No)和“继续使用证据”(continue to use evidence)等选项。
-
IsRel:用于指示检索到的信息是否与输入相关。包括“相关”(Relevant)和“不相关”(Irrelevant)等选项。
-
IsSup:用于评估检索到的信息是否支持模型的生成内容。包括“完全支持”(Fully Supported)、“部分支持”(Partially Supported)和“无支持/矛盾”(No Support / Contradictory)等选项。
-
IsUse:用于评估生成内容的整体实用性或效用。通常使用一个五级评估标准,从1(最低)到5(最高)。
训练过程
Self-RAG的训练过程涉及到两个模型:评判模型C和生成模型M。
-
评判模型C的训练:评判模型C的训练数据是利用GPT-4生成得到的。对于每一种任务类型,给定对应的输出后,设置合适的任务指令和示例,让GPT-4生成相应的反思标记,从而得到四种不同任务下的(input, response)数据。再利用标准的条件语言模型训练目标优化评判模型。
-
生成模型M的训练:在完成评判模型C的训练后,需要利用其来生成训练生成模型M的数据。具体做法为给定初始的训练数据(x,y),首先利用评判模型C判断回复x是否需要引入检索模块。如果需要的话,就将Retriever对应的反思标记加入到之前的输出中,然后利用检索模块召回若干文档。对于每个文档,利用评判模型C判断文档跟问题是否相关(IsRel任务),若相关,则判断结果y是否由文档所支撑(IsSup任务)。将召回文档以及这两个任务对应的反思标记依次加入到前面的输出中,最后再利用评判模型C判断结果y是否有用(IsUse任务)。将前面的文档、反思标记跟结果y按照顺序拼接到一起作为增强过的y,从而构建出对应的训练数据(x, augmented y)。在完成训练数据构建后,按照标准的自回归任务训练生成模型即可。
-
Adaptive RAG(自适应RAG)
Adaptive RAG是最灵活的检索方法,它根据查询的具体类型动态调整策略,在索引数据、执行网络搜索或结合多种检索方法之间切换。这种方法确保了为每种独特的查询使用最合适的信息检索方法,使其在不同类型的信息搜索任务中高度灵活且有效。然而,它的实现和维护相对复杂,且需要复杂的策略选择逻辑。
主要策略
Adaptive RAG通过三种不同的策略来应对不同复杂度的查询:
-
无检索策略:适用于可以直接由模型回答的简单查询,无需外部检索。例如,“巴黎是哪个国家的首都?”这种简单问题,模型可以直接从其内部知识中提取答案。
-
单步检索策略:用于那些需要外部信息来回答的中等复杂查询。这种策略会从外部知识库中检索相关文档,将其作为模型的输入,从而提高答案的准确性。
-
多步检索策略:面对复杂的多步查询时,系统会多次检索相关文档,并结合前一轮的输出进行推理,最终生成准确的答案。例如,“比利·贾尔斯出生地的货币是什么?”这种问题需要跨越多个文档进行信息整合。
工作机制
Adaptive RAG的工作机制主要包括以下几个步骤:
-
输入查询分析:系统接收到用户查询后,将其输入分类器。分类器根据查询的语法、关键词以及可能的推理步骤,对查询进行初步分析。
-
复杂度分类:分类器将查询分为三类:简单查询、中等复杂查询和复杂查询。
-
策略选择:分类器根据查询的复杂度,选择最合适的处理策略。
(一)性能综合对比
各 RAG 技术于不同维度表现各异。朴素 RAG 简单高效但精度有限;混合 RAG 提升召回但成本上升;Hyde RAG 善处复杂问题却计算繁重;父文档检索器 RAG 保持上下文但内存有压;RAG 融合增强检索但实施维艰;情境 RAG 精准聚焦却依赖历史管理;重写检索读取 RAG 优化查询但延迟易错;纠正 RAG 提升质量却牺牲速度;自我 RAG 强化质控但资源紧俏;自适应 RAG 灵活通用但架构复杂。开发者需依应用场景需求权衡取舍,如资源受限环境优先考虑朴素或情境 RAG 简化架构;精准专业领域检索则倾向混合、Hyde 或纠正 RAG 提升精度;动态复杂需求场景下自适应 RAG 可发挥最大潜能,但需强大技术储备支撑优化。
(二)应用场景适配策略
-
智能客服领域:常见问题解答可倚重朴素 RAG 快速响应;复杂售后处理则借混合或纠正 RAG 精准溯源、完善解答,提升客户满意度,减少问题转接升级,优化服务流程与效率,降低运营成本。
-
学术研究辅助:文献检索初筛用混合或父文档检索器 RAG 扩宽视野、定位核心文献;深度探索前沿课题时 Hyde 或 RAG 融合挖掘潜在知识关联,激发创新思维,加速科研进程、提升成果质量与学术影响力。
-
内容创作平台:新闻资讯创作中情境 RAG 提炼要点、高效创作;创意写作领域自适应或自我 RAG 按需取材、审核优化,提升内容品质、丰富度与创作效率,赋能创作者,满足受众多元阅读需求,塑造平台内容竞争力。
(一)技术优化方向
性能提升上,算法创新压缩向量索引、加速检索匹配,硬件适配利用 GPU 集群、量子计算潜力,突破计算瓶颈;智能融合层面,深度协同多种检索策略、语言模型架构及知识图谱,拓展知识理解边界;用户体验优化聚焦多模态交互,融合图像、语音实现无缝交互,个性化定制依用户偏好、历史智能调整策略,塑造专属交互体验。
(二)新兴应用拓展
教育领域智能辅导依学生进度、能力自适应教学,实现个性化知识推送与能力评估,变革学习模式;医疗保健智能诊断中 RAG 辅助分析病历、医学影像,精准推荐治疗方案、监测病情,提升医疗精准度与效率,推动医疗智能化转型;智能办公助手借 RAG 精准处理文档、数据挖掘、会议支持,提升办公自动化与决策智能化水平,重塑办公流程与协作模式,释放创新生产力。
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。