RAG 的完整工作流程是怎样的?核心步骤有哪些?
- 标签:RAG、RAG 流程
🏛 业务架构师
RAG 的完整工作流程,我按"建库—查询—生成—治理"四阶段八步骤讲:
阶段一·知识建库(离线):
- 文档接入:多源文档(PDF/Confluence/数据库)解析,版面识别保表格结构,清洗去噪;
- 切分与向量化:按语义结构切块(300~500 字)→ Embedding 模型向量化 → 附元数据(来源、部门、版本、密级、时效);
- 索引构建:向量+元数据写入向量库,构建 ANN 索引,增量更新管线就位。
阶段二·检索(在线):
- 查询预处理:查询改写(指代消解)、扩展、自查询抽元数据条件;
- 混合检索与精排:向量+BM25 多路召回 → Rerank 精排 → 元数据过滤(权限/时效)→ Top 3~5。
阶段三·生成:
- 上下文装配与生成:编号分块+用户问题组装进提示("仅依据资料作答+引用+不足则拒答")→ LLM 生成带引用的答案 →(可选)忠实度校验。
阶段四·治理(持续):
- 评估:评测集回归(命中率、忠实度、引用正确率)+ 线上指标(点踩率、转人工率);
- 运营闭环:badcase 归因(检索层/生成层/知识缺失)→ 定向优化 → 知识补录流程。
业务视角的总纲:前三个阶段是"管道",第四阶段才是"生命线"——RAG 系统的价值曲线取决于运营闭环的质量:知识库随业务长、评测集随 badcase 长。上线只是开始,这是我给每个 RAG 项目立的第一条军规。
🏗 系统架构师
RAG 完整工作流程 = 离线建库管道 + 在线问答链路(架构上必须分开——独立扩缩容与迭代):
离线(数据供给线):
- 接入:多源文档(PDF/Word/HTML/DB)采集与变更监听;
- 解析:版面分析、表格特殊处理(转 HTML/拆行冗余表头)、OCR 扫描件;
- 清洗:去噪(页眉页脚/水印)、去重(hash/MinHash)、质量打分;
- 分块:结构感知切块(标题/段落边界)+ 重叠;元数据注入(来源、时间、权限、版本);
- 嵌入:Embedding 模型批量化 + 向量入库(附标量索引)。
在线(查询服务线):
- 查询预处理:会话改写(指代消解)、意图路由、查询扩展/自查询(元数据抽取);
- 检索:混合检索(向量 + BM25)+ 权限 pre-filter → Top 50;
- 精排:Rerank(Cross-Encoder)→ Top 3~5 + 相关性阈值过滤;
- 生成:上下文组装(预算控制、关键在前)→ LLM 生成(带引用要求、拒答合法化);
- 后处理:引用校验、事实一致性抽检、敏感内容扫描;
- 反馈闭环:点踩/纠错回流 → badcase 归因(检索 or 生成)→ 建库/Prompt/参数迭代。
工程要点:两线解耦(在线挂了离线照跑);每步埋点(可观测是迭代前提);离线管道幂等可重跑(文档版本化);核心指标:检索 recall@K、生成 faithfulness、端到端解决率——三层分开设监控归因。
💻 全栈开发专家
RAG 完整工作流程(核心步骤按数据流串讲,工程版):
离线索引管道(一次/增量执行):
- 文档接入:多源汇聚(上传/爬取/API 同步);
- 解析:PDF/Word/HTML → 统一 Markdown 中间格式(MinerU/Docling,表格结构保留);
- 清洗:去噪(页眉水印)、去重(MinHash)、脱敏、元数据抽取(source/time/acl);
- 分块:chunk 512 token + overlap 10%(或结构化/父子块策略);
- 向量化:Embedding 模型批量编码(bge-m3 等);
- 入库:向量+原文+元数据写向量库(upsert 幂等)。
在线问答管道(每次请求):
- 预处理:query 归一化、多轮指代消解、(按需)查询扩展/改写;
- 检索:向量+BM25 混合检索 top50(带权限/元数据过滤);
- 精排:rerank 取 top3~5(分数低于阈值→拒答分支);
- 生成:编号上下文+指令(仅依据资料/引用/拒答条款)→ LLM 流式生成;
- 后处理:引用校验、内容护栏、格式化输出;
- 反馈闭环:点赞点踩埋点、badcase 回流评测集。
离线: 源→解析→清洗→分块→嵌入→入库
在线: query→改写→混合检索→rerank→生成(引用)→校验→回答工程要点:两条管道解耦(队列削峰、增量 upsert);每个环节埋指标(解析成功率、recall@k、拒答率、faithfulness)——出问题按管道分段定位,比「RAG 效果差」这种笼统归因高效得多。