[控场AI]
· 6 分钟阅读· 3,405 字

RAG面试核心:离线建库与在线检索全流程拆解

RAG面试核心:离线建库与在线检索全流程拆解

RAG通过实时检索外部知识库解决大模型知识固化问题,详解离线建库与在线检索两阶段流程。

文章系统讲解RAG(检索增强生成)的原理与完整流程。首先指出大模型知识在训练后固化,微调更新成本高昂,而RAG在提问时实时检索外部知识库并放入prompt供模型阅读作答。接着拆解两阶段:离线阶段依次为文档加载、文档切割(chunk建议500-1000并设置重叠)、embedding向量化、存入向量数据库;在线阶段依次为用户问题改写、向量检索粗排、rerank精排过滤、拼接prompt生成并约束模型仅依据资料回答。文章强调向量检索比较语义而非关键字,实际系统采用向量加关键字的多路召回再统一重排,并总结RAG知识热更新成本低、答案可追溯的核心价值及面试与评估要点。

为什么大模型需要RAG?

大模型的知识在训练完成后就“冻住了”。你可以问任何一个大模型它的知识截止日期,得到的总是某个过去的时间点。训练数据截止之后发生的事情,模型一无所知;而对于企业内部文档、私有数据,它更是无法直接回答。

有人会问:为什么不靠微调来更新知识?理论上可行,但代价很高——微调成本大、耗时长,而且知识一旦写进模型参数,想更新就得重新训练一遍。用原文的比喻:好比让你记住一条新闻,却必须重新上一遍大学。

RAG走了一条完全不同的路径:不把知识塞进模型参数,而是在用户提问时实时去外部知识库检索,把找到的内容放进prompt,交给大模型阅读后作答。大模型本身具备很强的阅读能力,只要相关内容出现在上下文里,它就能基于这些内容回答问题。这就是RAG的本质。

RAG全称Retrieval-Augmented Generation,即检索增强生成。它要解决的核心问题就是:大模型知识固化后,面对私有数据或最新信息无法作答。做法是在生成答案之前先检索外部知识库,将检索结果与用户问题一并提交给大模型。

RAG完整工作流程:离线与在线两阶段

一个完整的RAG系统分为两部分:离线阶段建立知识库,在线阶段使用知识库。下面按步骤拆解。

离线阶段:建立知识库

离线阶段的目标是在用户提问之前把知识库准备好,包含四个步骤。

第一步:文档加载。 把各种格式的原始数据读取进来——PDF、Word、Markdown、网页、数据库记录都可以,通过文档读取器加载到应用程序或操作系统的内存中。

文档加载到内存

第二步:文档切割。 把文档切成一个个小片段,称为chunk。为什么不整篇存进去?原因有两个:embedding模型有输入长度限制,整篇文档塞不进去;就算长度不限,把整篇文档压缩成一个向量,很多细节信息会被“平均掉”,导致检索结果不准确。

切割策略是面试常考点。最简单的做法是按固定字符切,但容易把语义截断。chunk太大,检索时容易召回一堆不相关信息;太小又会导致语义不完整、上下文被切断。一般情况下500到1000是一个比较合理的切割值,同时要做一定的重叠,避免把完整语意从中间截断。原文截图里也提到“我们可以规定好”具体的切割参数,实际取值要结合具体场景判断。

切割参数设定

第三步:向量化。 这是离线流程中最核心的步骤。embedding模型把一段文字转成高维数字向量,比如一个1536维的浮点数列表。你可以把它理解为语义坐标系:语义相似的文本在坐标系中位置越靠近,不相关的离得越远。

为什么向量能表示相关性?因为embedding模型在训练时看了海量文本,学会了识别哪些句子表达同一个意思,并用对比学习不断调整权重,让相近的拉近、无关的推远。这种空间结构一旦形成,查询时就能通过计算距离找到相近内容。常见做法是计算余弦相似度,值越小越相关。

关键认知:向量检索不是按关键字匹配,而是比较语义是否相近。实际生产环境很少只用单一向量检索,通常是多路召回——向量相似度检索加关键字匹配,再做融合排序。

第四步:入库。 把每个向量和对应的原始文本一起持久化存入向量数据库。向量数据库专门优化了高维向量的存储和相似度搜索,常见的有Milvus、Chroma等,支持在千万量级向量中快速找到最相近的几条数据。

向量持久化存储

在线阶段:使用知识库

在线阶段为用户提问提供实时检索,对响应速度有要求,包含四个核心步骤。

第一步:用户输入与改写。 用户的问题往往口语化、模糊,直接检索效果不一定好。通常要先把问题改写成更适合检索的形式,让向量数据库和大模型都能更好地理解用户意图。

第二步:向量检索(粗排)。 把用户问题也转成向量,去向量数据库中做相似度匹配,找出距离最近的top-k个chunk。这一步速度很快,百万级向量库通常也能快速返回。但速度快是有代价的:向量检索本质是比较两个向量之间的距离,并没有深度理解查询和文档之间的语义关系,召回结果难免混入看似接近实则不相关的内容。所以这一步也叫粗排。

第三步:重排(精排)。 为了弥补粗排的不足,rerank模型会把用户问题和每个候选chunk拼在一起,深度理解它们之间的相关性,重新排序并过滤掉不相关内容。实际系统中通常是多路召回——除了向量检索,还可能有关键字匹配等方式,各路结果统一做重排,保证返回给用户的一定是最相关的数据。原文截图也强调“我们是多路召回的”。

多路召回与重排

第四步:生成。 把用户问题和重排后的chunk拼在一起放进prompt,交给大模型生成最终答案。prompt中通常会明确要求:只根据提供的资料回答,资料里没有的就说不知道。这样能有效抑制模型幻觉。

为什么要加这个限制?如果不设约束,大模型遇到不擅长的问题时可能胡编乱造,输出内容逻辑上没问题,但细节是错的。使用大模型时要具备判断正确与否的能力,盲目相信输出对系统是不负责任的。

RAG的核心价值与面试要点

RAG最核心的价值有两点。一是知识可以随时热更新:往知识库中更新文档即可,不需要重新训练模型,成本低。二是答案有出处:每条回答都能追溯到来自哪个chunk,比纯大模型生成更可靠;就算答错了,也能明确判断是哪条知识出了问题。

RAG是大模型岗位面试中的核心基础点,要求有明确的知识体系。写项目经验时最好能体现一个RAG项目。除了基础RAG,还有RAG Graph——借助图数据库维护知识之间的关联性。系统搭建完成后还要做评估和优化,关注召回准确率、召回率、忠实度等指标,可以通过RAGAS等工具做评测分析。

任何系统都不是建完就完事,实践中要不断调整优化RAG系统,让检索更快更好地满足用户需求。把离线建库和在线检索这两阶段的基础打扎实,面试时才能把整个设计流程和操作步骤完整讲清楚。

背景补充

Embedding模型与对比学习:将文本映射为稠密向量的模型通常基于Transformer编码器(如BERT类结构),输出一个固定维度的向量。其训练目标常采用对比学习:构造正样本对(语义相同或相近的句子)和负样本对(无关句子),通过损失函数拉近正样本向量距离、推远负样本距离。典型方法如Sentence-BERT、SimCSE,以及面向检索的稠密检索模型(如DPR)。实际选型时需关注模型的训练语料领域、最大输入长度和向量维度,这些直接决定chunk策略与检索质量。

余弦相似度:余弦相似度计算两个向量夹角的余弦值,公式为点积除以模长乘积,取值范围在-1到1之间。值越接近1表示方向越一致、语义越相近;越接近-1表示方向相反。由于多数embedding模型输出的向量已做归一化,此时余弦相似度与点积等价,计算更高效。文中提到“值越小越相关”,通常是指以余弦距离(1减去余弦相似度)作为距离度量时的情形。

粗排与精排的分工:粗排(召回)阶段面对的是海量候选文档,要求在毫秒级完成筛选,因此只能使用计算代价低的向量距离或倒排索引等轻量方法,宁可多召回一些也不能漏掉关键内容。精排(重排)阶段只处理几十到上百个候选,可以使用交叉编码器(Cross-Encoder)这类计算量大但精度高的模型:把查询与每个候选文档拼接后一起输入模型,让模型在词级别深度交互,输出相关性分数。这种“先宽后严”的两阶段架构是信息检索系统的通用范式,代价是精排延迟较高,因此候选数量要控制。

Rerank模型:常见重排模型基于交叉编码器结构(如BGE-Reranker、Cohere Rerank),与双塔式embedding模型不同,它不预先计算文档向量,而是实时对“查询-文档”对打分,因而能捕捉更细粒度的语义匹配关系,但无法离线建索引,只适合对小规模候选集排序。

#RAG#检索增强生成#RAG工作流程#向量数据库#embedding模型#RAG面试#大模型
分享:

相关推荐