LLM-RAG(大厂面试常问问题)

目录

  • [1. RAG 是什么?为什么需要 RAG?](#1. RAG 是什么?为什么需要 RAG?)
    • [LLM 的三大知识缺陷](#LLM 的三大知识缺陷)
    • [RAG 的核心思路](#RAG 的核心思路)
  • [2. RAG 的完整链路是怎样的?](#2. RAG 的完整链路是怎样的?)
  • [3. 向量检索的原理是什么?](#3. 向量检索的原理是什么?)
  • [4. 向量数据库怎么选?Milvus、FAISS、Qdrant 各自适合什么场景?](#4. 向量数据库怎么选?Milvus、FAISS、Qdrant 各自适合什么场景?)
  • [5. 纯向量检索有什么问题?为什么需要混合检索?](#5. 纯向量检索有什么问题?为什么需要混合检索?)
  • [6. Rerank 是什么?为什么混合检索之后还要重排序?](#6. Rerank 是什么?为什么混合检索之后还要重排序?)
  • [7. Chunk 怎么切?切大了切小了各有什么问题?](#7. Chunk 怎么切?切大了切小了各有什么问题?)
  • [8. Embedding 模型怎么选?中文场景选什么?](#8. Embedding 模型怎么选?中文场景选什么?)
  • [9. RAG 的幻觉怎么处理?](#9. RAG 的幻觉怎么处理?)
  • [10. RAG 检索效果不好怎么优化?](#10. RAG 检索效果不好怎么优化?)
  • [11. Agentic RAG 是什么?和普通 RAG 有什么区别?](#11. Agentic RAG 是什么?和普通 RAG 有什么区别?)
  • [12. 大厂真实面试追问汇总](#12. 大厂真实面试追问汇总)

面试官都会问:
"你做过 RAG 吗?检索策略怎么设计的?"
向量检索和关键词检索什么区别?
混合检索为什么比纯向量好?Rerank 到底解决什么问题?
Chunk 怎么切才能不丢信息?幻觉怎么处理?

RAG 是什么?为什么需要 RAG?

RAG 的完整链路是怎样的?

向量检索的原理是什么?

向量数据库怎么选?Milvus、FAISS、Qdrant 各自适合什么场景?

纯向量检索有什么问题?为什么需要混合检索?

Rerank 是什么?为什么检索之后还要重排序?

Chunk 怎么切?切大了切小了各有什么问题?

Embedding 模型怎么选?中文场景选什么?

RAG 的幻觉怎么处理?

RAG 检索效果不好怎么优化?

Agentic RAG 是什么?和普通 RAG 有什么区别?

1. RAG 是什么?为什么需要 RAG?

面试官一般这么问:"为什么不让 LLM 直接回答,非要用 RAG?"或者"LLM 的知识截止问题你怎么解决?"

LLM 的三大知识缺陷

知识截止------训练数据有截止日期,昨天发生的事它不知道。你问它"2026年3月发布的 XX 框架有什么特性",它要么瞎编要么说不知道。

私有数据无法触达------公司的内部文档、客户数据、业务规则,这些 LLM 从来没见过,直接问就是胡说。

容易幻觉------当 LLM 不确定但又想回答时,它会编造看似合理但完全错误的信息。这个问题在没有外部知识验证时尤其严重。

RAG 的核心思路

RAG(Retrieval-Augmented Generation,检索增强生成)的本质就一句话:在 LLM 生成回答之前,先从外部知识库检索相关信息,把检索结果塞进 Prompt,让 LLM 基于事实回答。

没有 RAG:用户问题 → LLM → 回答(可能幻觉)

有 RAG:用户问题 → 检索相关知识 → 问题 + 检索结果 → LLM → 回答(基于事实)

面试核心点:RAG 不是替代 LLM,是给 LLM 补充外部知识。LLM 负责理解和生成,RAG 负责提供事实依据。

2. RAG 的完整链路是怎样的?

面试官会问:"你说你做过 RAG 项目,能完整讲一下从用户提问到最终回答的链路吗?"

这是基础中的基础,但很多人讲不清楚。

RAG 七步链路

Query → 文档处理 → Chunking → Embedding → 检索 → Rerank → 生成

每一步做什么:

面试答法:不要只背这七个步骤,要说清楚每一步的关键决策点。面试官想听的不是"我用了 Milvus",而是"我为什么选 Milvus 不选 FAISS,检索延迟要求多少,为什么 Top-K 设 5 不是 10"。

query

文档处理

PDF/Word/Markdown 解析,提取文本

怎么答:

PDF 分两种------数字 PDF 直接提取文字,扫描版需要 OCR(如 Tesseract、PaddleOCR)。表格建议转成 Markdown 或 HTML 格式保留结构,纯文字提取会丢失行列关系。

Chunking(切块)

把长文档切成小块

怎么答:

固定长度切割简单但会截断语义;按句子/段落切割语义更完整。实际常用固定长度 + overlap(重叠),overlap 一般设 10%~20%,防止关键信息被切在两块之间。块大小通常 256~512 token,太大检索不精准,太小丢失上下文。

Embedding(向量化)

把文本块转成向量

怎么答:

中文场景推荐用专门训练过中文的模型,比如 bge-large-zh(智源)或 text-embedding-ada-002(OpenAI)。维度一般 768~1536,维度越高表达能力越强但存储开销越大。

检索

根据问题找最相关的文本块

怎么答:

纯向量检索(语义相似)速度快但可能漏掉关键词精确匹配;BM25 是传统关键词检索。实际生产中常用混合检索(向量 + BM25),两者互补。Top-K 一般取 5~10,再交给 Rerank 精筛。

Rerank(重排序)

对检索结果重新打分排序

怎么答:

检索阶段追求召回率(宁可多不漏),Rerank 追求精准率。常用模型如 bge-reranker,对 query 和每个候选块做交叉注意力打分,比向量相似度更精准。Rerank 后取 Top-3~5 喂给 LLM。

生成

把检索结果 + 问题一起给 LLM 生成回答

怎么答:

Prompt 模板通常是:根据以下资料回答问题,如果资料中没有答案请说不知道,不要编造。资料:{context} 问题:{question}。关键是明确告诉 LLM 不要超出资料范围,这是约束幻觉最直接的方式。

一句话串起来(面试开头可以这么说)

"RAG 的流程是:先把文档解析切块、转成向量存进向量库;用户提问时,把问题也转成向量去检索最相关的块,经过 Rerank 精排后,把结果和问题一起拼进 Prompt 让 LLM 生成答案。"

3. 向量检索的原理是什么?

面试官会问:"向量检索和关键词检索有什么区别?"以及"Embedding 的原理是什么?为什么语义相似的文本向量距离近?"

向量检索的本质

把文本转换成高维空间中的点,语义相似的文本在这个空间里距离近。检索就是找离问题向量最近的几个文档向量。

举个例子:

"如何优化数据库查询" → 0.12, -0.34, 0.56, ... ← 这些向量在空间中距离很近

"数据库性能调优方法" → 0.11, -0.32, 0.55, ...

"今天天气不错" → -0.45, 0.78, -0.23, ... ← 和上面距离远

相似度计算

最常用的是余弦相似度,计算两个向量的夹角余弦值:

cos(A, B) = (A · B) / (|A| × |B|)

值域 -1, 1,越大越相似。1 表示方向完全相同,0 表示无关,-1 表示方向相反。

为什么不用欧氏距离? 因为向量的模长受文本长度影响,长文本的向量模长大,但语义不一定更相关。余弦相似度只看方向不看长度,对语义检索更合适。

ANN 检索(近似最近邻)

文档量大了(百万级以上),逐个计算相似度太慢。ANN 的思路是:不要求找到绝对最近的,找到足够近的就行,换速度。

主流 ANN 算法:

面试加分:能说出 HNSW 的核心参数 ef_construction(建图时搜索宽度,越大图质量越高但建图越慢)和 M(每个节点的邻居数,越大图越密但内存越大),面试官就知道你真调过。

Milvus----向量数据库

比如RAG中:

文本块 → Embedding → 0.12, 0.87, -0.33, ...

存入 Milvus

用户提问也转成向量 → Milvus 找最相似的块 → 返回结果

4. 向量数据库怎么选?Milvus、FAISS、Qdrant 各自适合什么场景?

面试官会问:"你们项目用的什么向量数据库?为什么选它?"

面试答法:先说你的选型理由,再提你知道其他方案的优缺点。比如:"我们选 Milvus,因为生产环境需要多副本部署和持久化,FAISS 不支持分布式,Qdrant 当时生态还不够成熟。如果是做 Demo 我会用 FAISS,快。"

5. 纯向量检索有什么问题?为什么需要混合检索?

面试官会问:"你们项目用的纯向量检索还是混合检索?为什么?"这是 RAG 面试的高频考点。

纯向量检索的三个致命问题

精确匹配不行------用户搜"RFC 7231",向量检索可能返回"HTTP 协议规范"这种语义相关但没提到 RFC 7231 的文档。因为它靠语义相似度,不是精确匹配。

专业术语召回差------"K8s 的 HPA 怎么配置",向量检索可能找的是"Kubernetes 自动扩缩容",而真正包含 HPA 配置细节的文档反而排不上。专业术语的向量表示和口语描述的向量表示距离可能很远。

专有名词遗漏------产品名、人名、缩写这些,向量检索容易丢失。

混合检索 = 向量检索 + 关键词检索

混合检索同时跑两路:

RAG 里常用混合检索:同时用两种方法检索:

  • 向量检索:语义相似,找"意思接近"的
  • BM25 关键词检索:关键词匹配,找"词语相同"的

混合检索+RRF合并流程

合并策略:RRF(Reciprocal Rank Fusion)

  • RRF 的核心思想:在多个列表里都排名靠前的文档,最终分数最高.
  • Reciprocal Rank = 排名的倒数,排名越靠前,倒数越大,分数越高。这正是 RRF 的核心逻辑。

最常用的合并方法,公式很简单:

python 复制代码
RRF_score(d) = Σ 1 / (k + rank_i(d))

k 通常设 60,rank_i(d) 是文档 d 在第 i 路检索中的排名。排名越靠前,贡献分数越高。

python 复制代码
def rrf_merge(vector_results, bm25_results, k=60):
    scores = {}
    for rank, doc in enumerate(vector_results):
        scores[doc.id] = scores.get(doc.id, 0) + 1 / (k + rank + 1)
    for rank, doc in enumerate(bm25_results):
        scores[doc.id] = scores.get(doc.id, 0) + 1 / (k + rank + 1)
    return sorted(scores.items(), key=lambda x: x[1], reverse=True)

面试核心点:能说清楚纯向量检索的三个问题,以及混合检索为什么能解决,合并策略用 RRF。这就是面试官想听的深度。

6. Rerank 是什么?为什么混合检索之后还要重排序?

面试官会问:"你已经用混合检索了,为什么还要 Rerank?检索结果不够好吗?"

检索和 Rerank 的区别

  • 检索是粗筛------从百万文档里快速捞出 Top-20,速度快但精度有限。用向量相似度或 BM25 打分,这种打分是近似的,不一定反映真实相关性。

  • Rerank 是精排------对 Top-20 重新计算相关性分数,用更精确的模型(通常是 Cross-Encoder)逐个打分,把真正最相关的排到前面。

为什么检索的打分不够准?

向量检索用的是 Bi-Encoder:问题和文档分别编码成向量,再算相似度。问题和文档在编码时互不知道对方的存在,所以只能算"大概相关"。

Rerank 用的是 Cross-Encoder:把问题和文档拼在一起送进模型,模型可以同时看到双方内容,做更精确的相关性判断。代价是慢------Cross-Encoder 不能预计算,每个 (问题, 文档) 对都要过一遍模型,所以只能对少量候选做精排。

Rerank 的效果

实际项目中,Rerank 带来的提升很明显:

准确率:找到的里面有多少是对的------找得不准

召回率:所有该找的里面找到了多少------找得不全

RAG 里检索阶段追求高召回率(全,宁可多拿不漏),Rerank 阶段追求高准确率(准,精选最相关的几条)。

常用 Rerank 模型

面试答法:"检索是粗筛快捞,Rerank 是精排提准。检索用 Bi-Encoder 快但粗,Rerank 用 Cross-Encoder 慢但准。先用检索从百万级捞 Top-20,再用 Rerank 精排取 Top-5,这是生产环境的标配流程。"

7. Chunk 怎么切?切大了切小了各有什么问题?

面试官会问:"你们 Chunk 策略怎么设计的?chunk size 设的多少?为什么?"

这是面试官判断你"是跑过 Demo 还是真做过 RAG"的关键题。

切大了什么问题?

信息稀释------一个 chunk 里塞了太多内容,检索时真正相关的那部分被其他无关内容淹没,导致相似度分数降低,排名靠后。

切小了什么问题?

上下文丢失------一个完整的论述被切成碎片,检索出来的是断章取义的片段,LLM 拿到后无法理解完整含义,生成质量下降。

三种主流 Chunk 策略

固定长度切分------最简单,每 512 token 切一块。优点是简单,缺点是不管语义边界,可能把一句话切两半。

递归切分------按段落→句子→字符的优先级递归切分,尽量在自然边界处切断。这是生产环境最常用的方案。

python 复制代码
from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=200,  # 相邻 chunk 重叠 200 字符
    separators=["\n\n", "\n", "。", "!", "?", ";", ",", " ", ""]
)

语义切分------用 Embedding 计算相邻句子的语义相似度,在语义断点处切分。理论上最好,但计算量大,生产环境用得少。

overlap 的作用

相邻 chunk 之间重叠一部分文字,避免关键信息正好在切割点上被截断。overlap 通常设 chunk_size 的 10%-20%。

不同文档类型分别怎么处理?

面试核心点:能说清楚 chunk 大小的权衡(大→信息稀释,小→上下文丢失),以及 overlap 的作用。最好能举出你实际调参的经历,比如"chunk_size 从 1000 降到 500,召回率提升了 15%"。

8. Embedding 模型怎么选?中文场景选什么?

面试官会问:"你们用的什么 Embedding 模型?为什么选它?和 OpenAI 的 ada-002 对比过吗?"

选型维度

选 Embedding 模型看三个维度:语言支持、向量维度、检索效果(MTEB 排名)。

中文场景主流模型:

维度越高越好吗?

不是。维度高→表达能力强但存储和检索成本也高。1024 维是当前性价比最好的选择,3072 维的检索效果提升有限但存储翻 3 倍。

面试答法:"中文场景选 bge-large-zh,因为 MTEB 中文榜单排名靠前,而且开源可以本地部署,不用走 API。如果是英文场景或对延迟不敏感,OpenAI 的 embedding 更方便。"·

9. RAG 的幻觉怎么处理?

面试官会问:"RAG 检索到了正确信息,LLM 还是编造了不存在的内容,怎么办?"

幻觉是 RAG 项目最大的工程挑战,面试官必问。

幻觉的两种类型

① 内在幻觉------检索结果里有正确信息,但 LLM 生成的内容和检索结果矛盾。比如检索说"准确率 91%",LLM 说"准确率 95%"。

② 外在幻觉------LLM 生成了检索结果里根本没有的内容。检索只提到了 A,LLM 自己编了 B。

六种幻觉处理策略

1、Prompt 约束------在 Prompt 里明确要求"只能基于检索结果回答,检索结果没有的信息不要编造"。

2、输出自校验------LLM 生成回答后,再用一次 LLM 检查:回答的每一条是否都能在检索结果中找到依据?找不到的标注为"未验证"。

VERIFICATION_PROMPT = """

请检查以下回答是否每一条都能在参考资料中找到依据。

对于每条声明,标注:✅ 有依据 / ❌ 无依据 / ⚠️ 部分依据

回答:{answer}

参考资料:{context}

"""

3、引用标注------要求 LLM 在回答时标注每条信息的来源 chunk,方便人工核查。

4、温度调低------temperature 设 0.1-0.3,降低 LLM 的随机性,减少"编造"的倾向。

5、检索结果和生成结果的对齐------生成回答后,把回答和检索结果做相似度对比,如果回答中有大段内容和所有检索结果都不相关,大概率是幻觉。

6、兜底回答------当检索结果的相似度都低于阈值时,直接回答"未找到相关信息",而不是让 LLM 硬编。

面试核心点:不要只说"用了 Prompt 约束",要说出你用了几种策略组合,以及效果如何。比如"Prompt 约束 + 输出自校验 + 温度调低,幻觉率从 30% 降到了 12%"。

10. RAG 检索效果不好怎么优化?

面试官会问:"你们 RAG 项目的检索准确率是多少?效果不好的时候你怎么优化的?"

这是考察工程经验的关键题。没有标准答案,但优化思路要说清楚。

优化思路:从链路的每一步找问题

文档处理阶段------PDF 表格提取准确率够不够?图片里的文字有没有 OCR?不同格式(PDF/Word/Markdown)分别做了什么适配?

Chunk 阶段------chunk_size 合不合理?有没有针对不同文档类型调参?overlap 设的多少?

检索阶段------纯向量还是混合检索?Top-K 设多少?有没有加 Rerank?

生成阶段------Prompt 怎么写的?幻觉怎么处理的?

四种高级优化策略

① Query 改写------用户的问题可能表述不清或太短,先用 LLM 改写成更适合检索的 query。

原始问题:怎么调优?

改写后:RAG 系统中向量检索准确率低,有哪些优化方法?

② 多路召回------同一问题用多种方式检索:原问题检索、改写问题检索、提取关键词检索、拆分子问题检索,最后合并结果。

③ Parent-Child 检索------检索时用小 chunk(精确匹配),返回时用大 chunk(保留上下文)。具体做法:小 chunk 存向量索引用于检索,每个小 chunk 关联一个父 chunk,检索命中后返回父 chunk 的完整内容。

④ 上下文窗口扩展------检索到一个 chunk 后,把它前后的 chunk 也带上,保证上下文完整。

面试加分:能说出你实际用过的优化策略和量化效果。比如"加了 Rerank 后 Top-5 召回率从 71% 提到 89%""混合检索比纯向量检索在专业术语场景下准确率提升了 25%"。

11. Agentic RAG 是什么?和普通 RAG 有什么区别?

面试官会问:"你了解 Agentic RAG 吗?它和普通 RAG 有什么区别?"

普通 RAG 的局限

普通 RAG 是固定流程:用户问 → 检索一次 → 生成回答。如果第一次检索结果不好,它不会自己纠正,直接硬生成。就像一个不会反思的人,说错就错到底。

Agentic RAG:让 RAG 自己决定怎么检索

Agentic RAG 把 Agent 的规划能力引入 RAG------LLM 自己判断:需要检索哪些数据源?检索结果够不够?不够就换个角度再检索。

Agentic RAG循环流程

Agentic RAG 的工作流程

用户问题 → Agent 规划:这个问题需要检索什么?

→ 第一次检索 → 结果不够?

→ Agent 判断:换个 query 再检索

→ 第二次检索 → 结果够了?

→ Agent 判断:够了,生成回答

面试核心点:Agentic RAG 适合复杂知识问答场景(法律、医疗、金融),简单问答用普通 RAG 就够了,别过度设计。能说出这个判断,面试官就知道你有工程判断力。

12. 大厂真实面试追问汇总

检索策略类

Q:你们的混合检索权重怎么调的?向量检索和 BM25 各占多少?

两种常见做法:一是手动调权重(向量 0.7 + BM25 0.3),在验证集上试出最佳比例;二是用 RRF 合并,不设权重,靠排名融合,更稳健。生产环境推荐 RRF,因为不同 query 的最佳权重差异很大,固定权重不一定好。

Q:Top-K 设多少?设大了设小了各有什么问题?

设小了(K=3):可能漏掉相关文档,召回不够。设大了(K=20):太多无关信息干扰 LLM,增加幻觉风险和 Token 消耗。通常 K=5-10 是比较好的平衡点,加了 Rerank 之后可以先用 K=20 检索再 Rerank 取 Top-5。

Q:如果用户的问题很模糊,检索效果差,怎么办?

Query 改写:用 LLM 把模糊问题改写成更具体的检索 query。多路召回:同时用原始 query、改写 query、提取关键词分别检索再合并。追问确认:如果太模糊,Agent 可以先追问用户澄清需求。

工程落地类

Q:RAG 系统的端到端延迟怎么优化?

优化链路:vLLM 部署推理服务(减少 LLM 推理延迟)、KV Cache 复用(相似问题不重复计算)、流式输出(用户不用等全部生成完)、Prompt 压缩(减少 Token 数降低延迟)、HNSW 索引优化(向量检索延迟压到 50ms 以下)。

Q:文档更新了,向量索引怎么更新?

三种策略:全量重建(简单但慢,适合日级更新)、增量更新(只重新 embed 变更的文档,适合实时更新)、双写(新文档同时写旧索引和新索引,切换时零停机)。

Q:RAG 的 Token 成本怎么控制?

Prompt 压缩:裁剪检索结果中的冗余内容、上下文窗口管理:只保留当前问题相关的历史、模型路由:简单问题用小模型,复杂问题才用大模型、缓存:相同或相似问题的检索结果缓存复用。

场景设计类

Q:设计一个面向 10 万用户的 RAG 知识库系统,你会怎么设计?

从五个维度展开:数据层(文档解析→Chunk→Embedding→向量库 + ES 双写)、检索层(混合检索 + Rerank,Top-20 检索 + Top-5 精排)、生成层(vLLM 部署 + Prompt 模板 + 幻觉约束)、工程层(Redis 缓存热点查询、异步处理文档更新、监控检索准确率和幻觉率)、安全层(文档权限隔离、Prompt Injection 防御、敏感信息过滤)。

写在最后

RAG 已经是大模型方向面试的必考项了。字节、阿里、百度、腾讯的面试官,不会只问你"做过 RAG 吗",他们会追问"检索策略怎么设计的""混合检索为什么比纯向量好""Rerank 解决什么问题""幻觉怎么处理的"。

基础层:RAG 是什么、为什么需要、完整链路七步走

检索层:向量检索原理、混合检索策略、Rerank 重排序、Chunk 切分、Embedding 选型

优化层:幻觉处理六种策略、检索效果优化四招、Agentic RAG 进阶

工程层:延迟优化、成本控制、索引更新、系统设计

这些知识点不是孤立的,面试时要把它们串起来。面试官问"你们 RAG 怎么做的",你不能只说"用了 Milvus + LangChain",要从检索策略设计、Chunk 参数调优、混合检索 + Rerank、幻觉处理、延迟优化五个维度展开,才能拿到高分。

相关推荐
不负岁月无痕1 小时前
C++继承与多态知识点及其高频面试问题
开发语言·c++·面试
洛水水2 小时前
【力扣100题】84.字符串解码
算法·leetcode·职场和发展
嵌入式ZYXC2 小时前
第9篇:《面试题:ADC前端为什么要加运放跟随器?什么情况下可以不加?》
stm32·单片机·嵌入式硬件·面试·职场和发展
Haodukeji2 小时前
2026年上海墙面投影互动品牌新趋势,科技与艺术的完美融合
面试
洛水水2 小时前
【力扣100题】90.寻找重复数
算法·leetcode·职场和发展
天真小巫3 小时前
会话跟踪技术
职场和发展
折哥的程序人生 · 物流技术专研11 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
程序员二叉12 小时前
【Java】 异常高频面试题精讲 | 易错点+对比总结
java·开发语言·面试
想吃火锅100513 小时前
【leetcode】14.最长公共前缀js
算法·leetcode·职场和发展