一句话总结
RAG = 先检索、后生成:把知识库切成块向量化入库,用户提问时检索最相关的几块塞进提示词,让模型"看着资料回答"。它解决三件事:知识时效性(不用重训模型)、私域知识(模型没见过的内部文档)、幻觉抑制(有据可查)。牢记公式:RAG 效果 = 检索质量 × 生成质量,线上问题八成出在检索端。
初级理解
五步流程(面试必背):
为什么不直接问模型?模型知识停在训练截止日、不知道你的内部文档、长上下文塞不下整个知识库。为什么不直接微调?知识天天变,微调周级迭代跟不上且成本高——RAG 换文档就行。两者不互斥(后面选型篇细讲)。
中级深入
分块策略(Chunking)——检索质量的第一决定因素:
- 固定大小 + 重叠(Overlap):最简单,块 300~800 Token、重叠 10%~20%,防止答案被切断
- 按结构切:Markdown 标题、代码块、表格整块保留,不生切
- 语义分块:按句子相似度找语义边界,效果更好成本更高
- 块太小→信息碎片化;块太大→噪声多、命中率降、提示词变贵
混合检索(Hybrid Search):向量检索(语义相似)+ 关键词检索(BM25,精确匹配产品名/型号/代码),结果用 RRF 融合。纯向量检索对专有名词、编号、代码这类精确匹配需求是弱项——这是最常见的线上坑。
重排(Rerank):先粗召回 Top 20~50(向量检索,快而糙),再用 Cross-Encoder 重排模型精排出 Top 3~5(慢而准)喂给模型。粗排保证"不漏",精排保证"不滥"。
高级拓展
检索质量评估(拉开差距的部分):把 RAG 拆开评估,别只看"回答好不好":
- 检索端:命中率(Hit Rate)/ MRR——问题对应的正确块是否被召回、排多前
- 生成端:忠实度(Faithfulness,回答是否忠于资料)、答案相关性
- 工具:RAGAS、TruLens,或自建 LLM-as-Judge 评分 + 人工抽检
进阶优化方向(按投入产出排序):
- 查询改写:口语问题改写成检索友好的表达;多路改写(一个问题生成多个角度)提升召回
- 元数据过滤:块带上部门/时间/文档类型等标签,检索时先过滤再向量搜索——企业场景必备(权限隔离也靠它)
- 引用溯源:回答附带出处编号,用户可点击验证——幻觉治理的实用手段
- Agentic RAG:让模型自主决定"要不要检索、检索什么、够不够再检索",适合复杂多跳问题
知识库工程:文档质量决定上限——脏数据(错乱的 PDF 表格、过期版本)进库就是灾难;要有入库清洗、版本管理、增量更新和失效下线机制。
实战场景
场景一:企业知识库问答(设计题高频)
场景二:用户反馈"答非所问"排查思路
场景三:表格类 PDF 检索效果差
面试模拟
Q:RAG 和微调怎么选?可以同时用吗?
A:看知识变化频率——频繁更新/需要溯源的选 RAG,稳定的领域行为与术语风格用微调。两者正交且常组合:微调让模型"更懂行话和回答规范",RAG 提供"最新事实"。典型组合:领域小模型(微调)+ 私有知识库(RAG)。
Q:为什么我的 RAG 检索不准?最常见原因?
A:按命中率排查:① 分块不当(答案被切断/块太大噪声多);② 只用向量检索,专有名词匹配不上(上混合检索);③ 缺查询改写(口语问题与文档表达差异大);④ 没做重排(Top-K 塞进噪声);⑤ 元数据缺失(时间/权限没过滤)。先建检索评测集量化,再对症下药。
Q:多部门知识库怎么做权限隔离?
A:块级元数据带权限标签(部门/密级/用户组),检索阶段先按用户权限过滤再向量搜索——注意是"检索前过滤"而非"生成后拦截",否则等于泄露。向量库选支持标量过滤的(Milvus/pgvector 都行),性能上过滤后候选不足要做降级策略。审计日志记录"谁在何时查到了什么"。