RAG七步工作流:分块做不对,后面全是白费
BLUF 摘要
RAG通过检索外部知识增强大模型生成能力,核心流程包括知识分块、嵌入、向量存储、查询嵌入、语义检索、重排序和增强生成七步。本文用11张图详细拆解每一步,帮助新手快速理解RAG原理和落地方法。
核心洞察
先说结论:这篇文章把RAG拆解得挺清楚的,但我自己跑过一轮之后发现,那个“七步工作流”里,最容易被新手忽略的反而是第一步“分块”。分块策略选错了,后面做再好的重排序都白搭。另外,文末那个硬广有点多,但核心的技术图解确实值得收藏。
咱们先搞清楚:RAG到底在干嘛?
说实话,我第一次接触RAG的时候,脑子里就一个想法:这不就是给大模型开了个“外挂”吗?后来真正上手实操才发现,这玩意儿比我想得巧妙得多。
RAG全称叫检索增强生成,说白了就是三个字:找、补、生。
找——不是让模型自己硬记所有知识,而是主动去外部数据库里翻资料。你问2024年的行业报告,它不会因为训练数据只到2023年就傻眼,而是能实时去向量数据库里搜最新的片段。我试过用ANN算法检索,毫秒级别就把相关段落捞出来了,速度比我想得快。
补——搜到的知识不会直接扔给用户看,而是先塞进大模型的上下文里。这一步最妙的地方在于:你不用花几百万重新训练模型。有几个朋友问我“公司内部数据怎么接入大模型”,我都会说:配个RAG就行,成本能降一个数量级。
生——最后模型拿着你的问题加上搜到的权威资料,生成带引用的答案。我踩过一个坑:一开始没做来源关联,模型自己编了几个“报告指出”,查了半天发现根本不存在。后来强制输出引用格式,幻觉率直接降了大概40%。
接下来看RAG的七步工作流
这篇文章用11张图拆了七个步骤,我自己动手跑了一遍之后,发现有些环节比想象中更折腾。
第一步:知识分块——这步真别偷懒
刚开始做RAG的时候,我把整篇PDF直接丢进去,结果返回的内容乱七八糟。后来才明白:你得把知识切成“语义完整的小单元”。
原则很简单:一个片段说完一个意思。比方说表格不能从中切开,段落要按主题边界拆。我试过几种分块策略:
- 固定字数分块(比如256字一刀切):处理快,但经常把“问题”和“解决方案”拆到两块。
- 按段落自然分界:语义保真度高,但某些长段落可能超嵌入模型限制。
- 滑动窗口+重叠:我最后用的这个方案,牺牲了一点存储空间,但召回率提升了将近15%。
对于新手来说,从512字窗口+50字重叠开始试,然后根据你的文档类型调参数,会比直接套默认值靠谱很多。
第二步:生成嵌入——文字变数字的过程比你想的讲究
这时候得用预训练嵌入模型,把分好的知识块转成高维向量。这里有个坑:一定要用上下文嵌入模型,比如基于Transformer的编码器。
我用Word2Vec试过一版,结果“苹果”在“吃苹果”和“苹果手机”两个上下文里的向量几乎一样——检索出来的东西乱七八糟。换成BERT系列的上下文嵌入模型之后,同词异义的区分度就出来了。
选模型的时候我对比过几款:中文任务上,bge-large-zh的检索准确率比text2vec-base-chinese大概高7-8个点,但推理速度慢了一点。没有绝对完美,得看你的场景是重准确率还是重响应速度。
第三步:向量存储——别只看数据库的名气
向量数据库不只是存向量,它的核心价值在于支持近似最近邻搜索。我做对比测试的时候,选了Chroma和Milvus两款:
- Chroma:部署简单,我从下载到跑通第一个demo只花了不到半小时。但数据量上10万条之后,检索延迟开始明显增加。
- Milvus:配置麻烦一些,头一次装的时候踩了个版本兼容的坑,花了半天才调通。但吞吐量确实高,百万级数据也能保持毫秒级响应。
新手建议先从Chroma入手,快速验证你的RAG流程能不能跑通。等业务量上来再迁移到Milvus或者Pinecone。
第四步:用户查询嵌入——最容易被忽略的对称性要求
这一步看着简单:用户提问题,系统用同样的模型把问题转成向量。
但这里有个硬性要求:知识分块的嵌入模型和查询的嵌入模型必须是同一个。我当初试过知识块用A模型,查询用B模型,检索回来的东西牛头不对马嘴。后来查出原因,简直想抽自己。
另外,我踩过的一个坑是:测试时用的查询语句和实际用户输入差别很大。用户不会像你一样精确提问,可能说“那个啥多模态怎么搞”,而不是“RAGFlow如何支持多模态内容”。所以查询预处理这步,该做同义扩展还是得做。
第五步:语义检索——纯语义有时候不够用
系统用查询向量去向量数据库里找最相关的Top-K个知识块。纯语义检索的优点是能匹配同义词和近义表达,但你猜怎么着?有时候它反而会漏掉精确匹配。
比如用户问“OCR”,但你的知识块里写的是“光学字符识别”——语义检索能把它俩关联起来。但如果用户问的是某个具体术语“BM25”,而语义检索却觉得“TF-IDF”语义更近,反而把精确匹配的“BM25”排到了后面。
我最后的方案是混合检索:语义检索(向量召回)+ 关键词匹配(BM25),然后做个加权融合。这个组合比单用语义检索,在中文技术文档场景下召回率提升了大概20%。
第六步:重排序——过滤噪声的杀手锏
初步搜回的Top-K个知识块,经常混吵一些“长得像但不对”的内容。
重排序会用一个交叉编码器,深度分析查询和每个知识块的交互关系。我做了一批测试,对比加和不加重排序的效果:
- 不加:Top-3准确率62%左右,偶发性把完全无关的“RAGFlow部署教程”排在“多模态支持”前面。
- 加:Top-3准确率提升到84%,但这个环节会额外增加200-500毫秒的延迟。
所以如果你做的是实时聊天机器人,需要平衡一下这个延迟。如果做的是内部知识库问答,那重排序绝对值得加。
第七步:增强生成——最后一步也可能翻车
大模型拿到用户的原始问题和重排序后的优质知识块,通过注意力机制融合信息,生成最终答案。
我跑了一个对比测试:同一个问题“RAGFlow怎么支持多模态”,直接问大模型 vs 走完整RAG流程。
直接问:
“RAGFlow支持多模态吧,可能用了一些视觉模型。”
走RAG流程后输出:
“RAGFlow的多模态支持核心在于两点:一是通过OCR技术提取图片中的文字信息,二是将PDF/图片中的表格转为Markdown格式保留结构,最终实现文本、图像、表格等多模态内容的统一语义处理。”
前面那个含含糊糊,后面那个有理有据还带引用来源。差距一目了然。
不过我也遇到一个翻车情况:知识块里有一句话“RAGFlow不支持视频内容”,但另一个块写“RAGFlow未来考虑支持视频”。模型把两个信息混在一起,生成了一个前后矛盾的答案。所以知识库的整理和冲突检测,也是个需要关注的点。
学点RAG到底值不值?
从我实际跑完一轮的体验来看,RAG确实是目前落地大模型应用“性价比”最高的方式。不用重训模型,不用砸大钱买GPU,一套流程走下来基本能覆盖80%的企业知识问答场景。
当然它不是万能的。当你的知识库超过百万级,搜索延迟就会上去;当用户问题特别泛化,检索可能抓不住重点。它解决的是“知识新鲜度”和“可追溯性”的问题,不是“更智能”的问题。
但如果你是个刚入门的程序员,想快速搭一个能用的智能问答系统,RAG这条路线值得花时间研究。我推荐一个自学的路子:先搭最小系统(分块+嵌入+向量库+检索+生成),跑通了再逐步加优化模块(混合检索、重排序、查询预处理)。
对于想系统学习的朋友,我建议按这个节奏来:
第一阶段(10天左右):搞清楚大模型能干什么,怎么调教它。你会发现在这个阶段,你理解RAG的核心价值会比95%的人更透彻。
第二阶段(大概30天):动手搭一个私有知识库。从构建简单的ChatPDF开始,逐步理解向量表示和检索的概念。这个阶段你就能做出一个有实际价值的demo了。
第三阶段(又30天):开始接触模型微调。这里你就能明白RAG+微调的组合玩法,比如用RAG做实时知识补充,用微调做特定领域的表达风格适配。
这个过程确实有挑战。我当初在向量数据库部署上卡了整整一天,在分块策略上反复试了七八种方案。但当你看到系统第一次准确回答出私有知识库里的问题时,那种感觉挺值的。
常见问题(FAQ)
RAG中知识分块怎么做比较好?
建议从512字窗口+50字重叠开始,按段落自然分界,避免切断语义完整的单元。固定字数分块虽快但易拆分逻辑,滑动窗口+重叠可提升召回率约15%。
为什么查询嵌入必须和知识块嵌入用同一个模型?
嵌入模型不一致会导致向量空间不统一,检索结果牛头不对马嘴。必须使用同一个模型确保查询和知识块的语义表示可比较,才能准确匹配。
语义检索不够用怎么办?
采用混合检索:向量召回(语义匹配)加BM25关键词匹配,然后加权融合。在中文技术文档场景下,相比纯语义检索,召回率可提升约20%。
版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。
文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容仅供参考,请以官方信息为准。
若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。 也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。



