基于SpringAI搭建的Rag系统调优分享-混合检索一
2026/7/23 2:51:33 网站建设 项目流程

最近在进行rag调优的时候,用到了混合检索,混合检索就是通过关键字检索和向量检索相结合的一种检索方式,这样可以让检索的文档更贴合实际需求。在这块儿调优的时候,通过查询一些博客及算法论文,对两个检索有了更新的认识,我觉得能够实现这些检索算法的开创者真的是让人佩服,所以把相关的算法技术原理分享出来,让大家都了解下,今天先来看下关键字检索。

关键词检索

关键词检索是根据文档和提示词是否有共同词汇来检索文档的技术,基本思路就是包含提示词中大量词汇的文档更有可能是相关性更大的。它的处理如下:

1、首先把提示词(Prompt)和知识库的文档都视为词袋(bag of words)。

词袋就是都是由一个个词语组成,这也就意味着词的顺序是完全不关注的,只关注文本中有哪些词语,以及这次词语出现的频率。比如我们要搜索一个句子:常见的月饼用的月饼馅料有哪些。首先是给这句提示词建一个稀疏向量,这个稀疏向量怎么理解,就是基于所有系统词汇列出来(当然它的维度会很高,甚至几万几十万)的向量,新建一个向量V,这个向量V列表中的数字表示这个句子中的每个词出现的次数,由于这个基于系统词汇copy的向量V大多数位置上存放的都是0,所以称为稀疏向量。

什么是系统词汇,举个例子,知识库所有文档的中文汉字词语组合,简单理解放到一个数组中,把这个数组当成向量,这个向量的维度可能上百万,这就是系统词汇。那么copy这个数组出来作为V,V中一定会出现【常见、的、月饼、用、馅料、有、哪些】词,基于这个提示词中每个词出现次数,给它同样塞到向量中,这句提示词总共有6个词,剩余的可能得上百万词出现的次数都为0,这么看这个V就可以理解为一个稀疏向量。(结合后面的图片会很好理解)

2、把知识库的所有文档也创建为对应的稀疏向量

每个文档都创建一个稀疏向量,所有的文档对应的稀疏向量就可以合并为一个稀疏向量矩阵,也称为词项-文档矩阵,这个矩阵每一列表示一个文档,每一行是不同的词语,见下图:

这儿就出现了传说中的倒排索引。我们结合这个图来说明下什么是倒排索引,从图中可以看到,我们很容易的从一个词查找到包含这个词的所有文档。倒排索引汉字我觉得不如英文inverted index更好理解,我们常规的情况是通过文档然后说文档包含了哪些词,这是一个正向的常规的思维。但是从上图你可以反着来,即从词出发找到哪些文档包含这些词。比如月饼,出现在Doc1、Doc3、Doc4中,即从词找到了文档。

3、检索流程

当检索器收到一个提示词(prompt)时,就会为该提示词快速创建一个稀疏向量。这样知识库的所有文档和提示词都有了稀疏向量,有了这些稀疏向量,你就可以对文档进行评分和排序了。

3.1最简单的处理方式就是文档包含词就获得积分

提示词中的每个词都作为关键字,以【常见的月饼用的月饼馅料有哪些】为例,把这个prompt的按词切割,然后循环下列处理:

比如拿关键词 “常见” 来说,找到它对应的行,然后遍历该行,每个doc包含这个词,就给它加一分,后续其他各个关键词都如此操作:

打分完成后,就可以对文档进行排序,得分最高的文档就可以检索出来。(Doc4 Doc1 Doc2 Doc3)

但是这个检索有个问题,未考虑文档是否包含关键词出现的次数,因为它是根据判断是否包含词,包含+1,不包含+0,只关注包含与否未关注出现次数。但是一般情况下,词多次出现,就表示更高的相关性。所以就有了下面的改进方案V2见3.2所述。

3.2文档中词出现多少次,就加多少分。

但是这个有个问题,如果文章特别长,那么对应的词出现的次数就特别多。比如一篇300字的作文介绍中秋节,跟一篇80万字的风俗科普文章介绍中国传统节日,那么后者可能在中秋上出现的次数更多。但是对于中秋关联性上可能前者更相关。为了解决这个问题,所以就有了改进方案V3见3.3所述。

3.3用文档的总词数除以文档的评分

这样对于关键字占比更高的文档会优先检索到,对于那些仅仅因为文章篇幅长所有关键词出现的稍多的文档就会降低优先级。

score = 关键字在Doc中出现的次数 / Doc的总词数量

这就是常规的TF。但是V3也有问题,对于一些助词,比如“的”,就会出现很多次,但是它跟提示词关联性不大,相对来说某个Doc中 月饼 馅料 出现很多次会跟提示词关联性更高。所以就有了改进方案V4。

3.4为了解决助词的这种现象,我们可以为词语进行加权。

为了解决V3的问题,V4引入了IDF指标,即inverse document frequency。

score = TF * log(Total docs / Docs containing words)

对于每个词,统计它在多少文档中出现,然后除以文档总数。比如:如果你的知识库中有100份文档,其中月饼出现在了5篇文档中,它的DF(document frequency)就是 5/100 = 0.05,像的这个词出现在100个文档中,所以他的DF就是100/100=1,为了提升有效词的权重,你取倒数翻转拿到IDF(inverse document frequency),所以月饼的IDF就是1/0.05=20,【的】的IDF就是1/1=1,这种简单处理会导致有效词的权重过高,所以一般会取个log值,log(5/100)=1.3,log(1/1)=0。这样每个IDF值就可以反馈Prompt拆分的词在知识库中的稀有程度。拿到IDF后,再乘以每个词的TF,分数作为最终分值,这就是TF-IDF。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询