项目里的RAG完整流程
面试官问:讲讲你项目里的RAG完整流程,怎么回答? 今天我给大家讲一个看起来很笨,但是面试的时候非常管用的方法。 如果面试官问你:“你在项目里用了RAG,能不能讲一下完整流程?” 很多人的回答是:先把文档切片,存进向量数据库,用户提问时检索相关内容,再拼到Prompt里交给大模型回答。 这句话虽然不能说错,但基本上等于没说。因为面试官只要追问你: · Chu…
项目里的RAG完整流程面试官问:讲讲你项目里的RAG完整流程,怎么回答?今天我给大家讲一个看起来很笨,但是面试的时候非常管用的方法。如果面试官问你:“你在项目里用了RAG,能不能讲一下完整流程?”很多人的回答是:先把文档切片,存进向量数据库,用户提问时检索相关内容,再拼到Prompt里交给大模型回答。这句话虽然不能说错,但基本上等于没说。因为面试官只要追问你:Chunk Size为什么这么设置?切片太大太小分别有什么问题?检索召回率低了怎么优化?为什么RAG只能缓解幻觉,不能彻底消除幻觉?RAG和微调应该怎么选择?很多人马上就答不上来了。RAG系统真正懂的人,从来不是把流程背熟,而是理解:每个环节为什么这样设计,出问题后应该如何定位和优化。今天我把RAG的完整链路,包括切片、检索策略、微调的难度和优化,以及它为什么不能彻底解决幻觉,一次性讲清楚。一、RAG到底是什么?RAG的全称是:Retrieval-Augmented Generation,检索增强生成。它并不是让模型突然变聪明,也不是把企业知识直接训练进模型,而是给大模型外接了一个可以随时查阅的“参考资料库”。你可以把大模型理解成一个毕业多年的学霸:他学习能力很强,表达能力也很好,但毕业之后,脑子里的知识不会自动更新。你突然问他一条昨天发布的新政策,他不知道。但为了继续回答,他可能会根据记忆里的知识,编一个看起来合理的答案。RAG做的事情,就是在他回答之前,先帮他去查资料。整个过程就像一场开卷考试:1. 用户提出问题;2. 系统从知识库中找到相关资料;3. 把资料和问题一起交给模型;4. 模型根据资料组织答案;5. 找不到答案时,明确回答无法判断。因此,RAG的本质不是让模型记住更多内容,而是让模型在回答之前,先拿到更准确、更及时的上下文。二、为什么企业需要RAG?因为单纯依赖大模型自身能力,会遇到三个难以回避的问题:1. 幻觉问题大模型本质上是一个概率生成模型,它会根据上下文,一个Token接一个Token地预测接下来最可能出现的内容。它追求的是通顺、逻辑上是否像真的,但“看起来合理”并不等于“事实正确”。所以模型即使不知道答案,也可能一本正经地输出一个答案。2. 知识时效性问题模型的训练数据存在截止日期,训练结束后,新发布的政策、产品说明、业务数据和公司制度,不会自动进入模型。而RAG的知识库可以持续更新,只要替换或新增文档,就可以让系统使用最新信息,不需要重新训练整个模型。3. 企业私有数据问题企业内部的制度文档、产品资料、客户信息和业务数据,通常不能直接拿去训练公共模型。一方面涉及数据安全,另一方面微调成本也非常高。RAG不需要修改模型参数,只需要在模型调用之前,检索企业自己的数据库,再把相关内容临时放进上下文中。相比直接微调模型,它更轻量,也更容易控制权限、更新内容和管理来源。三、RAG和微调应该怎么选择?很多面试官会继续追问:“既然要让模型掌握企业知识,为什么不直接微调?”这里要先区分两件事:RAG主要解决的是模型“知道什么”的问题,适合回答知识类、事实类问题,例如:产品使用说明;新闻资讯;政策法规;实时业务数据。通常更适合使用RAG,因为只要更新知识库,就能让系统使用最新内容,不需要重新训练模型。如果你的目标是调整模型的行为方式,例如:固定某种回复风格;提升某一类任务的执行习惯;遵循某种推理步骤;则更适合使用微调。两者也不是非要二选一,实际项目中,可以通过微调模型“应该如何回答问题”,再通过RAG提供“具体应该回答什么”。四、一个完整的RAG系统是怎么搭建的?RAG的核心流程可以概括为四步:切片、向量化、检索、生成。如果从系统链路来看,可以分成两个阶段:离线阶段:提前处理知识库中的文档:文档加载 → 文本清洗 → 文本切片 → 向量化 → 写入向量数据库。在线阶段:用户提出问题后:问题处理 → 问题向量化 → 检索相关内容 → 重排序 → 组装Prompt → 大模型生成答案。下面把这几个核心环节分别展开。五、第一步:文本切片企业文档不能直接喂给模型,一方面,文档可能超过模型的上下文长度;另一方面,整篇文档中包含大量与问题无关的信息,会干扰模型判断。所以需要把文档切成一个个文本块,也就是Chunk。常见的切片方式主要有三种:1. 固定长度切分按照固定Token数进行切分,例如每500个Token切成一块,相邻文本块之间保留50个Token的重叠内容。它的优点是:实现简单、处理速度快、参数容易控制。缺点是可能把一句话、一个段落、甚至一个完整规则从中间切断,导致语义不完整。2. 递归切分先按照标题、段落等较大的结构进行切分,如果文本块仍然过大,再继续按照句子、标点或字符切分。这种方式能够尽量保留原始文档结构,在实现成本和语义完整性之间比较平衡,是大多数通用知识库的常见选择。3. 语义切分通过Embedding模型或大型模型判断内容的语义相关性,语义接近的内容放在同一个文本块中,主题发生明显变化时再进行切分。它的语义完整性通常更好,但处理速度更慢,也会增加额外的模型调用成本。六、Chunk Size应该怎么设置?这里没有一个适用于所有项目的标准答案,参数选择需要综合考虑:文档结构;用户问题类型;Embedding模型;生成模型的上下文长度;检索策略;答案质量的综合范围。Chunk太大,会出现三个问题:1. 一个文本块里包含多个主题;2. 检索虽然命中,但大量内容与问题无关;3. 模型需要从长文本中再次寻找答案,噪声增加。Chunk太小,也会出现问题:1. 上下文被切断;2. 单个问题需要的信息分散在多个文本块;3. 多个文本块缺乏完整语义,模型无法直接回答。因此,实际项目中一般不会凭直觉直接确定参数,而是先建立一套测试集,对不同的Chunk Size、Overlap和Top K组合进行评测。例如可以从下面的参数开始测试:Chunk Size:400~800 Tokens;Overlap:Chunk Size的10%~20%;Top K:5~10。假设目标Top K=10,Chunk Size:500;Overlap:50;初始目标Top K:10。我会结合真实问答集,对召回率、准确率和回答质量进行评估,再不断调整,而不是把某个固定参数当成标准答案。七、第二步:文本向量化完成切片后,需要把每个文本块转换成向量。可以把向量理解成文本在语义空间中的“坐标”,语义越相近的两段文字,在向量空间中的距离就越近。例如:“员工怎么申请年假?”“公司的休假申请流程是什么?”两句话的关键词并不完全一样,但语义高度相似,因此向量位置会比较接近。当用户提出问题后,系统也会把问题转换成向量,再到向量数据库中寻找距离最近的文本块。这一步使用的模型叫Embedding模型,选择Embedding模型时,需要重点关注:中文语义理解能力;推理速度;调用成本;最大输入长度;是否支持私有化部署。完成向量化后,还需要把文本块、向量和相关元数据一起写入数据库。元数据通常包括:文档名称;章节标题;页码;更新时间;文件类型;权限范围;原文链接。这些信息不仅可以用于过滤检索结果,还能支持答案引用和原文溯源。八、第三步:检索用户提问后,系统会先把问题转换成向量,然后从向量数据库中召回最相关的Top K个文本块。但一个真正可用的RAG系统,通常不会只依赖单一的向量检索。因为向量检索擅长捕捉语义含义,却不一定擅长精确匹配。例如:产品型号;员工编号;合同编号;专业编号;错误码;政策文件名称。这些内容用关键词检索,可能比向量检索效果更好。因此,生产环境中经常采用混合检索:向量检索 + BM25关键词检索 + 元数据过滤。完整的链路组合会变成:1. 先用向量召回Top K;2. 再用关键词和元数据过滤;3. 对结果进行重排序;4. 最后只保留最相关的几个文本块。这一步可以减少“召回了相关内容,但最重要的内容排在后面”的问题。九、第四步:生成答案检索完成后,不能只是简单地把文本块和用户问题拼在一起,还需要设计一套明确的Prompt,约束模型如何使用检索结果。这一步非常关键,因为即使检索到了正确内容,如果Prompt设计得不好,模型仍然可能回答错误、回答空泛,甚至编造内容。常见的Prompt策略包括:只基于检索内容回答;信息不足时主动回答;不允许自行补充事实;存在冲突时要标注冲突;回答时需要标注引用来源。如果没有这些约束,即使系统检索到了正确文档,模型仍然可能加入自己原有的知识,甚至编造文档中不存在的内容。十、为什么RAG只能缓解幻觉,不能彻底消除幻觉?很多人会问:“既然RAG有了正确的资料,为什么还会出错?”因为检索系统可能不准确,模型可能不擅长理解,模型可能不完全读懂上下文,知识可能仍然存在偏差。另外,RAG只能辅助模型,不能彻底消除幻觉,因为检索可能不准确,模型可能不擅长理解,模型可能不完全读懂上下文,知识可能仍然存在偏差。这也是为什么在生产环境中,通常会把RAG和人工审核、事实校验、知识库更新结合起来,而不是把它当成一个完全不需要维护的系统。十一、面试时可以直接这样回答如果面试官问:“讲讲你项目中的RAG完整流程,以及为什么要使用RAG。”你可以这样回答:RAG的全称是检索增强生成,核心思路是让模型从试卷考试变成开卷考试。使用RAG主要是为了解决三个问题:第一是大模型的幻觉问题;第二是知识时效性问题;第三是企业私有数据无法直接用于模型训练的问题。我会先解释RAG和微调的区别:如果目标是让模型掌握企业知识,我会更适合用RAG;如果是想让模型改变风格、结构和输出模式,我会更适合用微调来获取知识和有知识的问题。它不修改模型参数,只在生成或在模型外部补上上下文。RAG的完整流程分为离线和在线两个阶段:离线阶段包括文档加载、文本清洗、文本切片、向量化,以及将向量和元数据写入向量数据库。在线阶段在用户提问后,先进行Query处理和向量化,再通过向量检索与关键词检索召回相关的文本块,经过Rerank排序后,最终返回给用户。我会结合具体参数说明,例如Chunk Size为什么是500,Overlap为什么是50,Top K为什么是10,这些参数不是拍脑袋定的,而是通过测试集不断调优的。另外,我还会说明为什么RAG不能彻底消除幻觉,因为检索可能不准确,模型可能不擅长理解,模型可能不完全读懂上下文,知识可能仍然存在偏差。这一段回答,能够体现出三个关键能力:第一,你可以清楚区分离线链路和在线链路,说明你理解完整系统,而不是只会背概念。第二,你能解释切片、检索和生成环节为什么这样设计,说明你真正参与过产品方案。第三,你主动提到RAG无法彻底消除幻觉,并给出优化方案,说明你不仅会搭建功能,还具备评测和问题排查能力。RAG的基础流程并不难,真正拉开差距的是:你能不能清楚为什么这样做,什么情况下会失败,以及失败之后应该如何优化。当你进一步掌握Query改写、混合检索和Rerank重排序之后,你对RAG的理解,才真正从“会搭建”进入“会优化”。另外,我也整理了一套AI产品经理的学习路线,以及RAG项目的完整评测和优化流程,需要的朋友可以评论区留言,我会把资料发给你。5.35 :6pm Z@m.qr dAt:/ 01/28 复制打开抖音极速版,看看【可颂AI产品经理的作品】面试官问:AI项目中RAG的完整流程 # AI产品... https://v.douyin.com/EenEcMThL30/