Skip to content

RAG 进阶与优化

朴素 RAG 在真实场景常常召回不准、答非所问。本文系统梳理「检索前-检索中-检索后」三段优化、高级 RAG 范式与评估方法,是进阶面试的高频深水区。基础流程见 RAG 基础,向量检索原理见 Embedding 与向量库

一、朴素 RAG 的常见问题

  • 召回内容不相关或缺失关键信息;
  • query 与文档表述不一致导致召回失败(语义鸿沟);
  • 切分不当导致上下文断裂;
  • 检索到太多无关内容稀释了有效信息;
  • 多跳问题(需综合多个文档)回答不好;
  • 召回相关但不足以回答。

优化框架:从**检索前(Pre-retrieval)、检索中(Retrieval)、检索后(Post-retrieval)**三个环节切入,对症下药。

二、检索前优化:让 query 更好检索

核心是弥补「用户问法」和「文档写法」之间的语义鸿沟:

  • Query Rewriting / 扩展:用 LLM 改写、澄清、扩展用户问题。
  • HyDE(假设性文档嵌入):先让 LLM 生成一个「假想答案」,再用它去检索——因为答案和文档在语义空间比「问题和文档」更接近。
  • Multi-Query:让 LLM 把一个问题拆成多个子查询,分别检索后合并,提升召回覆盖。
  • Step-back Prompting:先退一步问更抽象的问题,召回背景知识,再回答具体问题。
  • 路由(Routing):多知识库时,先判断该查哪个库/用哪种检索。

三、检索中优化:召回得更准

混合检索(Hybrid Search)★

结合两种检索互补:

  • 稠密检索(向量):擅长语义相似(同义、改写)。
  • 稀疏检索(BM25/关键词):擅长精确匹配专有名词、术语、编号、罕见词。

RRF(Reciprocal Rank Fusion,倒数排名融合) 等方式融合两路结果。当 query 含具体术语/编号时,纯向量常失灵,混合检索是高性价比的救命手段。

其他

  • 元数据过滤:结合时间、来源、标签、权限等结构化条件,缩小检索范围、提精度。
  • 更优的切分父子分块(小块用于精准检索、命中后返回所在大块给 LLM)、按语义/标题层级切分。

四、检索后优化:精排与精炼

  • Rerank(重排)★:用 cross-encoder 对召回的几十条结果精排,只保留最相关的少数 chunk。性价比极高的一步(见 Embedding 与向量库 的 bi/cross-encoder)。
  • 上下文压缩 / 过滤:去掉检索结果中的无关句子,只留与问题相关的内容,节省上下文并减少干扰。
  • 重排位置:把最相关内容放在 prompt 首尾,缓解 lost in the middle

五、高级 RAG 范式

范式思路适合
多路召回 + 融合多种检索器并行召回再融合提升覆盖
Self-RAG模型自行判断是否需检索、结果是否有用、答案是否有依据减少无谓检索、提质
CRAG(纠正式)评估检索质量,差则触发重检索/网搜鲁棒性
GraphRAG构建知识图谱,按实体关系检索跨文档关联、全局总结
Agentic RAG把检索当作 Agent 工具,自主决定何时/检索什么/是否多轮复杂多跳、推理型问题

趋势:从「固定流水线」走向「模型自主决策的 Agentic RAG」——让模型自己判断要不要查、查几次、查完够不够。

六、RAG 评估

分两部分评估(这是面试必答的结构):

  • 检索质量:命中率(Hit Rate)、MRR、召回率、上下文相关性(Context Relevance)、上下文精确率。
  • 生成质量
    • 忠实度(Faithfulness):回答是否忠于检索内容(不编造)。
    • 答案相关性(Answer Relevance):回答是否切题。

常用框架:RAGAS、TruLens,多用 LLM-as-a-Judge 自动评测。建评测集 + 量化指标 + bad case 分析 + 持续迭代 是 RAG 工程化的关键。

七、高频追问

Q:RAG 优化从哪几个环节入手? 检索前(查询改写/HyDE/Multi-Query/路由)、检索中(混合检索/元数据过滤/父子分块)、检索后(Rerank/上下文压缩/重排位置)。先定位问题在检索还是生成,再对症下药。

Q:HyDE 为什么有效? 用户问题和文档的表述差异大(问题 vs 陈述),直接检索易错配;HyDE 先让 LLM 生成一个「假想答案」再去检索,答案和文档同为陈述句、语义更接近,召回更准。即使假想答案有错,其语义方向通常对。

Q:混合检索为什么有用?怎么融合? 稠密向量擅长语义、稀疏 BM25 擅长精确匹配术语/编号,二者互补。用 RRF(倒数排名融合)等把两路排名合并。当 query 含专有名词或编号时尤其关键。

Q:召回率高但回答还是差,问题在哪? 多半在生成环节:上下文过长稀释信息、相关内容位置不佳(lost in middle)、prompt 模板差,或检索内容虽相关但不足以回答(需多跳/补充检索)。

Q:chunk 大小怎么定? 没有银弹,需实验。常见 256~512 token + 10~20% 重叠;可用父子分块兼顾检索精度与上下文完整。

Q:什么是 Agentic RAG? 把检索当作 Agent 可调用的工具,让模型自主决定何时检索、检索什么、是否需要多轮检索、检索够不够再补。适合复杂多跳和推理型问题,是 RAG 与 Agent 的融合趋势。

Q:怎么评估 RAG 系统? 分检索(命中率/MRR/上下文相关性)和生成(忠实度/答案相关性)两部分,用 RAGAS 等 LLM-as-a-Judge 自动评测,并建评测集做 bad case 分析和持续迭代。

Q:GraphRAG 解决什么问题? 朴素 RAG 按片段检索,难处理「需要跨多个文档综合」或「全局总结」的问题。GraphRAG 先抽取实体和关系构建知识图谱,按图结构检索,擅长跨文档关联和宏观总结,代价是构建成本高。

基于 MIT 许可发布