# RAG
RAG(检索增强生成):先检索相关资料,再让大模型基于资料回答问题。
# 一、录入流程:把资料变成可检索的知识库
数据接入 → 文档解析 → 清洗 → 分块 → 建立索引 → 入库
├─ 文本块 → Embedding → 向量索引
└─ 文本块 → BM25 倒排索引
1
2
3
2
3
| 顺序 | 步骤 | 做什么 |
|---|---|---|
| 1 | 数据接入 | 收集文档、网页、PDF、数据库等资料 |
| 2 | 文档解析 | 提取文本和标题、表格等结构;扫描件可用 OCR |
| 3 | 清洗 | 去噪、去重、统一格式 |
| 4 | 分块(Chunking) | 按长度、段落或语义切成文本块,可保留少量重叠内容 |
| 5 | 建立索引 | 用 Embedding 模型将文本块向量化,建立向量索引;同时为关键词检索建立 BM25 倒排索引 |
| 6 | 入库 | 保存文本块、向量、索引及来源、权限、版本等元数据 |
这里展示的是混合检索的准备流程,索引构建和存储通常由检索引擎一起完成。资料更新或删除时,需要同步更新相关文本块和索引。
# 二、查询流程:找到资料并生成答案
用户问题 → 查询改写 / 扩展(可选)
├─ Embedding → 向量检索 TopK ┐
└─ BM25 关键词检索 TopK ┴→ 融合 → 重排 TopN → 组装上下文 → 生成答案 → 校验输出
1
2
3
2
3
| 顺序 | 步骤 | 做什么 |
|---|---|---|
| 1 | 查询处理 | Query rewrite 改写问题,或 multi-query 生成多个查询,帮助召回;简单问题可直接检索 |
| 2 | 混合召回 | 一路将问题向量化后做语义检索,另一路用 BM25 匹配关键词,分别取 TopK 候选;按权限和元数据过滤 |
| 3 | 融合(Fusion) | 合并、去重多路结果,用 RRF 等算法形成统一排序 |
| 4 | 重排(Rerank) | 用重排模型进一步判断相关性,保留 TopN 条资料 |
| 5 | 组装上下文 | 将资料、用户问题和提示词组合,控制长度并标记引用 |
| 6 | 生成答案 | LLM 基于上下文回答问题 |
| 7 | 校验输出 | 检查格式、引用以及答案是否得到资料支持 |
- TopK:召回的候选数量;TopN:重排后保留的数量,通常更少。
- 可选环节:查询改写、混合检索、融合、重排可按需求取舍;单路检索可以跳过融合。
- 模型与代码:Embedding、模型重排、答案生成依赖模型;索引、检索、融合、存储和流程编排主要由代码完成。查询改写、OCR 等也可使用模型。
- 效果评估:用 Recall@K 看召回覆盖率、MRR 看首条相关结果的排名、Faithfulness 看答案是否忠实于资料。
