← 知识整理
AI 技术与工程 / 知识整理 · 中文

LLM 面试 / RAG 检索增强生成完整专题

LLM 面试中 RAG (Retrieval-Augmented Generation) 检索增强生成的 14 份专题 PDF 全集。涵盖 RAG 基础(为什么需要外挂知识库 / R/A/G 三模块)+ langchain RAG 实战 + 大模型外挂知识库 + RAG 经验面 + PDF 解析 + 表格识别 + 文本分块 + 大模型辅助召回(HYDE)+ 负难样本挖掘 + RAG 评测 + RAG 优化策略 + RAG 关键痛点 + RAG-Fusion + Graph RAG + 多轮对话长期记忆 8 种优化

资料来源:大语言模型学习 · 本站发布:2026-09-26

RAG检索评测知识库

LLM 面试中 RAG 板块的所有题型与答案。来源:AiGC 面试宝典,共 16 份 RAG 相关 PDF。


一、RAG 基础(为什么 / 什么是 / 三模块)

为什么需要外挂(向量)知识库

直接方法 问题
微调 成本高 / 需训练时间 / 通用能力下降(灾难遗忘)
In-Context Learning 上下文长度受限 / 多文档处理困难
RAG (外挂知识库) ✅ 检索 + 生成,灵活 + 低成本 + 易更新

RAG 三模块

模块 作用
R - Retriever 检索 把外部知识源转化为向量,根据 query 检索相关文档
A - Augment 增强 把检索结果与用户 query 拼接成新 prompt
G - Generator 生成 大模型基于增强 prompt 生成最终答案

RAG 工作流程

1. 知识库构建:文档 → 切分 chunk → embedding → 向量库
2. 用户提问:Query → embedding
3. 检索:向量相似度搜索 Top-K chunk
4. 增强:Query + 检索 chunk → 新 Prompt
5. 生成:LLM 基于新 Prompt 生成答案

LangChain RAG 实战范本

详见 file_13 — 用百度百科"藜麦"数据 + LangChain 框架,实现简单 RAG 问答应用。


二、PDF 解析关键问题(file_16)

为什么需要 PDF 解析?

ChatPDF / ChatDoc 等用 LLM 实现文档助手时,PDF 文本提取困难(尤其复杂排版 / 多列 / 表格)。

PDF 解析的难点

难点 案例
多列布局 学术论文双栏
嵌入图表 财报中的表格图
字符编码异常 自定义字体不可逆
扫描图 PDF 无文本层,需 OCR
文档结构信息丢失 标题层级 / 段落归属

PDF 解析方案

  1. pdfplumber / pdftotext (poppler) — 简单文本
  2. PaddleOCR / Tesseract — 扫描图 OCR
  3. Layout Parser / Donut — 版面分析
  4. GPT-4 Vision — 多模态直接看 PDF

三、版面分析(file_17 表格 + file_18 文本分块)

表格识别任务

为什么需要识别表格? — 财报 / 论文中的数据多在表里,直接 OCR 失序。

表格识别方法:

方法 特点
规则法 检测水平/垂直线
基于 CNN 检测表格区域 + 单元格
基于 Transformer(TableNet) 端到端表格解析
GPT-4V 视觉直接读

文本分块(Chunking)

为什么需要分块? — Embedding 模型有 token 长度限制 + LLM 上下文有限。

常见分块方法:

方法 思路
固定长度切分 按 token / character
按句子切分 spaCy / NLTK / langchain RecursiveCharacterTextSplitter
按段落切分 \n\n 分隔
语义切分 用 embedding 相似度判断切点
结构切分 按文档标题层级

最佳实践:

  • chunk_size: 256-1024 token
  • chunk_overlap: chunk_size 的 10-20%
  • 中文比英文 chunk_size 略小

四、检索增强(召回优化)

file_19:HYDE — 假设性文档嵌入

问题:用户 query 短 + 抽象 → 检索难。

HYDE 思路:

  1. 让 LLM 先针对 query 生成一篇"假设答案文档"
  2. 用该假设文档的 embedding 作为检索 query
  3. 检索得到真实文档作为最终上下文

优势:假设文档语义更接近真实答案,召回率高。

file_20:负难样本挖掘

为什么需要构建负难样本? — 简单负样本(随机)训练后,模型对"看似相关但实际无关"的内容无判别力。

负难样本构建方法:

策略 思路
Random Sampling 简单随机
Hard Negative Mining 模型当前最易混淆的样本
In-Batch Negatives batch 内非自身
Cross-Batch Negatives 跨 batch
Bi-encoder + Cross-encoder Distillation 用 cross-encoder 蒸馏 bi-encoder

五、RAG 优化策略(file_22 + file_23)

RAG 各模块的优化点

模块 优化策略
数据预处理 清洗 / 去重 / 元数据增强
chunk 切分粒度 / 重叠 / 父子 chunk
embedding 模型选择(中文 BGE / m3e)/ 微调
检索 Top-K / 多路召回 / 重排(Rerank)
增强 Prompt 模板 / context 压缩
生成 模型选择 / 温度 / 长度

RAG 关键痛点(file_23,6 大问题及解决方案)

痛点 解决
内容缺失 完善知识库 / 增加来源
错过排名靠前文档 多路召回 + Rerank
整合后丢失内容 上下文压缩用 LLM 而非截断
上下文限制 Long Context model / Map-Reduce
格式错误 显式 Prompt + 输出验证
答案不完整 Step-back Prompting / 多轮迭代

六、RAG 评测(file_21)

为什么需要评测 RAG?

  • 大模型黑盒,需要量化判断改进
  • A/B 比较不同 RAG 方案

如何合成 RAG 测试集?

方法 思路
人工标注 人工写问题 + 标准答案
GPT-4 合成 给文档 → 让 GPT-4 出问题和答案
公开数据集 NaturalQuestions / TriviaQA

RAG 评测方法

方面 指标
检索质量 Recall@K / MRR / NDCG
答案质量 BLEU / ROUGE / BERTScore(自动)/ 人工评分
整体 RAGAS 框架(faithfulness / answer_relevancy / context_precision / context_recall)

七、RAG-Fusion(file_24)

为什么需要 RAG-Fusion?

普通 RAG 局限:

  • 单 query 召回的 top-K 可能不全
  • 用户问题模糊时召回偏

RAG-Fusion 思路

1. 用 LLM 把原 query 改写出 N 个不同表达
2. 每个 query 单独召回 top-K
3. 用 RRF (Reciprocal Rank Fusion) 合并结果
4. Rerank + 最终给 LLM

优势:

  • 召回率提升(多查询覆盖更广)
  • 对用户问题模糊鲁棒

八、Graph RAG(file_25)

为什么需要 Graph RAG?

普通 RAG 局限:只能捕获局部上下文,无法回答需要全局推理的问题(如"X 和 Y 是什么关系?")。

Graph RAG 思路

1. 用 LLM 从文档中抽取实体 + 关系 → 构建知识图谱
2. 用户问题先做实体识别 / 关系查询
3. 通过图遍历得到相关子图
4. 子图 + 上下文给 LLM 生成

典型场景:

  • 多跳问答(需要 2-3 步推理)
  • 全局摘要(整本书核心实体关系)
  • 复杂查询("和 X 合作过的所有公司在 2023 后的财务表现")

九、多轮对话长期记忆(file_12)

多轮对话挑战

  • 用户问题依赖前文(代词 / 省略)
  • 上下文太长会超出 LLM context window

8 种长期记忆优化方式

方式 思路
1. 全量历史对话 简单但贵 + 受 context 限制
2. 滑动窗口 只保留最近 N 轮
3. 摘要总结 用 LLM 把旧对话压缩
4. 实体记忆 提取关键实体作短期记忆
5. 知识图谱记忆 构建对话 KG
6. 向量记忆(LongTerm Memory) 把对话存向量库 + 检索相关历史
7. 缓存记忆 LRU 缓存常用上下文
8. 混合记忆 短期(全文)+ 长期(向量)结合

实战推荐:LangChain ConversationSummaryBufferMemory(摘要+滑窗混合)。


十、LangChain RAG 实战(file_13)

实战步骤(以百度百科"藜麦"数据为例)

from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# 1. 加载文档
loader = TextLoader("liwheat.txt")
docs = loader.load()

# 2. 分块
splitter = RecursiveCharacterTextSplitter(
    chunk_size=500, chunk_overlap=100
)
chunks = splitter.split_documents(docs)

# 3. 向量化 + 存库
embeddings = OpenAIEmbeddings()
db = Chroma.from_documents(chunks, embeddings)

# 4. 构建 RAG Chain
qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    retriever=db.as_retriever(search_kwargs={"k": 3}),
    chain_type="stuff"
)

# 5. 问答
answer = qa.run("藜麦有哪些营养价值?")

十一、LangChain 基础(file_11)

LangChain 是什么

  • 一个强大的框架,旨在帮助开发人员使用语言模型构建端到端应用
  • 提供工具 / 组件 / 接口,简化创建由 LLM 提供支持的应用
  • 可以管理与语言模型的交互,将多个组件链接 + 集成额外资源(API / 数据库)

LangChain 核心组件

组件 作用
Models 抽象不同 LLM(OpenAI / Anthropic / 本地)的统一接口
Prompts 模板化 prompt 管理
Chains 多步骤组合(LLM + 工具 + ...)
Agents 让 LLM 决定调用什么工具
Memory 维护对话历史
Indexes 文档加载 / 切分 / 向量化
Retrievers 检索接口
Output Parsers 把 LLM 输出转结构化数据

See also

高频考点优先级

  1. 🔥🔥🔥 RAG 三模块 + 工作流程 — 必考
  2. 🔥🔥🔥 RAG 关键痛点 6 大类 — 实战题
  3. 🔥🔥 文本分块策略 + chunk_size 经验值
  4. 🔥🔥 HYDE 假设性文档(进阶)
  5. 🔥🔥 RAG-Fusion + RRF
  6. 🔥 Graph RAG(差异化优势)
  7. 🔥 RAGAS 评测框架
  8. 🔥 多轮对话 8 种记忆方式