RAG 系统化学习教程(含查询改写、混合检索、重排序、上下文增强与评估闭环) 文章目录配套仓库中文学习与复现仓库学什么RAG 全流程概览离线索引 / 在线查询离线索引决定“我们能检索到什么”1) 数据采集2) 文档解析与清洗3) 文本切块chunking4) 向量化Embedding5) 向量库 / 索引在线查询决定“怎么回答、能不能稳定回答对”1) Query 改写/扩展步骤级可选2) 检索向量 top-k 实现细节可选BM253) 重排序步骤级可选4) 上下文增强步骤级可选5) Prompt 组装把证据“喂对方式”6) LLM 生成7) 后处理步骤级可选常见问题与对策评估闭环让 RAG 从“能跑”到“可迭代”配套仓库中文学习与复现我把关键技术点整理成一套循序渐进的学习步骤全部以 Jupyter Notebook 形式呈现便于你边跑边调试LangChain 采用较新的1.3.9版本仓库https://github.com/tangpan360/RAG_Techniques_CN仓库学什么基础 RAG 闭环加载/切块/向量化/入库/检索/生成含 CSV/JSON 等数据形态查询与检索增强Query 改写、混合检索、融合检索、重排序等上下文增强header、扩窗、压缩/过滤把证据包整理成更适合模型的上下文可靠性与评估groundedness、相关性过滤、LLM-as-judge 指标与端到端评测高级架构GraphRAG、RAPTOR、Self-RAG、CRAG、MemoRAG 等RAG 全流程概览离线索引 / 在线查询我们可以把 RAG 拆成两条链路离线索引Indexing把知识变成“可检索的向量索引”在线查询Retrieve → Generate把问题变成“带证据的答案”离线阶段通常包含数据采集 → 解析清洗 → 文本切块 → 向量化 → 入库在线阶段通常包含Query →Query 改写可选 → 检索向量 可选 BM25→重排序可选 →上下文增强可选 → Prompt 组装 → LLM 生成 →后处理可选离线索引决定“我们能检索到什么”离线索引的质量直接决定在线回答的上限。1) 数据采集来源可能是 PDF/网页/数据库/CSV/JSON/内部 Wiki 等。关键点是数据要“可更新”并且能追踪到来源后面做引用与评估会用到。2) 文档解析与清洗PDF页眉页脚、分栏、表格、图片 OCR/解析都可能影响后续 chunk 质量网页广告、导航、脚本等噪声要清理结构化数据CSV/JSON要考虑“按行/按对象”还是“按字段拼接”入库经验解析质量不行后面再强的检索/重排都很难救回来。3) 文本切块chunking切块是 RAG 的“地基工程”。你需要权衡chunk 太小语义不完整、召回碎片化chunk 太大噪声多、token 成本高、容易稀释关键信息常见策略固定长度 overlap、语义切块、命题切块、带 header 的 chunk 等。4) 向量化EmbeddingEmbedding 模型决定“语义相似度空间”的质量。要注意语言中英混合/中文为主文本长度与截断策略5) 向量库 / 索引FAISS/Milvus/Chroma/Weaviate 等本质差异在规模、过滤、混合检索、运维成本、索引更新策略。学习阶段用本地轻量方案即可关键是把流程跑通并能迭代。在线查询决定“怎么回答、能不能稳定回答对”在线链路可以视为“证据检索 证据整理 约束生成”。1) Query 改写/扩展步骤级可选当用户问题太短、含糊、口语化、或中英混杂时Query 改写能显著提升召回扩展补全同义词、别名、上下位词纠错拼写/实体纠错统一语言中文问题检英文资料或反过来但它也可能引入偏差所以通常作为“可选增强”在检索差时启用。2) 检索向量 top-k 实现细节可选BM25向量检索擅长语义相似、同义改写BM25可选擅长关键词精确匹配、实体/编号/术语工程里常见组合向量召回 BM25 召回 → 融合例如 union/加权 → 进入重排序。3) 重排序步骤级可选“检索”解决的是“找回来候选”重排序解决的是“候选里谁最相关”。Reranker 常见是 cross-encoder 类模型对 query 与文档对做更精细的相关性判断。什么时候需要重排序top-k 里混入了看似相似但无关的段落你的向量召回质量不稳定你追求更高 precision更少噪声喂给 LLM4) 上下文增强步骤级可选这是很多人最容易忽略、但对效果很关键的一步检索到了文档之后如何把“证据包”整理成最适合 LLM 使用的上下文。常见手段压缩抽取关键句、去冗余、删噪声扩窗命中某个 chunk 后补上前后 chunk保证语义完整header实现细节可选把章节标题/表头/字段名等结构信息带上减少“孤立 chunk”误读一句话总结检索负责“找回来”上下文增强负责“把找回来的证据整理好”。5) Prompt 组装把证据“喂对方式”常见实践system prompt 明确约束只能基于 context 回答不足就说不知道规范输出要点式/结构化字段/带引用控制上下文长度避免 token 爆炸6) LLM 生成模型选择、温度、最大输出长度都会影响稳定性。如果你希望更“可控”可以引入结构化输出JSON schema / Pydantic或分步生成。7) 后处理步骤级可选后处理并不改变“推理能力”但能显著提升“可用性”格式化标题、列表、表格引用标注来源、chunk id、页码安全过滤敏感信息脱敏结果去重、断句、语气统一常见问题与对策答非所问先看 Query 是否需要改写再看检索 top-k 是否相关必要时加 rerank“看起来像引用但其实胡说”prompt 里强约束 上下文增强压缩/过滤 groundedness 检查上下文太长成本高上下文压缩、减少 top-k、chunk 策略优化、扩窗替代大 chunk指标没法量化引入评估闭环correctness/faithfulness/retrieval relevance评估闭环让 RAG 从“能跑”到“可迭代”没有评估你很难判断“是检索的问题还是生成的问题”。一套最小闭环通常包括Correctness答案是否正确相对参考答案Faithfulness / Groundedness是否严格基于检索证据Retrieval relevance检索结果是否与问题相关