来源:互联网 更新时间:2026-05-30 18:51
随着RAG(检索增强生成)应用遍地开花,一个核心问题也随之而来:如何让它的回答效果更上一层楼?这个问题的答案,其实是由一系列精妙的优化策略组成的。下面,我们就来系统地梳理一下当前主流的RAG优化方法,并配上图解,希望能帮你快速建立起一个清晰的技术地图。
先来看最基础的RAG工作流,大致是这样的:把文档切块,导入向量数据库(比如 Milvus 或 Zilliz Cloud),然后基于用户的问题(query)去检索出最相关的 Top K 个文档块。最后,把这些“参考资料”连同问题一起塞给大语言模型(LLM),生成最终的回答。
把这个流程图记在脑子里,后面提到的各种优化版本都离不开这个基础框架——你可以随时拿它做个对照。
各种RAG增强方法,按照它们在流程中“发挥作用”的位置,大致可以分成这几类:
下面,我们逐一拆解这些类目下的具体方法。
这个思路挺巧妙:先让LLM为每个文档块生成一个“假设性问题”——即这个文档块能够回答的、最典型的问题。这样一来,检索就从“根据文档找答案”变成了“匹配相似问题”。这种 query-to-query 的匹配,本质上是一个“域内”的对称搜索任务,比不对称的 query-to-document 要更直接、更容易。当然,代价也很明显:需要额外的LLM调用来生成假设问题,而且生成的时机和质量都存在不确定性。
HyDE 的原理和假设性问题很像,但方向反了一下:它不是对文档生成问题,而是对用户的 query 生成一个“假答案”(fake answer)。这个假答案可能信息不准确,但在向量空间中,它的嵌入(embedding)会与真正相关的文档更“近”。最终,系统检索的是与这个假答案最接近的真实文档。同样,这种方法缓解了跨域不对称性问题,但也带来了额外的开销和不确定性。
面对一个复杂问题,比如“Milvus 和 Zilliz Cloud 在功能上有什么区别?”,直接检索很难找到文本直接进行比较。这个时候,不如把它拆成两个子问题:“Milvus 有哪些功能?”和“Zilliz Cloud 有哪些功能?”。这两个子查询并行检索后,再将得到的上下文一并交给LLM,让它综合出最终答案。这个拆解的活儿,通常可以由 LLM-based Agent 来自动判断。
有时候,问题描述得太具体反而不利于检索。比如“我有一个100亿条记录的数据集,想存在 Milvus 里查询,行不行?”这个问题描述的场景过于具体,难以直接匹配。不妨让LLM把它“抽象”成一个更通用的退后一步问题:“Milvus 能处理的数据集大小上限是多少?”。对这个问题进行检索,更容易找到能回答原始问题的文档块。这个方法在处理具体复杂提问时,效果显著。
在建立索引时,可以玩个“嵌套”操作:设置两个粒度的块,一个是细粒度的小块(child chunk),另一个是包含它的父块(parent chunk)。检索时,先搜那些小块。如果发现 Top K 个命中结果里,有超过 N 个都属于同一个父块,那就证明这个“大段落”里信息非常集中。这时,不再用小块,而是直接把整个父块送给 LLM。这样一来,既保住了检索精度,又避免了上下文碎片化。
为数据建立两层索引:一层是摘要索引,一层是详细文档块的索引。检索时分两步走:先用摘要索引快速筛选出相关文档,再在被选中的文档内部进行精确查找。这就好比先去图书馆的目录区找书架号,再去对应书架上找书。这种方法特别适合数据量大、层次分明的场景。
纯靠向量召回,有时候会“马失前蹄”,漏掉一些关键内容。混合检索的思路很简单:在向量相似性召回之外,再加一路或多路召回,比如基于词频的 BM25 或者 SPLADE 这类稀疏嵌入模型。多路召回的结果会经过一个重排序(Rerank)模块,你可以用简单的 RRF 算法,也可以用更精密的 Cross-Encoder 模型来过滤和排序,最终选出最优质的内容。这种做法能有效弥补单一召回方式的盲区。
这个方案的一个精妙之处在于,它将用于检索的块和用于生成的块解耦了。系统检索到的可能是一个小句子块,但实际提供给 LLM 的,是一个以这个句子块为中心、包含前后文信息的“大窗口”。这样做的好处很明显:为LLM提供了更丰富的上下文,减少了信息丢失的风险。当然,窗口大小也需要根据业务场景灵活调整,以在信息丰富度和干扰噪声之间找到平衡。
如果数据附带了丰富的元信息(如时间、类别、作者等),那就别浪费。在检索出候选文档后,可以根据元数据(比如“只保留2023年的财报”)进行二次过滤。这能极大地提升最终结果的相关性,尤其适用于那些数据量大、元信息结构清晰的场景。
检索回来的文档块里,或多或少会掺杂一些噪声信息,这些信息不但没用,还可能对LLM的回答产生干扰。同时,LLM的上下文窗口也是有限的。因此,一种有效的思路是在将信息送入LLM之前,先对上下文进行压缩——突出关键段落,剔除不相关内容,甚至可以将长文本抽象成简短的摘要。你可以训练专门的小模型来做这件事,原理上类似于上一节提到过的重排序和过滤。
Lost in the Middle 这篇论文揭示了一个现象:LLM在读取长文档时,更容易记住开头和结尾的内容,中间部分则容易被“遗忘”。这个发现给我们一个非常具体的操作指南:在将多个检索结果拼接成提示词时,可以把置信度最高的块放在开头和结尾,把置信度稍低或关联性稍差的块塞到中间。这样能最大限度地提升LLM对关键参考信息的利用率。
这里引入了智能体(Agent)中“自我反思”(self-reflection)的思想。当系统初次召回的 Top K 个块中,如果有些块看起来置信度不高、存在歧义,先别急着用。可以让系统对这些块进行一次自我验证,确认它们是否真的能回答当前问题。验证的方法很多,比如用一个 NLI(自然语言推理)模型来判断,或者直接调用网络搜索工具来交叉验证。这就是一个简单的“反思”闭环。
不是所有问题都需要 RAG。对于一些简单直接的事实性问题(比如“今天星期几?”),硬套RAG不仅慢,还可能引入不必要的噪声。因此,可以在入口处设置一个路由判断。这个路由器(可以是一个LLM、一个分类模型,甚至一组简单规则)会判断当前问题是否需要走RAG流程。如果不需要,就直接让LLM回答;如果需要,再进入后续的完整RAG流程。这种做法在实际生产中非常实用,既能分流请求、加快响应,又能避免干扰信息带来的负面影响。更进一步,查询路由还可以用来判断是否需要调用特定工具(如网络搜索、图片检索),甚至是否需要执行子查询。这是一种灵活的设计思路,具体如何落地,完全取决于业务需求。
基础的RAG流程看似简单,但在实际业务中,想要获得真正令人满意的效果,离不开一系列高级优化技巧的加持。这篇文章对目前常用的RAG增强方法进行了系统的归类和梳理,并通过图示帮助理解。希望这份“技术地图”能助你更快地理解这些概念,并将它们应用到实际项目中,加快RAG应用的优化和落地。
下饭影视APP下载安装指南
灵宝派对手游下载安装地址推荐
和平精英如何做到压枪稳-和平精英怎样才能压枪稳
下载浏览器app下载安装选择推荐
初中英语同步课文跟读APP推荐|免费下载高口碑跟读软件排行榜
BuuPo官网在哪下载 最新官方下载安装地址
4D采矿者官网在哪下载 最新官方下载安装地址
阅读app安卓版下载推荐
碎片人偶Vragmeet官网在哪下载 最新官方下载安装地址
Elysium Above 履云录官网在哪下载 最新官方下载安装地址
无尽花界时装合辑
免费影视剧APP推荐
喧哗番长乙女 2nd Rumble !!官网在哪下载 最新官方下载安装地址
纸嫁衣9官网在哪下载 最新官方下载安装地址
萌神契约手游下载安装
好用的手环阅读app下载安装
儿子穿新中式现身大会堂 马斯克罕见用中文回应:他正在学习普通话
人声接近真人!OpenAI一口气更新三款超强语音AI
名单曝光!库克、马斯克等将随团到访中国 黄仁勋不在其中
短视频软件推荐
手机号码测吉凶
本站所有软件,都由网友上传,如有侵犯你的版权,请发邮件haolingcc@hotmail.com 联系删除。 版权所有 Copyright@2012-2013 haoling.cc