资讯详情

RAG完整工作流程拆解:从文本切块、向量检索到生成评估的11张图解

📅 2026/9/20 1:51:03 | 华诺云谱 👁 阅读
RAG完整工作流程拆解:从文本切块、向量检索到生成评估的11张图解
聊到大模型落地RAG检索增强生成这两个词你一定绕不开。无论是做企业知识库问答、客服助手、私有文档分析还是AI搜索引擎RAG的工作原理都是决定整套系统天花板的核心环节。很多人看过官方文档、翻过论文结果还是搞不清“文档切块之后为什么要转向量”“检索到的内容怎么跟大模型结合”更别说遇到效果不好时压根不知道问题出在哪个环节。今天我就结合自己落地RAG项目的经验直接把RAG完整工作流程拆开揉碎用11张图解的方式把整条链路讲透。你完全可以边看边画最后自己也能画出这张全流程图。这篇内容适合刚接触RAG、想去搞懂原理的新手也适合已经在做RAG但总觉得效果不稳、想系统排查问题的开发者——看完你会对“RAG到底是怎么工作的”有一种豁然开朗的感觉。1. 为什么需要RAG大模型知识困局的破局思路1.1 大模型的两大先天软肋知识截止与幻觉先拍一个观点大模型本质上是一个“高智商但没联网的人类专家”——它记了很多知识但这些知识停留在训练数据截止的那一刻而且它记忆的内容未必完全准确。这就是业界常说的两个痛点一是知识滞后GPT类模型不会知道你昨天刚更新的产品手册二是幻觉它在不确定答案时会一本正经地编造看起来很有逻辑实际上完全不对。举个例子。我把一份公司内部的技术规范文档直接丢给通用大模型提问它给出的答案很流畅但里面引用的版本号、接口名全是编的。这就是因为模型只学会了“语言模式”并没有真的“检索”过我的文档内容。在真实业务场景里这种幻觉是致命的尤其涉及合同条款、医疗建议、设备参数这类需要精确回答的领域。1.2 RAG的核心理念用“搜索”弥补“记忆”RAG也就是Retrieval-Augmented Generation检索增强生成思路其实很朴素既然模型记不全我们就在它回答之前先替它查一遍资料再把查到的资料塞进它的“参考上下文”里让它基于这些证据来回答。你可以把这个过程想象成开卷考试——模型是考生知识库是参考资料RAG就是那个帮你翻书、把相关段落折好角放在桌上的人。这个设计有几个天然优势知识库可以随时更新不需要重新训练模型回答可以附上引用来源方便追溯和审核核心敏感数据始终掌握在自己手里不需要把数据交给模型厂商。这也是为什么近两年RAG在企业应用里的热度远超微调落地性价比实在太高。2. RAG整体架构图1看懂三段式流水线2.1 三段式结构索引、检索、生成RAG完整工作流程宏观上就三步索引、检索、生成。我画图的时候会习惯用三种颜色分别表示这三个阶段这个习惯也建议保留——后面排查问题会非常方便。索引阶段蓝色把原始文档清洗、切块、转成向量存储到向量数据库里。这一步发生在系统上线之前属于离线部分。检索阶段绿色用户提问后把问题也转成向量去向量库里找最相似的文本块再对结果做一次精排。生成阶段橙色把用户问题、检索到的文本块、历史对话拼成提示词交给大模型生成答案同时保留引用来源。图1就是把这三段串起来的总览图左边是离线索引流程右边是在线问答链路中间靠“向量数据库”这个桥梁连接。你脑海里首先要有这张总图后面所有细节都是在给这三段填肉。2.2 RAG的三种形态从朴素到模块化很多新手一上来就被各种缩写绕晕这里我先做个定位。目前RAG学术和工业界的演进路径大概分三档Naive RAG朴素RAG就是前面说的三段式也是本篇文章的核心适合大部分早期项目和中小规模知识库。Advanced RAG进阶RAG在朴素RAG基础上增加查询改写、重排序、混合检索等模块解决召回不准、顺序不对等问题。Modular RAG模块化RAG把整个流程拆成可编排的组件支持路由、多步推理、工具调用像LangGraph实现的那种Agentic RAG就属于这一类。建议大家先把朴素RAG吃透再往进阶走。我见过太多人一上来就上重排序、上GraphRAG结果连基础的切块参数都没调好最后效果差都差得莫名其妙。3. 图2到图5详解索引阶段到底在做什么3.1 图2文档加载与清洗——别让垃圾进库索引阶段的第一个环节是文档加载。这一步看着简单实际上坑最深。要么文档格式太杂PDF、Word、Excel、PPT、网页全都有要么内容质量参差不齐页眉页脚、水印、目录、图表穿插在一起。我见过不少团队把PDF直接塞进解析器解析出来全是乱码和版面错位的文本检索效果自然稀烂。我自己的标准做法是先按文档类型选解析工具比如PDF用PyMuPDF或OCR方案、Word用python-docx、网页用Trafilatura解析完成后必须做一轮清洗包括去页眉页脚、去重复空行、修正乱码、把表格转成markdown格式。这里有一个经验清洗的目标是“保留语义完整”不是“绝对干净”。有些团队清洗过度把章节标题、编号全删了反而破坏了文档的逻辑结构检索时上下文的连贯性大打折扣。3.2 图3文本切块——决定检索精度的关键因素文档清洗完成后就要面对RAG里最知名也最玄学的环节切块。为什么要切因为文档太长向量化的时候上下文窗口装不下而且一个超长文本的向量会被“平均稀释”检索时根本找不准。切块的目标是得到一批语义完整、长度适中、彼此独立的文本块。目前主流的切块策略有三种我在图3里会画一棵决策树策略原理适用场景缺点固定大小切块按字符数或token数硬切纯文本类文档结构简单容易切断语义递归字符切块按段落、句子、标点层级回退切分通用场景LangChain默认方案对语义边界的理解有限语义切块利用embedding相似度判断句子边界内容复杂、主题跳跃的文档计算成本高速度慢参数上我的起步值是单块500到800个字符重叠区50到100个字符。重叠区是为了防止切断的句子失去上下文实测下来对检索效果有明显提升。但记住切块没有银弹一定要拿你自己的文档反复试。我之前做一个设备手册的知识库固定800字符切出来的块总是切断操作步骤换成按“步骤编号”为锚点的自定义切法才解决问题。3.3 图4Embedding嵌入——把文字变成坐标切好的文本块下一步要转成向量也就是Embedding。这个环节的概念很简单一段文字变成一个几百到几千维的高维向量语义相近的文字在向量空间里靠得近语义无关的离得远。你可以把它想象成一个巨大的坐标系“苹果”和“香蕉”的坐标挨得很近而“苹果”和“发动机”则隔得很远。选Embedding模型有几个硬指标要关注。一是维度常见的有384维、768维、1024维或更高维度越高表达力越强但存储和计算成本也越高二是语言支持中文场景必须选对中文友好的模型比如bge-m3、text-embedding-v3这类三是最大输入长度通常为512或8192个token决定了你的文本块上限。这里想多强调一句Embedding模型和生成大模型是两套独立的模型很多新手误解为“知识库里的向量是大模型算出来的”其实不是。你大模型用Qwen也好、GLM也好Embedding完全可以用一套更轻量、更便宜的专用模型——只要两者语义空间对齐效果就OK。3.4 图5向量存储与索引——给向量建个检索台账向量数据库是RAG的地基。图5里需要画清楚的核心有两点一是数据表结构至少包含id、文本内容、向量、元数据这些字段二是索引算法常见的近似最近邻搜索算法有HNSW、IVF、PQ等。其中HNSW是目前最主流的图索引算法它把向量组织成多层图结构检索时从顶层快速靠近目标再逐层下探精确搜索。我用pgvector的时候喜欢用HNSW加余弦距离建索引时设参数m16、ef_construction64查询时ef_search设40性能和召回率都比较均衡。如果你是中小规模知识库几十万条向量以内用pgvector或者开源的Milvus Lite就足够没必要一上来就上大规模的分布式集群。-- pgvector建表与索引的例子方便直观理解存储层 CREATE TABLE doc_chunks ( id SERIAL PRIMARY KEY, content TEXT NOT NULL, embedding VECTOR(1024), source TEXT, chunk_index INT ); CREATE INDEX ON doc_chunks USING hnsw (embedding vector_cosine_ops);4. 图6到图8详解检索阶段如何找到最相关内容4.1 图6查询预处理——让用户问题更“可检索”用户提问和知识库里的原文大概率不是同一套话术。比如用户问“这个设备的保修期是多久”文档里写的可能是“本产品自购买之日起享受一年质保服务”。如果直接拿原始query去向量库搜效果通常一般。所以进阶的RAG系统在检索之前会先做查询处理。最常用的三种手段查询改写用LLM把口语化问题改写得更规范比如“它多少钱”改写为“该产品的价格是多少元”。HyDE假设性文档嵌入让LLM先生成一个虚拟答案再把虚拟答案拿去检索有时能显著提升召回率因为答案与文档的词汇重合度更高。多渠道路由判断用户问题是需要查知识库、查数据库还是让模型直接回答避免每次都把所有问题都丢进向量库。关于这一点我想说个心得查询改写不是万能的。如果知识库本身质量很差改写只是“在垃圾堆里翻得更勤快”不能从根上解决问题。它适合的是语义鸿沟明显的场景不适合做救命稻草。4.2 图7相似度召回——把向量库翻个底朝天拿到查询向量后向量数据库会做近似最近邻搜索返回Top-K个最相似的文本块。这一步的关键参数是K值也就是召回数量。K设太小容易漏掉正确答案K设太大会塞进大量噪声干扰模型判断。我的实践经验是这样的K值可以先从4到8开始再根据问题的复杂度和知识库的命中情况动态调整。图7里有个细节值得画进去就是“向量检索不是唯一通道”——在专业场景里很大一部分问题其实是靠关键词匹配解决的比如产品型号“XZ-2000”、订单编号“PO-20250301”这类精确词用向量反而不好找。所以成熟的RAG系统基本都会做混合检索向量检索负责召回语义相关BM25这种稀疏检索负责精确匹配两者合并后再做融合。4.3 图8重排序——把最合适的答案顶上去召回阶段拿到的是“可能相关”,而不是“一定相关”。向量相似度高的文本块在语义上可能只是沾边真正关键的答案可能排在第五第六位。这时候就需要一个重排序模型也就是Reranker对召回结果做一次精细打分把最匹配的Top-N挑出来送给大模型。为什么要单独做这一步因为向量检索用的双塔结构追求的是“快”它对句子间的深层交互理解不够而Reranker是交叉编码器能把query和doc拼在一起细细比对精度更高但速度也慢。所以工业界的标准姿势是召回阶段用向量库粗筛几百条重排序阶段用Reranker精排选三五条。我自己常用的方案是bge-reranker-v2-m3中英文效果都不错。重排序阶段还有个容易被忽略的小技巧把文档的元数据比如标题、章节路径也喂给Reranker这样它判断相关性的信息量会更足。5. 图9与图10详解生成阶段如何用好检索结果5.1 图9上下文组装——提示词的工程艺术检索阶段结束后系统手里有了一份“证据清单”接下来要把这些证据和用户问题、历史对话组合成一段结构化的提示词交给大模型。这一步的工程含量被很多人低估了。我见过不少团队把检索结果一股脑拼在一起连个格式标记都没有模型胡编的概率直线上升。我现在写生成提示词有一个固定的模板框架你是一个严谨的问答助手。请仅依据下列参考资料回答用户问题。 如果资料中找不到答案请直接回答根据现有资料无法确认。 回答过程中请标注引用来源格式为[1][2]等。 【资料】 [1] 来源产品手册.pdf 第3章 内容该设备正常工作电压为220V... [2] 来源FAQ-2025.docx 内容设备保修期为一年... 【历史对话】 用户... 助手... 【用户问题】 设备的额定电压是多少这个模板的关键在于三层设计第一层是系统角色的约束告诉模型“资料是唯一的证据来源”不依赖自身记忆第二层是资料块的结构化每条附带来源编号方便后来做引用追踪第三层是显式地给模型一个“答不出来”的选项这在幻觉控制上非常有效。5.2 图10生成与追踪——让答案有据可查上下文组装好之后就是大模型生成答案了。这一步本身没有太多黑魔法但有几个生产级的细节必须处理到位。第一个细节是引用溯源。要求模型在回答中出现关键事实后标记对应的引用编号比如“设备额定电压为220V[1]”。之后系统要做一次后处理校验确认模型生成的内容确实来自给定的资料块防止模型自己编造来源。这个校验可以用规则匹配更高级的可以用LLM判断答案是否忠于资料。第二个细节是答案与资料不一致时的处理。RAG应该允许模型说“没有找到相关信息”而不是强行拼接一个看似合理实则错误的答案。我见过很多系统为了追求“有回复率”强迫模型必须回答结果幻觉率飙升。记住一句话宁可说不知道不能说错的。第三个细节是流式输出。真实产品里的回答通常是一字一句蹦出来的如果在流式过程中还要做引用号等后处理就不能简单地把提示词输出透传给前端而是要做一层缓冲处理确保引用标记格式完整后再输出。6. 图11详解评估与优化闭环——这才是高手的分水岭6.1 为什么必须建评估体系很多人做RAG做到“能跑通”就停了觉得已经成功了。恰恰相反能跑通只是第一步能不能稳定、准确地回答业务问题才是核心。RAG系统的调试非常繁琐文档、切块、Embedding、检索、重排序、提示词任何一个环节变动都会影响最终效果。如果没有一套客观的评估体系你根本不知道改动是变好还是变坏。RAG的评估目前业界用的是RAGAS这类框架核心几个指标分别是指标考察内容通俗解释Faithfulness忠实度生成的答案是否忠于检索到的资料有没有照着稿子念而不是自己编Answer Relevancy答案相关性答案是否切题有没有答非所问Context Precision上下文精确率检索到的内容里真正有用的比例翻出来的资料有没有废话Context Recall上下文召回率正确答案是否被检索到该找的资料有没有找全6.2 一个完整的评估与调优闭环图11画的是一条闭环构建测试集、跑评估、分析badcase、针对性优化、回归验证。测试集不用多三五十条覆盖典型业务场景的高质量问答对就够了但要包含正面问题和刁钻的反面问题。实战里最常见的badcase有这几类召回漏检正确答案根本没进Top-K。对策是调大K值、换更好的Embedding模型、做混合检索。排序不准正确内容在但排得太靠后。对策是加重排序模型。切块破坏了语义答案被拦腰截断。对策是调整切块策略增加重叠区。提示词约束不够模型引用了资料之外的知识。对策是强化提示词约束加引用校验。我自己的迭代节奏是先跑一轮基线的RAGAS评估记录分数然后每次只改一个变量跑回归对比。这听起来慢实际上是最快的路。很多人一次改三个参数效果变差也不知道是哪个改砸的回头还得重来。6.3 快速上手的RAG技术栈推荐聊到实操肯定有人想问我该用什么框架搭一个RAG系统我给一套最省心的组合开发语言Python编排框架LangChain或LlamaIndex复杂流程直接用LangGraphEmbedding模型bge-m3或text-embedding-v3向量数据库中小项目用pgvector或Milvus Lite大项目用Milvus生成模型Qwen、GLM、DeepSeek等国内模型都可重排序bge-reranker-v2-m3这套组合覆盖了从原型到生产的大多数场景技术选型稳定社区资料也多。等流程跑通了再按自己的业务场景逐步替换组件这个过程才是最稳的。7. 常见问题与避坑实录这份速查表价值很高7.1 高频问题速查表这些年帮不少团队排查过RAG问题下面这张表基本覆盖了80%的痛点建议收藏。现象大概率原因解决方向回答张冠李戴引用别的章节内容切块过大或过小语义被割裂调整切块大小和重叠区检查清洗效果答案很空泛像是模型在硬聊检索到的文档相关性太低换Embedding模型增加粗召回数量多次追问同一问题答案不一致上下文窗口只带了部分结果或生成随机性过高固定K值和重排序逻辑必要时降低temperature检索出来一堆型号/编码对不上纯向量检索不擅长精确匹配增加BM25关键词检索做混合检索回答内容看着合理但完全引用错来源后处理校验缺失增加引用一致性校验知识库更新后效果反而变差增量更新的索引脏数据残留完善增量同步机制及时清理失效向量7.2 我的实操心法五条第一条先跑通再优化。别一上来就追求完美方案用最基础的切块加默认参数先跑通全流程让业务方看到效果再逐步精调。第二条数据清洗优先级最高。清洗做不好后面所有环节都给清洗还债。我做过一个项目60%的badcase都来自源头PDF解析乱码而不是检索或生成。第三条每个环节都要留监控日志。检索结果、重排序分数、答案引用来源都要记录出现问题才有据可查。有的团队线上出了幻觉问题连当时检索到什么都查不到排查直接抓瞎。第四条提示词里的“未知选项”一定不要删。允许模型说不知道是成本最低的幻觉抑制方案。第五条RAG的极限不在模型在知识库本身。如果文档本身表述混乱、自相矛盾再牛的RAG也救不回来。先把知识库质量管好RAG效果自然上去。说到底RAG不是什么高不可攀的尖端技术它就是把“外挂知识库”这件事工程化的方案。我印象最深的一次经历是帮一个制造企业做设备维修知识库最初的版本因为切块太碎模型回答总是漏掉关键操作步骤后来我按维修手册的“故障码-处理流程”结构调整了切块锚点又把召回K值从4调到6加了重排序效果直接从一个“玩具演示”变成车间老师傅都愿意用的系统。这件事给我的启发是理解RAG的工作原理比盲目追新框架重要得多——原理吃透了你才能知道问题出在哪一环也才知道该往哪个方向调。希望这11张图能帮你也建立这套判断力。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。