从"搭好"到"能用",中间其实差了一整套优化操作。
RAG(检索增强生成)入门体验大概就是这样:
一个下午,你就能搭出一套能跑的原型——把文档切片,调一下Embedding API,扔进向量库,再接上LLM,齐活了。这时候你肯定会觉得,“这不挺简单的吗?”
可等你真的用起来就知道了:搜出来的东西驴唇不对马嘴,明明库里有的内容就是找不到,用户问一句它能扯三句废话,问得稍微抽象点,它就开始瞎编。
这真不是你能力不行,RAG的入门门槛确实低,但“能跑”和“能用”之间,差的是一整套完整的优化管线。
RAG的本质,不是让AI变得更聪明,而是让正确的信息,在对的时机出现在对的位置。要做到这一点,靠的不是某一个环节做得多好,而是整条链路的配合。
这篇就整理了我总结的20种RAG优化方案,跟着一个请求的完整生命周期来拆,从数据怎么入库,到最后怎么把答案给到用户,一步步说清楚。
先看一眼全流程:
一个完整的RAG管线长这样:
优化这事儿,不是某一个环节做好就够了,它是整条链路上的事。每一个阶段做好改进,都是在给下一个阶段“减负”。
下面就按五个阶段,一个个拆明白。
一、数据入库:检索的“底座”,地基打不好后面全白搭
这个阶段的目标很简单:让该出现的文档,在需要的时候能被找到。要是入库时切得乱七八糟,后面检索能力再强,也救不回来。
1. 语义分块:别再按字符数瞎切了
很多入门教程教你“每500字切一块”,这就跟把一本书每10页拆下来订成一册似的,刚好把完整的论证拦腰截断。语义分块的正确做法,是按句子、段落或者Markdown标题来切,保证每一块都是一个完整的逻辑单元。
一个完整的句子,和一句被腰斩的话,检索效果能差出十万八千里。
2. 小块检索,大块喂给LLM:一个特聪明的折中办法
把文档切成很小的片段做向量检索,小块的精度更高;但一旦命中,就把它所在的“整段内容”调出来喂给LLM。这就像图书索引,你用关键词查到页码(小块),但真正读的是那一整页的内容(大块)。检索精度和上下文完整性,两边都不耽误。
3. 元数据过滤:先粗筛,再细搜
存文档的时候,顺手把时间、作者、类型这些元数据也存上。检索的时候,先做个条件筛选,比如“只要2024年以后的”“只要Python相关的”,再做语义匹配。一个简单的条件过滤,就能把搜索范围从百万级缩小到千级,既省算力,又更精准。
4. 摘要索引:让宏观问题先找到大方向
长文档被切碎之后,用户问“这本书讲了什么”,任何一个片段都答不上来。
解决方案很简单:入库前,先让LLM给每个长文档生成一个全局摘要,单独做向量化。遇到宏观问题,先命中摘要,再通过摘要和详细章节的关联,顺藤摸瓜找到细节。先给方向,再给细节,效率更高。
5. 图增强RAG(Graph RAG):不只搜“内容”,还搜“关系”
把文档里的实体和关系抽出来,存进知识图谱。比如“函数A调用了函数B”“类C继承自类D”,这些关系都记下来。
检索的时候,同时查向量库和图数据库。这是目前解决“跨文档逻辑关联”最火的方案——你想知道的不只是“这段话讲了什么”,更有“它跟别的东西有什么关系”。
6. 文档反向提问:提前帮文档“写考题”
入库前,让LLM看着每一段文本,生成5个“如果有人要查这段内容,可能会怎么问”的问题,把这些问题和原文绑在一起存入向量库。
相当于提前把所有可能的问法都做好了索引,不管用户怎么换着花样问,命中率都会大幅提升。
二、检索前:用户的提问,往往不是最优的查询词
用户提的问题,大多是口语化的、简略的,甚至有歧义的。直接拿这个问题去搜,就相当于让一句口语,去匹配书面化的文档,语义对不上是很正常的事。
7. 查询重写:帮用户把话“翻译”成检索能懂的语言
多调用一次LLM,却能省去后续大量的试错,性价比真的很高。
8. 多路查询:一个问题,从五个角度去搜
把用户的问题,扩展成3-5个不同角度的提问,分别去检索,最后把结果合并、去重。
一个问法没命中,另一个问法可能就命中了,用广度换精度,很实用。
9. HyDE:先“闭卷”写个假答案,再拿假答案找真文档
这是我觉得最有意思的方法,没有之一。
不直接做“问题→答案”的检索,而是让LLM先凭空写一个假答案,然后把这个假答案做向量化,再去搜真正的文档。为什么要这么做?因为在向量空间里,“答案和答案”的距离,往往比“问题和答案”更近。假答案的内容虽然不对,但它的语义结构,已经和真答案非常接近了。
用“假的”去找“真的”,这个思路本身就很有启发。
10. 查询路由:不是所有问题,都该走向量检索
设计一个“路由器”,根据问题的意图来分发:
“今年第二季度的销售额是多少?”→ 走SQL数据库
“这段代码为什么报这个错?”→ 走向量库
“你好,今天天气怎么样?”→ 直接找LLM
把不适合的问题强行塞给RAG,反而会出更多问题。先分类,再处理,才是正确的做法。
三、检索阶段:语义和关键词,各有各的盲区
这是你实际接触最多的阶段,核心矛盾很简单:语义搜索和关键词搜索,短板刚好能互补。
11. 稠密检索:懂语义,不懂术语
就是基于Embedding的语义搜索,你搜“轿车”,它能找到“小汽车”“私家车”,但遇到专业术语、缩写、代码函数名,它就懵了,根本认不出。
12. 稀疏检索:懂术语,不懂语义
基于BM25的关键词匹配,搜“OOM Killer”,绝对不会把“内存不足导致进程被杀”漏掉。但它搜不到,往往是因为你表达方式不一样,不是它不认识这个词。
13. 混合检索+RRF:两条腿走路才稳
把稠密检索和稀疏检索的结果,用RRF(倒数排名融合)算法合并起来。两种方法的盲区刚好互补:
语义和关键词,少了哪一个都不行。
14. 微调嵌入模型:让你领域的话,不再“听不懂”
通用的Embedding模型,对你的私有领域理解不深?那就用自己的数据微调一次。比如你拿内部的代码文档去训练BGE,它就能理解你项目里那些特有的函数名和术语,再也不会“听不懂”。
四、检索后:最容易被忽视,但提升空间最大
很多人觉得,检索完就万事大吉了,直接把top_k的结果塞给LLM。但检索出来的东西,往往有噪声、有重复、有废话,不处理就直接喂给LLM,相当于让它在垃圾堆里找宝贝,能做好才怪。
15. 重排(Reranking):关键时刻的“双保险”
这是整个管线里,性价比最高的一项优化。
向量检索为了速度快,用的是“双塔模型”:查询算一个向量,文档算一个向量,然后比夹角,速度快,但精度有限。
重排模型用的是Cross-Encoder,把查询和文档拼在一起逐字比对,精度高很多,但速度慢。所以实际用的时候,只对初筛出来的top 20做重排就够了:
能召回对的内容,不代表排序对。重排就相当于二次把关,帮你把真正有用的东西,排到第一位。
16. 上下文压缩:帮LLM划重点
检索出来的文档段落可能很长,里面混着很多无关内容。用LLMLingua之类的工具,把废话去掉,只留核心信息。
既节省Token,又能降低LLM“分心”的概率,一举两得。
17. MMR:搜出来的东西,别全是同一句话
检索出5段文本,结果4段说的是一回事,上下文窗口就被白白浪费了。
MMR(最大边际相关性)就能解决这个问题,保证搜出来的结果,既和问题相关,又能有多样性。同一件事,一句说清楚就够了,剩下的位置,留给不同的角度。
五、生成阶段:有了好材料,还要学会“好好说话”
材料找对了,最后一步就是让LLM别瞎编,好好回答。
18. Prompt工程:给LLM戴上紧箍咒
在System Prompt里加一句话,效果立马就出来:
“请严格基于提供的Context回答。如果Context中没有相关信息,请直接说‘根据现有资料无法回答’,不要编造。”
就这一句话,能挡住大部分的幻觉。成本几乎为零,效果却特别明显,这是所有优化里,性价比最高的一项。
19. 自我反思:答完之后,回头看一眼
让LLM生成答案后,再多跑一步:检查一下自己说的内容,是不是真的来自给定的上下文。如果不是,就打回重写。
在关键的业务场景里,这个额外的验证步骤特别值得。宁可多花几秒,也别让一个幻觉,毁掉用户的信任。
20. 引用溯源:企业级RAG的标配
让模型在回答里标注来源,就像写论文一样[1][2]。
这不只是为了让用户能验证答案,更重要的是,当模型知道自己的每一句话都要“对得上账”时,它回答起来会更谨慎,不容易瞎编。
按场景选方案,别贪多
没人会一次性把20种方法全用上,根据自己的场景,选3-5种组合,效果通常就足够好了:
通用知识问答:语义分块→混合检索→重排
企业私有文档:元数据过滤→Graph RAG→引用溯源
代码库问答:查询重写→稀疏检索→重排
长文档分析:摘要索引→MMR→上下文压缩
写在最后
正如开头所说:
RAG的本质不是“让AI更聪明”,而是“让正确的信息在对的时机出现在对的位置”。
这让我想到一个类比:RAG就像一个好的图书馆管理员,不是把全馆的书堆在读者面前说“你自己翻”,而是在读者开口之前,就懂他的意图,从百万藏书中精准抽出那三页最相关的内容,放在他面前,还标好出处。
还有一个感受:很多看起来“高级”的方案,解决的其实是同一个问题——语义鸿沟。
用户表达的是一个意思,文档里写的是另一种说法,向量模型理解的又是第三种语义。HyDE用假答案搭桥,混合检索用关键词兜底,重排用双保险验证,手段不一样,但目标都是一样的。
所以优化RAG,不用追求“把所有方案都用上”,而是要搞清楚,你所在的场景里,语义鸿沟最大的环节在哪里,对症下药就好。
记住这五条,就够了:
入库打好地基:语义分块比按字符切分好一百倍;小块检索+大块投喂,是黄金组合
检索前帮用户“翻译”:查询重写+HyDE假答案搭桥,是缩小语义鸿沟的关键
检索时两条腿走路:稠密+稀疏混合检索,语义和关键词一个都不能少
检索后别偷懒:重排是性价比最高的优化,初筛Top 20→精排Top 5
生成时设好护栏:Prompt加一句“不知道就说不知道”,比什么花哨方案都管用
不是所有场景都需要把20种方法全用上,搞懂自己的语义鸿沟最大在哪一环,选3-5种对症的组合,就足够让一个“能跑”的RAG,变成一个“能用”的RAG。
最后
选择AI大模型就是选择未来!最近两年,大家都可以看到AI的发展有多快,时代在瞬息万变,我们又为何不给自己多一个选择,多一个出路,多一个可能呢?
与其在传统行业里停滞不前,不如尝试一下新兴行业,而AI大模型恰恰是这两年的大风口,人才需求急为紧迫!
人工智能时代最缺的是什么?就是能动手解决问题还会动脑创新的技术牛人!智泊AI为了让学员毕业后快速成为抢手的AI人才,直接把课程升级到了V6.0版本。
这个课程就像搭积木一样,既有机器学习、深度学习这些基本功教学,又教大家玩转大模型开发、处理图片语音等多种数据的新潮技能,把AI技术从基础到前沿全部都包圆了!
课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
课程还教大家怎么和AI搭档一起工作,就像程序员带着智能助手写代码、优化方案,效率直接翻倍!
这么练出来的学员确实吃香,83%的应届生都进了大厂搞研发,平均工资比同行高出四成多。
智泊AI还特别注重培养"人无我有"的能力,比如需求分析、创新设计这些AI暂时替代不了的核心竞争力,让学员在AI时代站稳脚跟。
课程优势一:人才库优秀学员参与真实商业项目实训
课程优势二:与大厂深入合作,共建大模型课程
课程优势三:海外高校学历提升
课程优势四:热门岗位全覆盖,匹配企业岗位需求
如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
·应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
·零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
·业务赋能 突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
重磅消息
人工智能V6.0升级两大班型:AI大模型全栈班、AI大模型算法班,为学生提供更多选择。
由于文章篇幅有限,在这里我就不一一向大家展示了,学习AI大模型是一项系统工程,需要时间和持续的努力。但随着技术的发展和在线资源的丰富,零基础的小白也有很好的机会逐步学习和掌握。
【最新最全版】AI大模型全套学习籽料(可无偿送):LLM面试题+AI大模型学习路线+大模型PDF书籍+640套AI大模型报告等等,从入门到进阶再到精通,超全面存下吧!
获取方式:有需要的小伙伴,可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
来智泊AI,高起点就业
培养企业刚需人才
扫码咨询 抢免费试学
⬇⬇⬇
AI大模型学习之路,道阻且长,但只要你坚持下去,就一定会有收获。