RAG 的原理和优化思路?

2026年 阅读约 9 分钟 面试指南 · AI面试

AI开发面试题:RAG检索增强生成,五步流程、分块策略、Embedding检索与重排、混合检索、评估指标、企业知识库实战与检索不准排查,分三层讲解。

一句话总结

RAG = 先检索、后生成:把知识库切成块向量化入库,用户提问时检索最相关的几块塞进提示词,让模型"看着资料回答"。它解决三件事:知识时效性(不用重训模型)、私域知识(模型没见过的内部文档)、幻觉抑制(有据可查)。牢记公式:RAG 效果 = 检索质量 × 生成质量,线上问题八成出在检索端。

初级理解

五步流程(面试必背):

① 加载:PDF/Word/网页/数据库 → 纯文本 ② 分块:长文档切成合适大小的 Chunk ③ 向量化:每个 Chunk 用 Embedding 模型变成向量入库 ④ 检索:用户问题也向量化,找最相近的 Top-K 块 ⑤ 生成:问题 + 检索到的资料 → 组装提示词 → 模型回答

为什么不直接问模型?模型知识停在训练截止日、不知道你的内部文档、长上下文塞不下整个知识库。为什么不直接微调?知识天天变,微调周级迭代跟不上且成本高——RAG 换文档就行。两者不互斥(后面选型篇细讲)。

一句话理解:开卷考试——RAG 给模型发"参考资料",而不是指望它把书背下来(微调)。

中级深入

分块策略(Chunking)——检索质量的第一决定因素:

  • 固定大小 + 重叠(Overlap):最简单,块 300~800 Token、重叠 10%~20%,防止答案被切断
  • 按结构切:Markdown 标题、代码块、表格整块保留,不生切
  • 语义分块:按句子相似度找语义边界,效果更好成本更高
  • 块太小→信息碎片化;块太大→噪声多、命中率降、提示词变贵

混合检索(Hybrid Search):向量检索(语义相似)+ 关键词检索(BM25,精确匹配产品名/型号/代码),结果用 RRF 融合。纯向量检索对专有名词、编号、代码这类精确匹配需求是弱项——这是最常见的线上坑。

重排(Rerank):先粗召回 Top 20~50(向量检索,快而糙),再用 Cross-Encoder 重排模型精排出 Top 3~5(慢而准)喂给模型。粗排保证"不漏",精排保证"不滥"。

注意:Top-K 不是越大越好——塞太多无关块,噪声误导模型且 Token 成本翻倍;经验值 3~5 块 + 重排。

高级拓展

检索质量评估(拉开差距的部分):把 RAG 拆开评估,别只看"回答好不好":

  • 检索端:命中率(Hit Rate)/ MRR——问题对应的正确块是否被召回、排多前
  • 生成端:忠实度(Faithfulness,回答是否忠于资料)、答案相关性
  • 工具:RAGAS、TruLens,或自建 LLM-as-Judge 评分 + 人工抽检

进阶优化方向(按投入产出排序):

  • 查询改写:口语问题改写成检索友好的表达;多路改写(一个问题生成多个角度)提升召回
  • 元数据过滤:块带上部门/时间/文档类型等标签,检索时先过滤再向量搜索——企业场景必备(权限隔离也靠它)
  • 引用溯源:回答附带出处编号,用户可点击验证——幻觉治理的实用手段
  • Agentic RAG:让模型自主决定"要不要检索、检索什么、够不够再检索",适合复杂多跳问题

知识库工程:文档质量决定上限——脏数据(错乱的 PDF 表格、过期版本)进库就是灾难;要有入库清洗、版本管理、增量更新和失效下线机制。

实战场景

场景一:企业知识库问答(设计题高频)

架构:文档接入层(解析+清洗+元数据) → 向量库(pgvector/Milvus)+ 关键词索引(ES) 检索层:查询改写 → 混合检索 Top20 → 权限过滤 → Rerank Top5 生成层:提示词强制"仅基于资料回答 + 标注引用" 评估层:RAGAS 指标 + 周度人工抽检 + 坏例回流优化

场景二:用户反馈"答非所问"排查思路

1. 先看检索日志:正确块有没有被召回? 没召回 → 分块问题/Embedding 不适配/该用关键词检索 召回了但排后面 → Rerank 缺失或查询改写不到位 2. 召回了但答错 → 提示词问题(未强调"仅基于资料")或块内信息冲突 3. 都正常但用户不满意 → 评测集口径问题,找真实坏例标注

场景三:表格类 PDF 检索效果差

// 传统解析把表格拆成乱码文本 // 方案:表格单独抽取转 Markdown/结构化数据 // 或对表格页做"表格描述生成"(用多模态模型生成摘要文本入库) // 查询时按"文档类型=表格"过滤优先命中

面试模拟

Q:RAG 和微调怎么选?可以同时用吗?

A:看知识变化频率——频繁更新/需要溯源的选 RAG,稳定的领域行为与术语风格用微调。两者正交且常组合:微调让模型"更懂行话和回答规范",RAG 提供"最新事实"。典型组合:领域小模型(微调)+ 私有知识库(RAG)。

Q:为什么我的 RAG 检索不准?最常见原因?

A:按命中率排查:① 分块不当(答案被切断/块太大噪声多);② 只用向量检索,专有名词匹配不上(上混合检索);③ 缺查询改写(口语问题与文档表达差异大);④ 没做重排(Top-K 塞进噪声);⑤ 元数据缺失(时间/权限没过滤)。先建检索评测集量化,再对症下药。

Q:多部门知识库怎么做权限隔离?

A:块级元数据带权限标签(部门/密级/用户组),检索阶段先按用户权限过滤再向量搜索——注意是"检索前过滤"而非"生成后拦截",否则等于泄露。向量库选支持标量过滤的(Milvus/pgvector 都行),性能上过滤后候选不足要做降级策略。审计日志记录"谁在何时查到了什么"。