RAG技术全解析:八股向(bushi

你是否想打造一个靠谱的知识客服,或是搭建能精准回答问题的知识库?这就绕不开一项核心技术——RAG(Retrieval Augmented Generation),中文译为“检索增强生成”。听起来高大上的技术,核心逻辑其实很简单:先从资料库里检索相关内容,再基于这些内容生成答案,即“先检索、再生成”,这也是其名称的由来。

作为目前最常用的AI问答方案之一,RAG已广泛应用于企业知识助手、智能客服等场景。本文将从应用场景、核心原理、流程拆解、专业名词解析等方面,带你全面掌握RAG技术,搞懂高质量智能问答系统的构建逻辑。

前言

我认为AI的基础知识是现在求职和实际工作所必须掌握的,不管是算法还是后端前端岗,会肯定是很大的加分项。我接下来会推出一系列AI知识分享文章(偏向八股向)旨在以简单易懂的语言分享面试时可能会用到的AI技术知识,因为本人也在0基础开始学AI,所以此系列内容也是本人不断学习总结而来,可能有错误,欢迎大佬指正。

一、为什么需要RAG?直接用大模型不行吗?

假设你想做一个能解答公司产品问题的智能客服,最直接的想法可能是:给GPT-4o、DeepSeek等大模型配上产品手册,让模型直接基于手册回答。但这种方案在实际应用中会遇到三个致命问题:

  1. 上下文窗口限制:大模型的上下文窗口容量有限,若产品手册达上百页、上千页,模型无法完整读取,会出现“读了后面忘前面”的情况,回答准确率无法保障;
  2. 推理成本过高:输入文本越多,模型推理的算力消耗越大,长期使用成本难以承受;
  3. 响应速度缓慢:模型需要消化海量无关信息,会导致回答延迟严重,影响用户体验。

而RAG的核心优势正在于解决这些问题:它不把完整文档丢给模型,而是先从海量资料中筛选出与问题最相关的少量片段,再将这些片段与问题一起交给模型,让模型只聚焦核心信息,既保证准确率,又降低成本、提升速度。

二、RAG的核心流程:提问前准备与提问后回答

RAG的整体流程分为两大阶段,分别发生在用户提问前和提问后,共包含五个关键环节,环环相扣确保问答质量。

(一)提问前:数据准备阶段(知识库构建)

这一阶段的核心是“把资料整理好,方便后续快速检索”,包含分片索引两个环节。

1. 分片:将文档拆分为可处理的片段

分片就是把完整文档切分成多个小片段,常见方式有:

  • 按字数拆分(如1000字一个片段);
  • 按段落、章节或页码拆分;
  • 其他自定义拆分规则。

无论哪种方式,核心目标都是让每个片段聚焦一个核心信息点,避免因片段过长导致后续检索精度下降,同时适配大模型的上下文窗口容量。

2. 索引:将片段转化为可检索的向量数据

索引是RAG的技术核心之一,本质是“给每个片段做‘数字标签’,方便快速匹配”,分为两步:

  1. 文本转向量(Embedding):通过专门的Embedding模型,将每个文本片段转化为向量(也叫嵌入向量)。向量是一个有大小、有方向的数学概念,通常用数组表示,数组长度即为向量维度(RAG中常用几百到几千维向量,维度越高包含信息越丰富,可靠性越强)。关键特性:语义相近的文本,转化后的向量也会非常接近。比如“马克喜欢吃水果”和“马克爱吃水果”的向量会高度相似,而“天气真好”的向量则会与二者距离很远,这是后续检索的核心依据。
  2. 向量存储:将每个片段的“原始文本”和“对应向量”一起存入向量数据库。向量数据库是专门优化过的数据库,不仅能高效存储向量,还能快速计算向量相似度,后续可通过用户问题的向量,快速找到最相似的片段向量及对应文本。

(二)提问后:问答生成阶段(精准响应)

当用户提出问题后,RAG会启动召回重排生成三个环节,逐步筛选信息并产出答案。

1. 召回:从知识库中初步筛选相关片段

召回的核心是“快速从海量片段中找出候选”,流程如下:

  1. 用Embedding模型将用户的问题转化为向量;
  2. 将问题向量传入向量数据库,计算其与所有片段向量的向量相似度
  3. 筛选出相似度最高的一批片段(通常10-20个,数量可自定义),作为候选相关片段。

这里的关键是向量相似度计算,常用三种方法:

  • 余弦相似度:计算两个向量的夹角余弦值,夹角越小相似度越高;
  • 欧式距离:计算两个向量在空间中的直线距离,距离越小相似度越高;
  • 点积:通过向量的方向和长度衡量相似度,方向一致时长度越长,点积越大,相似度越高;方向相反则点积为负,垂直时为零。

2. 重排:对候选片段做精准筛选

重排的核心是“从候选中挑出最相关的少数片段”,解决召回阶段“准确率不足”的问题:

  • 召回阶段用向量相似度计算,特点是成本低、速度快,但准确率一般,适合“初步筛选”;
  • 重排阶段使用Cross-Encoder模型,专门计算文本与问题的语义匹配度,特点是成本高、速度慢,但准确率极高,适合“精挑细选”。

类比来说,召回像“简历筛选”,从成千上万份简历中快速挑出10个看似合适的候选人;重排像“面试”,对这10人深入考察,最终选出3个最匹配的候选人。通常重排后会保留3-5个最优片段,既保证相关性,又避免给模型输入过多信息。

3. 生成:让大模型产出最终答案

将用户的问题与重排后的3-5个核心片段一起输入大模型(如GPT-4o、DeepSeek等),让模型基于这些精准的参考信息,生成符合用户需求的自然语言答案。

至此,整个RAG流程完成——既发挥了大模型的语言生成能力,又通过“检索增强”解决了大模型知识局限、上下文窗口有限的问题。

三、RAG核心专业名词速查

  • 向量:有大小、有方向的数学概念,用数组表示,是文本的“数字标签”;
  • Embedding:将文本转化为向量的过程,核心是让语义相近的文本对应相似向量;
  • Embedding模型:专门用于文本转向量的模型,可通过MTEB排行榜查看各类模型的性能排名;
  • 向量数据库:优化向量存储和相似度计算的数据库,存储“文本片段+对应向量”;
  • 向量相似度:衡量两个向量语义相关性的指标,常用余弦相似度、欧式距离、点积;
  • Cross-Encoder模型:重排阶段使用的高精度语义匹配模型,用于筛选最优相关片段。

四、RAG完整流程总结

  1. 提问前(数据准备):文档 → 分片(切分片段)→ Embedding(片段转向量)→ 向量+文本存入向量数据库(知识库构建完成);
  2. 提问后(问答生成):用户问题 → Embedding(问题转向量)→ 召回(向量数据库筛选10-20个候选片段)→ 重排(Cross-Encoder筛选3-5个最优片段)→ 大模型(问题+最优片段→生成答案)。

通过这套流程,RAG实现了“海量知识精准检索+大模型高质量生成”的结合,这也是智能客服、企业知识库等产品的核心技术逻辑。掌握了RAG的原理和流程,你就具备了搭建高质量智能问答系统的核心能力。

五、其他

我在牛客也写了一些java学习和求职的经验帖子,大家可以去看看:

想要学习Java冲实习或冲春招的,我能助你一臂之力,我之前整理了高质量可速成的魔改外卖项目话术和7000字轮子项目话术,还有超全超精品八股大全专栏怎么写简历,怎么包装实习经历,怎么0基础速成冲春招和实习等等精品帖子,大家可以去看看我的精品文章汇总帖子:往期精品秋招帖子汇总

我的八股大全、算法、项目话术全专栏(20w人学习,超千人订阅,牛客最受欢迎最高质量java八股专栏,内容包含: 1.八股大全:多一句没有少一句不行的最精简八股整理,完全可以应付校招社招的八股拷打! 2.速成项目话术:目前有魔改苍穹外卖项目话术(额外扩展了很多技术亮点),能速成拿去面试,后面会更新魔改黑马点评、商城项目等等热门高质量项目话术 3.智力题超详细题解汇总; 4.面试时非技术问题话术整理,绝对震惊面试官一年; 5.算法lc hot100全题系列题解:绝对通俗易懂快速冲刺秋招专栏

#八股##面试##校招##秋招##聊聊我眼中的AI#
全部评论
慢慢来吧
点赞 回复 分享
发布于 12-14 19:18 湖北

相关推荐

1.Q:你先做一个自我介绍吧。A:自我介绍。2.Q:看你写了蓝桥杯,应该对算法有所涉及,给我讲一下DFS和BFS。A:讲解了一下DFS和BFS是上面和思路,面试官让我实现我不会。3.Q:在Java中是怎么实现DFS和BFS的?A:不会,没有实现过,C语言我使用数组实现过,但是具体我也忘了。4.Q:我们跳过算法,讲一下Java,说一下你知道的集合。A:用的最多的是ArrayList,然后还有LinkedList。5.Q:比较一下二者的区别。A:ArrayList的底层数据结构是一个动态数组;LinkedList底层实现是链表,主要是数组和链表的区别。6.Q:ArrayList底层是怎么实现动态数组的?(ArrayList扩容原理)A:不会。7.Q:说一下你知道的Map。A:主要使用的比较多的是HashMap,然后可以排序的Map有TreeMap。8.Q:说一下TreeMap是怎么实现排序的?A:底层是使用红黑树进行排序的,但是具体实现我也不知道。9.Q:讲一下Java创建线程的几个方式。A:我知道有四种创建线程的方式:1.继承Thread类,2.实现Runnable接口,3.实现Callable接口,4.通过线程池创建。10.Q:线程池的几个重要的参数。A:核心线程数,最大线程数,工作队列……11.Q:线程池中的工作队列是一个什么队列?A:不知道。12.Q:通过继承Thread类创建的线程,如何运行?A:调用run方法,面试官说“注意是继承Thread方法,不是Runnable接口哦。”,调用start方法。13.Q:线程调用start方法之后处于什么状态?A:处于就绪状态。14.Q:在什么情况下会从就绪态转换为运行态?A:获得锁(好像是错的),或者其他线程调用notify方法唤醒该线程。15.Q:说一下你知道的锁。A:主要分悲观锁和乐观锁,悲观锁是线程必须要持锁才可以执行,其他线程必须等待锁释放,我使用过的有Synchronized锁;乐观锁是线程无需等待持锁线程释放锁也可以执行,主要有版本号法和CAS算法,我使用过版本号法。16.Q:说一下版本号法的具体实现。A:通过数据库存储版本号字段实现。17.Q:你知道哪些线程安全的集合?A:额……不知道。18.Q:讲一下Java中的线程和操作系统中的线程的区别。A:JVM虚拟机中的内存是一种用户级别的线程,操作系统线程是系统级线程,但是在JDK1.8(好像是)之后JVM虚拟机的线程直接使用操作系统的线程。19.Q:讲一下你知道的IO。A:我主要知道两种IO吧,最普通的InputStream、OutputStream;然后后面引入了NIO,可以使用直接内存。20.Q:详细讲一下NIO。A:不会了。21.Q:说一下SpringBoot中,你知道的注解。A:三层架构的注解,RestController,RequestBody,AutoWired……22.Q:说一下RestController和Controller的区别。A:RestController注解中有Controller,并且里面还有ResponseBody,然后一般是REST风格使用。23.Q:讲一下REST风格。A:具体定义我不知道,我讲了一下应用方面的REST风格。24.Q:讲一下HTTP协议的主要请求方法。A:Get和Post,然后讲了一下Get和Post的区别。25.Q:HTTP协议的请求头、响应头有哪些?A:随便说了几个我记得的。26.Q:讲一下HTTP响应码。A:200,404,401,403,500……27.Q:讲一下401和403的区别。A:401是未登录,认证失败吧,403是访问被拒绝。401是请求到了服务器,被拦截器之类的处理了;403是请求没有进入服务器就直接被拒绝了(错的离谱)28.Q:你项目是怎么实现登录鉴权的?A:讲了一下项目的登录流程,但是项目没有用到鉴权。29.Q:JWT令牌里面存了些什么,怎么防篡改?A:存了时间戳(太久没用了,我只记得有个这个了),防篡改我只知道是工具生成的,如果篡改了就无法解析成功。30.Q:了解过SpringSecurity吗?A:我只知道有这个东西,没学过也没用过。31.Q:说一下MyBatis底层原理A:我知道是反射和动态代理,然后我解释了一下反射(举例子解释的),MyBatis具体是怎么通过反射实现的我不知。32.Q:用过MyBatis中的xml配置实现SQL吗?A:用过,xml文件一般是用于实现MyBatis的条件查询或者复杂查询。应该还有一些问题,但是过了几天我已经忘了,面试官人挺好的,不会的问题先是引导,引导完了之后还不会就直接跳过了,不会在同一个问题一直追着问,然后给出的讲解也很清晰。鼠鼠是第一次面试到这么技术的,然后感觉自己还是太弱了,需要继续努力。
斫桂:感觉还行,继续努力
0经验如何找实习?
点赞 评论 收藏
分享
评论
4
15
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务