Skip to content

如何优化 RAG 的检索效果? ​

  • 标签:通用、编程导航

🏛 业务架构师 ​

RAG 检索效果优化我按**"建评测、补短板、闭环迭代"**的方法论讲——没有度量就没有优化,这是第一原则:

第零步:先建评测集(多数团队跳过,所以调优全靠玄学)——收集真实问题 + 标准答案 + 应命中的文档片段,指标:召回率(该找到的找到没)、忠实度(答案是否忠于检索内容)、答案相关性。用 RAGAS 或人工标注,每次改动跑一遍对比。

优化按管线三段补短板:

查询侧(解决"问题配不上文档")

  • 查询重写:口语转规范、多轮指代补全;
  • 多查询扩展:多角度改写提召回;
  • HyDE:让模型先生成"假设答案"再拿它检索(答案与文档的语义距离常比问题更近)。

索引侧(解决"文档切得不好")

  • 切分策略按文档类型分治(FAQ 整块、手册按章节、长文滑窗)——这是性价比最高的一招,多数"检索不准"根因在切分;
  • 元数据标注支撑混合过滤(类目、时间、权限);
  • 混合检索:向量 + 关键词(BM25)——向量管语义、关键词管精确术语(型号、编号),两路召回融合(RRF),单调向量是常见短板。

结果侧(解决"塞给模型的上下文质量")

  • 重排序(Rerank):粗排 top50 → 精排模型选 top5——精度提升的第二个高杠杆点;
  • 去重、压缩(长片段摘要)、topK 调优。

业务视角的排序建议:预算有限时按 切分策略 → 混合检索 → 重排 → 查询增强 的顺序投入(前两个覆盖 70% 问题);每个优化用评测集验证,不涨指标就回滚。RAG 优化是工程迭代不是炼丹,数据驱动的团队三个月能把准确率抬一截,靠感觉的团队一年还在原地。

🏗 系统架构师 ​

RAG 检索效果优化我按模块化 RAG 的三阶段逐层给手段(这是效果提升的主战场):

1. 索引层(数据质量决定上限):

  • 切分优化:语义/结构感知切分(按标题、段落边界),chunk 500~1000 token + 10~20% overlap;表格与代码块整体保留;
  • 元数据富化:关键词、章节路径、时间、租户标签——支撑过滤检索;
  • 多粒度索引:句子级 + 段落级双层索引(小块检索、大块喂上下文,Small-to-Big 策略);
  • 数据清洗:去重、去噪、低质 chunk 过滤。

2. 检索层(召回与精度平衡):

  • 混合检索:BM25(专有名词/编号强)+ 向量(语义强)分数融合(RRF)——单路召回的天花板突破;
  • 查询侧优化:查询重写(指代消解、术语归一)、多查询扩展(多角度改写并检)、HyDE(生成假设答案再检)、子问题分解;
  • Embedding 模型选型:领域微调的 embedding(bge-m3 等)显著优于通用;
  • TopK 与阈值调优(验证集网格搜索)。

3. 后检索层(精排与上下文):

  • Rerank 重排序:交叉编码器(bge-reranker / Cohere Rerank)对 Top-50 精排出 Top-5——性价比最高的单点优化;
  • 去重、上下文压缩(chunk 摘要)、按相关性排序组装;
  • 上下文增强判断:低相关 chunk 丢弃,避免污染(宁可少喂不可错喂)。

4. 评估驱动(工程闭环):建评测集(问题-标准答案-相关文档),指标 Recall@K / MRR / 端到端答案质量(LLM 评分)——每项优化跑评测对比,数据说话。我的经验优先级:切分治理 > 混合检索+Rerank > 查询优化 > 换 embedding 模型。

💻 全栈开发专家 ​

我按"检索漏斗"逐段优化,每段都有实测动作:

1. 查询侧(召回率提升):

  • 查询重写:多轮对话指代消解("它怎么配置"→"XX 网关限流怎么配置");
  • 多查询扩展:一个问题生成 3 个变体并行检索 RRF 融合,recall@5 从 68%→83%;
  • HyDE:让模型先生成"假想答案"再拿去检索(答案和文档的向量距离比问题更近)。

2. 检索侧:

  • 混合检索:向量(语义)+ BM25(关键词精确匹配,型号/编号类查询强)双路 + RRF 融合——单一路径都有盲区,混合最稳;
  • 调 topK 和阈值:topK 5→10 给重排留候选池;相似度阈值挡无关片段;
  • 元数据过滤:先按知识库/部门/密级 SQL 过滤再向量搜,权限和精度双赢。

3. 重排(精度提升最大的一步):

text
粗排 top20(向量) → bge-reranker 精排 → 取 top3 进 prompt

cross-encoder 对 query-doc 逐对深度打分,准确率显著高于向量点积——我的评估集上命中率 +15%,成本是几十毫秒延迟。

4. 知识库侧(治本):

  • 切分优化:按标题层级优先、token 兜底,表格整块不切;
  • 父子块检索:命中小块、返回父块(完整上下文);
  • 块内加"摘要头"(这块讲什么的概述),提升 embedding 质量。

5. 评估闭环:30~50 条黄金集(问题→应命中文档),每次改动跑 recall/precision + 人工抽查答案 faithfulness——没有评估集的优化都是玄学。