RAG 核心知识与面试题

一、RAG 基础原理

什么是 RAG?

RAG(Retrieval-Augmented Generation,检索增强生成)是一种让 LLM 在生成回答前,先从外部知识库检索相关信息的技术。

工作流程

  1. 用户查询 → 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 提供实时知识。


五、高频面试题

基础概念

  1. 什么是 RAG?与直接用 LLM 回答有什么区别?

  2. RAG 的端到端管道是怎样的?画出架构图并解释每个组件。

  3. RAG 如何减少 LLM 的幻觉?

  4. RAG vs Fine-tuning,各自适用场景?何时结合使用?

  5. 向量数据库在 RAG 中的作用?你用过哪些?

检索优化

  1. 稀疏检索 vs 密集检索的优缺点?什么是混合检索?

  2. Chunking 策略有哪些?chunk_size 和 chunk_overlap 如何设置?

  3. 如何处理检索到的不相关文档?

  4. 什么是 Reranking?为什么需要它?

  5. 如何评估检索质量(Precision@K, Recall@K, MRR, NDCG)?

高级技术

  1. 什么是 Agentic RAG?与传统 RAG 有何不同?

  2. 解释 HyDE 的原理和适用场景

  3. Multi-Query RAG 如何工作?

  4. Graph RAG 解决什么问题?

  5. Self-RAG 和 CRAG 的区别?

工程实践

  1. 生产环境部署 RAG 有哪些挑战(延迟、成本、准确率)?

  2. 如何评估 RAG 系统的整体性能?有哪些评测框架(RAGAS, TruLens)?

  3. 如何处理多模态数据(图片、表格)的 RAG?

  4. 大规模文档库(百万级)如何优化检索性能?

  5. 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 作为路由节点