RAG 工程深入:从分块到混合检索的完整链路(附 15 道高频题)

📅 2026/6/26 15:35:34
RAG 工程深入:从分块到混合检索的完整链路(附 15 道高频题)
基础 RAG 是「文档切块 → Embedding → 向量检索 → LLM 生成」。但生产级 RAG 远不止这四步——分块策略、混合检索、Rerank、查询改写、防幻觉、知识库维护每一环都决定最终效果。这篇按工程链路整理 Day03 核心知识点文末附 15 道面试速答。一、为什么要分块四种策略怎么选RAG 必须切分文档原因有三上下文窗口限制长文本有 Lost in the Middle 问题中间内容容易被模型忽略检索精度不切分只能命中整篇文档无法定位到具体段落Embedding 质量短文本语义更聚焦长文本编码会被过度压缩策略做法优点缺点适用固定长度按字符/token 硬切简单快速可能断语义快速原型分隔符按段落/句号切保留语义边界块大小不均Markdown 文档递归字符分隔符优先级逐级降级兼顾大小与语义—工程默认语义边界相邻句相似度跌破阈值处切效果最好成本高高质量 RAG递归字符分块LangChainRecursiveCharacterTextSplitter的「递归」不是递归函数而是分隔符列表\n\n → \n → 空格 → 字符逐级降级。参数经验值- FAQ/问答chunk_size 128~384 tokens- 通用文档512~768 tokens- 长文档/论文1024~1536 tokens- overlapchunk_size 的 10%~15%防止边界信息丢失- 硬约束不能超过 Embedding 模型最大输入长度如 bge-large-zh 最大 512 tokens二、Embedding 模型怎么选选型看四个维度维度要点语言中文用 BGE-Large-ZH英文用 text-embedding-3-small混合用 BGE-M3维度768~1024 是性价比最优区间超 1536 边际递减速度看参数量3M~568M小模型快、大模型准MTEB看 Retrieval / STS 子任务得分不是只看总分BGE-M3 三个 MMulti-Lingual多语言、Multi-Functionality稠密稀疏多向量、Multi-Granularity句子到长文档。注意Embedding 模型没有 temperature 等生成参数是「文本进、向量出」的固定权重模型。三、向量数据库选型方案定位适合Milvus云原生分布式专用向量库HNSW/IVF/DiskANN千万~亿级生产环境Chroma轻量嵌入式pip install 即用原型验证FAISSMeta 算法库不是数据库无 CRUD研究/底层引擎Elasticsearch搜索引擎 向量插件已有 ES 集群做混合检索Milvus 三种部署Lite嵌入式/ Standalone单机服务/ DistributedK8s 集群。向量库 vs 传统库互补不替代向量库传统库索引HNSW/IVF 近邻图B 树查询相似度搜索近似精确匹配事务无 ACID有 ACID返回Top-K 近似精确结果高维空间有维度灾难——所有点距离趋于相同B 树无法排序HNSW 用建图绕开。四、混合检索向量 BM25 RRF单用向量或 BM25 都有盲区向量检索擅长语义「汽车」→「车辆」但对精确术语ConcurrentHashMap、型号不敏感BM25擅长精确匹配但无法理解同义词「心梗」搜不到「心肌梗死」RRF倒数排名融合是最主流融合策略RRF(d) Σ 1/(k rank_i(d))输入是排名不是分数向量余弦和 BM25 分数量纲不同k60 是 Google 论文经验值零调参文档只在一路出现时另一路 rank∞贡献为 0完整检索链路Query → 向量 Top-20 BM25 Top-20 → RRF 融合 → Cross-Encoder Rerank → Top-5 → LLM五、Rerank为什么用 Cross-Encoder双塔模型Bi-EncoderQuery 和 Document 各自独立编码算余弦相似度速度快可预计算但没有交互Top-K 有噪声。Cross-Encoder把 Query 和 Document 文本拼接[CLS] Query [SEP] Document [SEP]Self-Attention 逐词交互直接输出相关性分数精度高但不能预计算。为什么不对全部文档 Rerank百万文档每个都要拼接算一次不可接受。先用双塔粗筛到 20 个再 batch 精排GPU 上几百毫秒可接受。推荐模型bge-reranker-v2-m3开源中英双语Cross-Encoder 架构。六、查询改写Pre-Retrieval解决用户口语化表达与文档书面化表达之间的语义鸿沟方法做法优点缺点LLM 改写大模型重写规范查询语义理解深延迟高同义词扩展词典/知识图谱替换零延迟维护成本高HyDELLM 生成假设文档用假答案检索真答案对齐文档分布空间延迟最高HyDE 反直觉但有效用户 Query 在「问题区」知识库文档在「陈述区」。LLM 编一个像文档的假答案向量距离更近。容忍幻觉——只需要「像」不需要「对」。假设文档仅用于检索不参与最终生成。Advanced RAG 四阶段Pre-Retrieval查询改写→ Retrieval混合检索→ Post-RetrievalRRF Rerank→ Generation防幻觉。七、RAG 幻觉怎么处理三个来源1. 检索噪音chunk 含错误/过时信息2. 过度推理LLM 脑补缺失环节3. 指令遵循失败忽略约束吐出预训练旧知五种手段相似度阈值过滤低于阈值返回「未找到」不强行生成交叉认证多路检索 矛盾 chunk 排序Chunk 粒度优化语义分割 / 父子索引约束型 Prompt「只基于以下材料回答」 引用标注[chunk_id]后置校验NLI 模型 / LLM-as-Judge / 引用一致性检查核心原则不确定就说不知道。八、GraphRAG vs 传统 RAG传统 RAG 三个局限1.无法多跳推理答案分散在不同文档向量检索串不成逻辑链2.缺乏结构感知向量空间扁平无法表达层级拓扑3.聚合统计无能结构化计算做不了GraphRAG 流程1. LLM 抽取三元组实体-关系-实体2. 入库图数据库Neo4j3. Leiden 社区发现算法分层聚类LLM 生成社区摘要4. 查询时图遍历做关系推理 向量召回兜底缺点构建成本高、维护难、三元组抽取可能有错。九、知识库维护方面做法增量更新MD5/SHA-256 哈希对比变了才重新 Embedding先写新再删旧删除处理软删除is_deletedtrue定期物理清理超 30 天的版本管理chunk_id version支持回滚TTL 过期写expire_at查询时过滤Milvus 不支持自动 TTL需应用层 cron十、Query 路由RAG 作为 Agent 工具时单一检索策略无法应对多样意图。路由解决三个问题万金油检索样样不通、重链路成本高、无关上下文污染 LLM。意图识别三级递进工程最佳实践1. 规则匹配零延迟拦截高频2. Embedding 相似度预定义示例 Query 算余弦3. LLM 分类兜底复杂场景路由分发意图链路知识问答RAG向量 BM25代码问题代码搜索语法树 符号索引关系推理GraphRAG闲聊直接 LLM不检索不确定fallback 默认 RAG十一、为什么要向量化直接文本匹配不行吗文本匹配BM25/LIKE无语义理解「汽车」搜不到「车辆」。向量化通过 Embedding 编码语义向量理解同义词、近义词、跨语言。但有三代价计算成本高、不可解释、精确术语不敏感。最佳方案是混合检索——向量补语义BM25 补精确正交互补不是二选一。附录15 道 RAG 工程高频面试速答Q1. 文档分块策略固定/分隔符/递归字符/语义边界工程默认 RecursiveCharacterTextSplitterchunk_size 512overlap 50。Q2. chunk_size 怎么选FAQ 128~384通用 512~768长文档 1024~1536overlap 10~15%太大检索精度降太小语义不完整。Q3. Embedding 怎么选语言维度(768~1024)速度MTEB中文 BGE-Large-ZH混合 BGE-M3。Q4. 向量库对比Milvus 生产级Chroma 原型FAISS 算法库ES 混合检索Milvus 有 Lite/Standalone/Distributed。Q5. 向量库 vs 传统库HNSW vs B树相似度 vs 精确无ACID vs 有ACIDTop-K近似 vs 精确互补不替代。Q6. 混合检索向量补语义BM25补精确RRF融合Σ 1/(60rank)k60零调参。Q7. Rerank 原理双塔无交互有噪声Cross-Encoder拼接文本逐词交互混合Top-20→Rerank→Top-5。Q8. RRF 公式RRF(d)Σ 1/(krank_i(d))输入排名不是分数k60防赢家通吃。Q9. 查询改写Pre-RetrievalLLM改写/同义词/HyDEHyDE用假设文档检索容忍幻觉。Q10. 幻觉处理阈值过滤交叉认证Chunk优化约束Prompt后置校验(NLI/Judge/引用检查)。Q11. 相似度计算余弦(方向,RAG用)、欧氏(绝对距离,聚类用)、点积(方向模长,推荐用)归一化后点积余弦。Q12. GraphRAG vs RAG传统RAG无法多跳/无结构/无聚合GraphRAG用三元组Leiden社区图遍历。Q13. 知识库维护哈希增量更新软删除版本管理TTLMilvus无自动TTL需应用层实现。Q14. Query路由规则→Embedding→LLM三级意图识别知识→RAG代码→搜索关系→GraphRAG闲聊→LLM。Q15. 为什么向量化文本匹配无语义向量化理解同义词但有成本最佳是混合检索。写在最后生产级 RAG 的核心不是「接个向量库就完事」而是全链路工程化分块参数、Embedding 选型、混合检索 RRF Rerank、查询改写、防幻觉、知识库维护——每一环都有明确的 trade-off 和调优方法。把这条链路讲清楚比背单个概念更有面试竞争力。