RAG 核心知识与面试题
一、RAG 基础原理
什么是 RAG?
RAG(Retrieval-Augmented Generation,检索增强生成)是一种让 LLM 在生成回答前,先从外部知识库检索相关信息的技术。
工作流程
-
用户查询 → 2. Query 向量化 → 3. 向量数据库检索 → 4. 拼接上下文到 Prompt → 5. LLM 生成回答
为什么需要 RAG?
-
减少幻觉:回答基于真实数据,而非模型"编造"
-
知识更新:无需重新训练模型就能访问最新数据
-
领域知识:接入企业内部数据、专业文档
-
成本低:比微调(Fine-tuning)便宜得多
-
可溯源:可以标注信息来源,便于验证
二、RAG 核心组件
1. 文档处理(Document Processing)
-
加载:PDF、Word、网页、数据库等多种数据源
-
分块(Chunking):将长文档切分为适合检索的小块
- 固定大小分块:按字符/token 数切分
- 语义分块:按段落/章节等语义边界切分
- 递归分块:先按大边界分,不够再细分
- 关键参数:
chunk_size(块大小)、chunk_overlap(重叠区)
2. 嵌入(Embedding)
-
将文本转为高维向量,捕捉语义信息
-
常用模型:OpenAI text-embedding-3-small/large、BGE、E5、Jina
-
中文推荐:BGE-zh、M3E、text2vec-chinese
3. 向量存储与检索
-
稀疏检索:BM25(关键词匹配),精确但无语义理解
-
密集检索:向量相似度(余弦/内积),理解语义但可能丢失精确匹配
-
混合检索:结合两者,效果最佳
-
重排序(Reranking):用 Cross-Encoder 对检索结果二次排序
4. 上下文构建与生成
-
将检索到的文档块拼入 Prompt
-
注意 Context Window 限制
-
Prompt 模板设计:指导 LLM 基于给定上下文回答
三、RAG 高级技术
1. Query 改写 / 扩展
-
HyDE:先让 LLM 生成假设性答案,再用该答案做检索
-
Multi-Query:将原始问题改写为多个变体,分别检索后合并
-
Step-back Prompting:先问更抽象的问题,获取背景知识
2. Agentic RAG
-
将 AI Agent 整合到 RAG 管道中
-
Agent 主动决定:是否需要检索、用哪个数据源、检索结果是否足够
-
支持多数据源路由、迭代检索、自我反思
-
vs 传统 RAG:传统 RAG 是"查一次就回答",Agentic RAG 是"边想边查"
3. Graph RAG
-
结合知识图谱,捕捉实体间关系
-
适合需要推理和关系分析的场景
4. Corrective RAG(CRAG)
-
检索后先评估文档相关性
-
不相关→触发 Web 搜索补充
-
有相关→提取关键信息后生成
5. Self-RAG
-
LLM 自己判断是否需要检索
-
生成后自我评估答案质量
-
必要时重新检索
四、RAG vs Fine-tuning
| 维度 | RAG | Fine-tuning |
|---|---|---|
| 成本 | 低(只需向量库) | 高(需要训练) |
| 知识更新 | 实时(更新文档即可) | 需重新训练 |
| 幻觉控制 | 好(有据可查) | 一般 |
| 领域适应 | 通过文档实现 | 通过训练数据实现 |
| 推理能力 | 不增强 | 可增强 |
| 适用场景 | 知识问答、文档搜索 | 风格/格式/推理定制 |
最佳实践:两者结合使用。Fine-tune 提升模型基础能力,RAG 提供实时知识。
五、高频面试题
基础概念
-
什么是 RAG?与直接用 LLM 回答有什么区别?
-
RAG 的端到端管道是怎样的?画出架构图并解释每个组件。
-
RAG 如何减少 LLM 的幻觉?
-
RAG vs Fine-tuning,各自适用场景?何时结合使用?
-
向量数据库在 RAG 中的作用?你用过哪些?
检索优化
-
稀疏检索 vs 密集检索的优缺点?什么是混合检索?
-
Chunking 策略有哪些?chunk_size 和 chunk_overlap 如何设置?
-
如何处理检索到的不相关文档?
-
什么是 Reranking?为什么需要它?
-
如何评估检索质量(Precision@K, Recall@K, MRR, NDCG)?
高级技术
-
什么是 Agentic RAG?与传统 RAG 有何不同?
-
解释 HyDE 的原理和适用场景
-
Multi-Query RAG 如何工作?
-
Graph RAG 解决什么问题?
-
Self-RAG 和 CRAG 的区别?
工程实践
-
生产环境部署 RAG 有哪些挑战(延迟、成本、准确率)?
-
如何评估 RAG 系统的整体性能?有哪些评测框架(RAGAS, TruLens)?
-
如何处理多模态数据(图片、表格)的 RAG?
-
大规模文档库(百万级)如何优化检索性能?
-
RAG 系统的安全性问题(Prompt 注入、数据泄露)如何防范?
六、参考答案要点
Q1: RAG 如何减少幻觉?
-
LLM 回答基于检索到的真实文档,而非纯靠参数记忆
-
Prompt 中明确指示"仅基于以下上下文回答"
-
可以返回来源引用,用户可验证
-
但不能完全消除:检索不准或文档本身有误仍可能产生幻觉
Q6: Chunking 最佳实践
-
chunk_size 通常 256-1024 tokens,取决于文档类型
-
chunk_overlap 通常 10-20%,防止语义断裂
-
代码类文档:按函数/类分块
-
对话类:按轮次分块
-
表格类:保持表格完整性
-
实验调优:不同场景最优参数不同,需要评测验证
Q11: Agentic RAG
-
传统 RAG:Query → 检索 → 生成(一次性)
-
Agentic RAG:Agent 判断→是否检索→选择数据源→评估结果→可能重新检索→最终生成
-
优势:更灵活、更准确、支持复杂多步推理
-
实现:用 LangGraph 构建,Agent 作为路由节点