# 别再只会基础RAG流程了!面试必问的RAG全体系知识,从基础到进阶全拆解(附代码+评测)
ai能解决80%的问题,剩下20%呢,看我这里!
前言
现在大模型面试中,RAG已经是必考题,但90%的面试者都踩了同一个坑:被问到RAG,只会机械背诵「文档加载→分块→嵌入→检索→生成」的基础流程,再深问一句就全面卡壳:
- 基础RAG有什么核心缺陷?
- 针对检索不准、幻觉、多跳推理差的问题,有哪些成熟的优化方案?
- CRAG、Agentic RAG、Graph RAG这些方案的核心区别和适用场景是什么?
- 怎么量化评估一个RAG系统的好坏?
这些问题,就是区分「RAG入门者」和「能落地RAG的工程师」的核心门槛,也是面试刷人的关键。本文就从RAG基础出发,一步步深入,全覆盖面试必问的进阶方案、评测体系,附可直接运行的代码,看完就能直接用在面试和项目落地中。
文章目录
-
- 前言
- @[toc]
- 一、RAG基础核心:先把地基打牢,再谈进阶
-
- 二、面试必问的进阶RAG方案全拆解
-
- 三、RAG系统评测体系与RAGAS详解
-
- 四、代码实战:基础RAG实现 + RAGAS评测
-
- 五、面试通关总结
- 结尾
- 下期预告:《RAG 全链路兜底方案全拆解,搞定落地最后一公里》
文章目录
-
- 前言
- @[toc]
- 一、RAG基础核心:先把地基打牢,再谈进阶
- 二、面试必问的进阶RAG方案全拆解
- 三、RAG系统评测体系与RAGAS详解
- 四、代码实战:基础RAG实现 + RAGAS评测
- 五、面试通关总结
- 结尾
- 下期预告:《RAG 全链路兜底方案全拆解,搞定落地最后一公里》
一、RAG基础核心:先把地基打牢,再谈进阶
1.1 RAG的核心定义与解决的痛点
RAG(Retrieval-Augmented Generation,检索增强生成),核心是给大模型外挂一个可动态更新的外部知识库,让大模型生成答案前先检索相关的权威知识,再基于检索结果生成精准回答。
它彻底解决了大模型的4个核心顽疾,也是工业界落地大模型的首选方案:
- 知识滞后:大模型训练数据有截止日期,无法获取实时信息
- 幻觉问题:大模型会编造虚假事实,RAG让所有答案有权威来源可追溯
- 专业知识不足:通用大模型无法覆盖垂直领域的专业知识
- 推理成本高:无需微调大模型,仅更新知识库即可适配新场景,成本极低
面试高频考点:RAG vs 微调,怎么选?
简单记:知识更新频繁、垂直领域问答、需要可解释性选RAG;风格对齐、特定任务性能优化选微调;工业界主流是RAG+微调结合。
1.2 基础RAG全流程拆解(面试必背,更要懂底层逻辑)
基础RAG分为离线索引构建和在线查询生成两大阶段,共5个核心步骤,每一步都有面试考点:
| 步骤 | 核心逻辑 | 面试高频考点 |
|---|---|---|
| 文档加载与预处理 | 加载PDF、Word、网页等多格式文档,清洗文本噪声(多余空格、页眉页脚、乱码等) | 多格式文档的加载方案、非结构化数据的预处理策略 |
| 文本分块(Chunking) | 将长文本拆分为固定/语义粒度的文本块,是RAG效果的核心基础 | 分块粒度怎么选(过短丢失上下文,过长引入噪声)、语义分块vs固定长度分块、分块重叠率设置 |
| 向量嵌入(Embedding) | 用嵌入模型将文本块转换为固定维度的向量,存储到向量数据库中 | 嵌入模型的选型、向量数据库的对比、向量维度对效果的影响 |
| 检索匹配 | 用户查询时,先将问题转换为向量,在向量数据库中匹配相似度最高的Top-K个文本块 | 相似度计算方法(余弦相似度、点积)、检索优化策略(重排、混合检索) |
| 提示词工程与生成 | 将检索到的文本块作为上下文,和用户问题一起拼入提示词,喂给大模型生成忠实于原文的答案 | 提示词模板设计、如何避免检索结果溢出上下文窗口、减少幻觉的提示词技巧 |
1.3 基础RAG的核心局限(所有进阶方案的出发点,面试必问)
基础RAG的线性流水线,在实际落地和复杂场景中,有6个致命缺陷,也是面试官最爱追问的点:
- 检索质量决定生成上限,检索不准直接导致幻觉:仅靠向量相似度匹配,无法处理歧义、多跳问题,容易召回无关内容,遗漏关键信息
- 无反馈闭环,检索错了就一路错到底:不会评估检索结果的质量,不管检索内容对不对,都会硬塞给大模型生成
- 语义割裂,丢失跨文本的关联信息:分块后,文本之间的实体关系、逻辑关联被切断,无法处理需要跨段落、跨文档的全局分析和多跳推理
- 流程僵化,无法处理复杂任务:固定的线性流程,无法自主拆解复杂问题、调用多工具、动态调整策略
- 部署与更新成本高:尤其是大规模知识库,索引重建耗时久,无法支持高频增量更新
- 无量化评估体系:不知道怎么衡量RAG系统的好坏,只能靠人工主观判断
二、面试必问的进阶RAG方案全拆解
针对基础RAG的核心缺陷,业界已经衍生出了成熟的进阶方案,下面按「解决痛点的优先级」逐一拆解,每一个都讲清核心原理、面试考点和适用场景。
2.1 CRAG(Corrective RAG,纠正式RAG)
核心解决痛点
基础RAG「检索结果不评估,错了就硬用」的核心问题,从根源上减少检索错误导致的幻觉。
核心原理与工作流程
CRAG的核心创新是给检索流程加了一个「质检员+纠错官」,不再盲目信任检索结果,而是先评估再分流处理,形成「评估-分流-净化/扩充」的闭环,核心流程如下:
- 初始检索:和基础RAG一致,召回Top-K个文本块
- 检索质量评估:用轻量级评估器,给检索结果的相关性打分,分为三个置信度等级:Correct(正确)、Incorrect(错误)、Ambiguous(模糊)
- 分级纠错策略:
- Correct(正确):执行「分解-过滤-重组」,拆解文本块为细粒度知识点,过滤无关内容,重组为精炼的上下文,减少噪声
- Incorrect(错误):直接丢弃无效的检索结果,启动全网搜索/外部知识源,补充获取相关知识,解决本地知识库覆盖不足的问题
- Ambiguous(模糊):双保险策略,同时使用净化后的本地检索结果+外部搜索补充结果,兼顾覆盖度和准确性
- 生成答案:将处理后的高质量上下文喂给大模型,生成答案
面试考点与核心优势
- 核心优势:零成本兼容基础RAG架构,仅需加一个评估模块,就能大幅降低幻觉,是工业界落地最容易的进阶方案
- 面试必答:CRAG的核心是「动态评估检索质量,根据置信度分级纠错」,彻底解决了基础RAG单点检索失败的风险
- 适用场景:对事实准确性要求极高的场景,如法律问答、金融报告生成、客服系统
2.2 Agentic RAG(智能体RAG)
核心解决痛点
基础RAG「线性流程僵化,无法处理复杂任务、多步推理」的问题,实现从「被动检索」到「主动决策」的范式转变。
核心原理与工作流程
如果说基础RAG是只会机械翻书的考生,Agentic RAG就是拥有独立思考能力的研究员。它将Agent的核心能力(规划、工具调用、反思、记忆)与RAG深度融合,不再是固定的流水线,而是动态决策的闭环架构,核心组件与流程如下:
- 核心架构:由规划器、执行器、反思器、工具集、记忆模块五大核心组件构成,替代了基础RAG的「检索器+生成器」二元结构
- 完整工作流程:
- 任务拆解与规划:用户输入复杂查询后,规划器先理解任务,拆解为多个可执行的子问题,制定检索与执行计划
- 动态工具选择:执行器根据子问题,自主选择适配的工具,不再局限于向量数据库,可调用全网搜索、SQL数据库、API、计算器等
- 多轮信息收集与迭代:根据前一步的结果,动态调整检索策略,比如发现检索结果不足,就重写查询词再次检索;发现信息冲突,就启动验证流程
- 反思与质量校验:反思器验证收集到的信息一致性、答案的准确性,不符合要求就重新执行流程
- 答案合成与输出:将多轮收集的信息整合,生成完整、逻辑严谨的答案
面试考点与核心优势
- 核心优势:彻底突破了基础RAG的线性流程限制,能够处理跨领域、多步骤、高复杂度的任务,是当前RAG技术的主流演进方向
- 面试必答:Agentic RAG和基础RAG的核心区别,是「大模型驱动的动态决策闭环」vs「固定规则的线性流水线」,核心是赋予了RAG自主规划、工具调用、反思迭代的能力
- 适用场景:复杂数据分析、企业级知识库、多源数据整合问答、自动化报告生成
2.3 Graph RAG(图RAG,微软开源)
核心解决痛点
基础RAG「分块导致语义割裂,丢失实体关联,无法处理多跳问答和全局洞察」的问题。
核心原理与工作流程
Graph RAG是微软研究院提出的新一代RAG架构,核心思想是先把文档转换为知识图谱,再让大模型基于图谱做检索和推理,从「查文本块」升级为「按知识关联找答案」,核心分为两大阶段:
- 离线索引构建阶段:
- 文本拆分:将文档拆分为语义连贯的文本单元
- 知识提取:用LLM从文本中提取「实体-关系-属性」三元组,构建知识图谱的节点和边
- 社区发现:用Leiden算法对图谱做层次化聚类,形成主题实体社区,比如把「大模型部署」相关的实体聚为一个社区,「大数据处理」相关的聚为另一个社区
- 多粒度摘要:为每个社区生成结构化摘要,同时对实体、社区、文本块做向量化,构建混合索引
- 在线查询阶段:
- 局部搜索:针对具体事实查询,定位相关实体,遍历子图,召回关联的文本和关系,解决单跳/简单多跳问题
- 全局搜索:针对宏观分析类查询,先筛选相关社区,在每个社区内做检索(Map阶段),再整合所有社区的结果(Reduce阶段),实现跨文档的全局洞察
面试考点与核心优势
- 核心优势:彻底解决了传统RAG的信息割裂问题,具备强大的多跳推理、全局语义理解、跨文档关联分析能力
- 面试必答:Graph RAG的核心是用知识图谱建模文本中的实体与关系,通过社区聚类实现多粒度的语义理解,区别于传统RAG仅做文本块的相似度匹配
- 适用场景:长文档/多文档问答、法律文书分析、财报解读、学术论文研究、企业知识管理
2.4 LightRAG(轻量级图RAG)
核心解决痛点
Graph RAG「索引构建成本高、更新慢、token消耗大、部署门槛高」的问题,在保留图RAG推理能力的同时,实现极致轻量化。
核心原理与核心优化
LightRAG的核心定位是**「低成本、高效率的Graph RAG替代方案」**,针对Graph RAG的痛点做了三大核心优化:
- 轻量化图索引构建:摒弃了Graph RAG笨重的社区报告生成流程,设计了基于键值对的图增强文本索引,仅用轻量级策略提取实体和关系,索引时间大幅缩短
- 双层级检索机制:分为「低层级实体关系检索」和「高层级主题概念检索」,先通过向量检索快速定位相关实体,再通过图遍历探索关联关系,兼顾检索效率和推理能力
- 增量更新机制:新增文档时,无需重建整个索引,仅需对新文档构建子图谱,再和原有图谱合并,更新耗时减少50%以上,token成本仅为Graph RAG的1/6000
面试考点与核心优势
- 核心优势:在保留Graph RAG全局推理能力的同时,大幅降低了计算成本和部署门槛,兼顾效果、效率和成本
- 面试必答:LightRAG是Graph RAG的轻量化优化方案,核心解决了Graph RAG落地难、成本高的问题,通过轻量化图索引、双层检索、增量更新三大优化,实现了工业级的落地能力
- 适用场景:中小规模知识库、资源受限的部署环境、需要高频更新知识库的场景、端侧RAG应用
2.5 LinearRAG(LineaRAG,ICLR 2026新作)
核心解决痛点
Graph RAG「依赖LLM做关系抽取,容易引入噪声、生成垃圾图谱,成本高、扩展性差」的核心问题,彻底摒弃了显式关系抽取。
核心原理与工作流程
LinearRAG的核心创新是**「无关系抽取的图RAG」**,既然关系抽取是噪声的万恶之源,那就干脆不抽关系,只用实体当桥梁,把句子、段落连成图,靠语义传播和全局排序做检索,核心分为两部分:
- Tri-Graph三层图构建(零LLM token消耗):
- 仅用轻量级NER工具(如spaCy)提取实体,构建三层节点:实体节点、句子节点、段落节点
- 边的规则极简:实体出现在某句子/段落中,就建立连接,最终形成句子-实体、段落-实体两个稀疏矩阵
- 图谱内存占用和语料库大小呈线性关系,索引时间比Graph RAG减少77%以上
- 两阶段线性检索:
- 阶段1:相关实体激活,通过局部语义桥接,从查询相关的初始实体出发,在句子层传播语义相似度,激活多跳相关的实体
- 阶段2:全局重要性聚合,在激活的子图上用个性化PageRank(PPR)算法,计算段落的全局相关性,最终召回最相关的文本块
面试考点与核心优势
- 核心优势:彻底规避了关系抽取的噪声和成本,同时保留了图RAG的多跳推理能力,性能和效率双登顶,是当前图RAG的最新最优解
- 面试必答:LinearRAG的核心是「无关系抽取的线性图结构」,用实体作为语义桥梁,解决了传统Graph RAG的噪声问题,同时实现了线性扩展,适配大规模语料库
- 适用场景:大规模知识库、对检索延迟要求高的场景、多跳问答、垂直领域专业知识库
2.6 HippoRAG(HipoRAG,类人脑记忆机制RAG)
核心解决痛点
基础RAG「多跳推理效率低,需要多轮迭代检索,成本高、速度慢」的问题,模拟人脑海马体的记忆机制,实现单步多跳推理。
核心原理与工作流程
HippoRAG的核心灵感来自人脑的记忆机制,把LLM类比为大脑新皮层,知识图谱+PPR算法类比为海马体,模仿人类的记忆编码和检索流程,核心分为两大阶段:
- 离线索引(记忆编码):用LLM将文本语料转换为无模式知识图谱,模拟人脑海马体的记忆索引功能,记录实体、段落之间的关联关系
- 在线检索(记忆唤起):
- 提取用户查询中的关键实体,作为「种子节点」链接到图谱中
- 用个性化PageRank(PPR)算法,以种子节点为起点做随机游走,计算图中所有节点的相关性分数
- 通过线性映射,将节点权重转换为段落的相关性分数,融合向量检索结果,最终召回相关段落
- 单步即可完成跨段落、跨文档的多跳推理,无需多轮迭代检索
面试考点与核心优势
- 核心优势:单步实现高效多跳推理,在多跳问答基准测试中,性能比传统RAG提升3-20个百分点,在线检索成本比迭代方法低10-30倍,速度快6-13倍
- 面试必答:HippoRAG的核心是模拟人脑海马体的记忆机制,通过知识图谱+PPR算法,实现了单步多跳推理,解决了传统多跳检索成本高、速度慢的问题
- 适用场景:多跳问答、复杂知识推理、大规模知识库检索、学术文献问答
三、RAG系统评测体系与RAGAS详解
面试中90%的人都答不上来的问题:怎么量化评估一个RAG系统的好坏? 只会说「人工看答案准不准」,直接就会被面试官pass。这一部分,就讲清RAG评测的核心维度,以及工业界最主流的评测框架RAGAS。
3.1 RAG评测的两大核心维度
RAG系统的效果,由「检索环节」和「生成环节」共同决定,缺一不可:检索是基础,召回不了正确的信息,生成必然出错;生成是核心,就算检索到了正确信息,大模型也可能不用、瞎用,导致幻觉。
3.1.1 检索环节核心指标(衡量「找得准不准、全不全」)
| 指标 | 核心定义 | 理想值 | 面试考点 |
|---|---|---|---|
| Context Recall(上下文召回率) | 检索到的上下文,包含了多少回答问题所需的关键信息 | ≥0.9 | 召回率低,说明该捞的关键信息没捞到,直接导致答案缺漏 |
| Context Precision(上下文精确率) | 检索到的文档中,有多少是和问题真正相关的 | ≥0.8 | 精确率低,说明检索结果里噪声太多,会误导大模型生成幻觉 |
| MRR(平均倒数排名) | 最相关的文档,有没有被排到最前面 | 越接近1越好 | 召回率高但正确答案排到了后面,大模型依然抓不到重点 |
| NDCG(归一化折损累积增益) | 综合衡量检索的召回率和排序质量,信息检索领域的金标准 | 越接近1越好 | 调试检索策略,看NDCG的涨幅比单看Recall更靠谱 |
3.1.2 生成环节核心指标(衡量「答得对不对、好不好」)
| 指标 | 核心定义 | 理想值 | 面试考点 |
|---|---|---|---|
| Faithfulness(忠实度) | 生成的答案,有多少内容是严格来自检索上下文的,有没有编造信息 | ≥0.9 | 核心衡量幻觉的指标,忠实度越低,幻觉越严重 |
| Answer Relevancy(答案相关性) | 生成的答案,有没有精准回答用户的问题,有没有答非所问 | ≥0.8 | 衡量答案的切题程度,避免检索到了正确信息,但大模型没答到点子上 |
| Correctness(答案正确性) | 生成的答案,事实层面是否准确,是否完整覆盖了问题所需的关键信息 | 越接近1越好 | 综合衡量答案的质量 |
3.2 RAGAS框架详解(工业界主流RAG评测框架)
RAGAS是专门为RAG系统设计的开源评测框架,它无需大量人工标注的数据集,仅用LLM就能自动完成上述核心指标的评测,是工业界落地RAG评测的首选方案。
RAGAS核心评测指标
RAGAS的核心指标,完全覆盖了检索和生成两大环节,和我们上面讲的一一对应:
- 检索端:Context Precision、Context Recall
- 生成端:Faithfulness、Answer Relevancy
- 扩展指标:支持自定义评测维度,比如答案简洁性、专业深度、语气合规性等
四、代码实战:基础RAG实现 + RAGAS评测
下面提供两段可直接运行的代码,一段是极简基础RAG的实现,一段是RAGAS评测的代码,基于LangChain和RAGAS,开箱即用。
4.1 极简基础RAG实现(LangChain)
# 安装依赖
# pip install langchain langchain-openai faiss-cpu python-dotenv
import os
from dotenv import load_dotenv
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# 加载环境变量(API KEY)
load_dotenv()
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
os.environ["OPENAI_BASE_URL"] = os.getenv("OPENAI_BASE_URL")
# 1. 文档加载与分块
loader = TextLoader("your_document.txt", encoding="utf-8")
documents = loader.load()
# 文本分块:递归字符分块,兼顾语义完整性
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
separators=["\n\n", "\n", "。", "!", "?", " ", ""]
)
splits = text_splitter.split_documents(documents)
# 2. 构建向量数据库
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = FAISS.from_documents(documents=splits, embedding=embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
# 3. 提示词模板设计
prompt = ChatPromptTemplate.from_template("""
你是一个专业的问答助手,必须严格基于下面的上下文回答用户的问题,禁止编造上下文里没有的信息。
如果上下文里没有相关信息,直接回答:"抱歉,我没有找到相关的信息,无法回答这个问题。"
上下文:
{context}
用户问题:{question}
""")
# 4. 构建RAG链
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
# 5. 测试问答
if __name__ == "__main__":
question = "请输入你的问题"
response = rag_chain.invoke(question)
print(f"问题:{question}")
print(f"答案:{response}")
4.2 RAGAS评测代码
# 安装依赖
# pip install ragas datasets
from datasets import Dataset
from ragas import evaluate
from ragas.metrics import (
faithfulness,
answer_relevancy,
context_recall,
context_precision,
)
# 1. 准备测试数据集
# 说明:question是用户问题,answer是RAG系统生成的答案,contexts是检索到的上下文,ground_truth是标准答案
data = {
"question": [
"RAG的核心作用是什么?",
"CRAG和基础RAG的核心区别是什么?"
],
"answer": [
"RAG的核心作用是给大模型外挂外部知识库,解决大模型的幻觉、知识滞后、专业知识不足等问题",
"CRAG在基础RAG的基础上,增加了检索质量评估和纠错机制,会根据检索结果的置信度做分级处理,解决了基础RAG检索错误导致的幻觉问题"
],
"contexts": [
[
"RAG(检索增强生成),核心是给大模型外挂一个可动态更新的外部知识库,解决大模型的知识滞后、幻觉、专业知识不足、可解释性差的核心问题"
],
[
"CRAG(纠正式RAG),核心是给检索流程加了质检员和纠错官,先评估检索结果的质量,分为正确、错误、模糊三个等级,再做分级处理,解决了基础RAG检索错误导致的幻觉问题"
]
],
"ground_truth": [
"RAG的核心是给大模型外挂可动态更新的外部知识库,解决大模型的知识滞后、幻觉、专业知识不足、可解释性差的问题,无需微调大模型即可适配新场景",
"CRAG和基础RAG的核心区别是,CRAG增加了检索质量评估和分级纠错闭环,不再盲目使用检索结果,会根据置信度做净化、替换、补充处理,从根源上减少检索错误导致的幻觉"
]
}
# 转换为Dataset格式
dataset = Dataset.from_dict(data)
# 2. 执行评测
result = evaluate(
dataset = dataset,
metrics = [
context_precision,
context_recall,
faithfulness,
answer_relevancy,
],
)
# 3. 输出评测结果
df = result.to_pandas()
print("评测详细结果:")
print(df)
print("\n平均指标得分:")
print(result)
五、面试通关总结
看完本文,你已经完全覆盖了RAG面试的全考点,再也不会只会背基础流程了,核心考点总结如下:
- 基础层:吃透RAG的核心价值、全流程每一步的逻辑、和微调的区别、基础RAG的核心局限
- 进阶层:能清晰讲出CRAG、Agentic RAG、Graph RAG等6大进阶方案的「解决的痛点、核心原理、适用场景」,这是面试拉开差距的核心
- 评测层:能完整说出RAG评测的两大维度、核心指标,以及RAGAS框架的使用,这是区分「demo选手」和「能落地的工程师」的关键
- 落地层:能根据不同的业务场景,选择合适的RAG方案,比如简单场景用基础RAG+CRAG,复杂多跳场景用Graph RAG/LinearRAG,低成本部署用LightRAG
ai能解决80%的问题,剩下20%呢,看我这里!
结尾
本文全覆盖了RAG从基础到进阶的全体系知识,面试考点全部标红,代码可直接运行。如果有任何问题,欢迎在评论区留言,我会一一解答。关注我,持续分享大模型落地、RAG实战、AI面试的硬核干货!
下期预告:《RAG 全链路兜底方案全拆解,搞定落地最后一公里》
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)