AI应用开发面试题精讲(二):RAG检索增强生成实战15问

AI应用开发面试题精讲(二):RAG检索增强生成实战15问

AI应用开发面试题精讲(二):RAG检索增强生成实战15问

文章目录

  • AI应用开发面试题精讲(二):RAG检索增强生成实战15问
    • 前言
    • 一、文档处理与切分
      • 1. 文档切分策略有哪些?Chunk大小怎么选?
      • 2. PDF文档中的表格和图片怎么处理?
      • 3. 重叠窗口是什么?为什么需要?
    • 二、Embedding与检索
      • 4. Embedding模型怎么选?微调Embedding值得吗?
      • 5. 稠密检索和稀疏检索有什么区别?为什么要混合?
      • 6. 重排器是什么?为什么需要?怎么选?
      • 7. MMR是什么?什么时候用?
    • 三、RAG进阶
      • 8. 查询改写是什么?有哪些方法?
      • 9. RAG vs 微调,怎么选?
      • 10. RAG系统怎么评估?有哪些指标?
    • 四、生产落地
      • 11. RAG系统架构怎么设计?分层吗?
      • 12. 知识库更新怎么做?增量还是全量?
      • 13. RAG响应延迟怎么优化?
      • 14. RAG失败怎么兜底?
      • 15. 从0到1搭建RAG系统,你会怎么规划?
    • 总结

前言

RAG是AI应用落地最核心的技术架构。面试中RAG相关问题通常从"你做过RAG吗"开始,一路深挖到切分策略、检索优化、重排器选型。这篇整理了RAG实战中最高频的15道面试题。


一、文档处理与切分

1. 文档切分策略有哪些?Chunk大小怎么选?

参考答案

常见切分策略:

  1. 固定长度切分:按固定Token数切分,最简单但可能切断语义
  2. 递归字符切分:按段落→句子→字符层级递归切分,尽量保持语义完整
  3. 语义切分:用Embedding计算相邻句子相似度,相似度骤降处切分
  4. 基于文档结构切分:按标题、章节、页码等结构化标记切分

Chunk大小选择

  • 太小(100-200 Token):单个Chunk信息不完整,召回很多碎片
  • 太大(1000+ Token):一个Chunk包含太多信息,检索精度下降
  • 推荐:500-800 Token,配合50-100 Token的重叠窗口

面试加分点:提到不同文档类型应该用不同切分策略——技术文档按章节切,对话记录按轮次切,代码按函数切。


2. PDF文档中的表格和图片怎么处理?

参考答案

表格处理

  1. 用文档解析工具提取表格为结构化数据(JSON/Markdown表格)
  2. 将表格内容转为自然语言描述,再切分入库
  3. 保留表格的元数据(表头、所属章节)作为过滤条件

图片处理

  1. OCR提取文字内容
  2. 多模态模型生成图片描述
  3. 图片描述作为独立Chunk入库

实践建议:不要直接把整个PDF按页切分扔进向量库,表格和图片需要单独处理,否则检索时这些信息基本无法命中。


3. 重叠窗口是什么?为什么需要?

参考答案

重叠窗口是相邻Chunk之间共享的一部分文本,目的是避免切分边界处丢失上下文。

为什么需要

  • 假设Chunk大小500 Token,一个关键信息正好在第499 Token处开始,被切到两个Chunk里,两个Chunk都不完整
  • 有重叠窗口(如100 Token),这个信息在前后两个Chunk中都有完整出现

实践建议

  • 重叠大小通常设为Chunk大小的10%-20%
  • 不是越大越好——重叠太多会导致存储冗余、检索时重复召回
  • 对于结构化文档(代码、表格),重叠可以设小甚至不加

二、Embedding与检索

4. Embedding模型怎么选?微调Embedding值得吗?

参考答案

选择维度

  1. 语言支持:中英文混合用多语言模型
  2. 领域匹配:通用领域用通用模型,专业领域(医疗、法律)考虑领域定制模型
  3. 维度与性能:768/1024/1536维,维度越高表达越强但成本越高
  4. 最大输入长度:有些模型只支持512 Token,长Chunk需要截断

微调Embedding

  • 值得做,但优先级低于调切分和检索策略
  • 用query和正负样本对微调,可以显著提升领域检索效果
  • 注意:微调后需要重建整个向量库
  • 数据量少(<1000对)时效果不明显,不如先优化切分策略

5. 稠密检索和稀疏检索有什么区别?为什么要混合?

参考答案

稠密检索(向量检索)

  • 基于Embedding相似度
  • 擅长语义匹配(“怎么部署"能匹配到"安装步骤”)
  • 弱项:精确匹配专有名词、代码、编号

稀疏检索(关键词检索,如BM25)

  • 基于词频统计
  • 擅长精确匹配(产品型号、错误码、人名)
  • 弱项:不理解语义

混合检索

  • 同时做稠密和稀疏检索,各取Top-K,合并后重排
  • 取长补短:语义理解+精确匹配
  • 实践中几乎都推荐混合检索

6. 重排器是什么?为什么需要?怎么选?

参考答案

重排器(Reranker)

  • 对初筛召回的Top-K结果做二次排序
  • 用更重的模型(通常是Cross-Encoder)对query和每个doc做交叉注意力计算
  • 精度远高于Bi-Encoder的向量相似度

为什么需要

  • 向量检索是Bi-Encoder,query和doc独立编码,速度快但精度有限
  • 重排器是Cross-Encoder,query和doc联合编码,精度高但速度慢
  • 折中方案:向量检索召回Top-50,重排器筛出Top-5

选型建议

  • 轻量级:用小模型重排,延迟低
  • 重量级:用大模型重排,精度高但慢
  • 实践中:先召回50-100条,重排取5-10条

7. MMR是什么?什么时候用?

参考答案

MMR(Maximal Marginal Relevance,最大边缘相关性)是一种在"相关性"和"多样性"之间做平衡的重排方法。

公式:MMR = λ × Sim(query, doc) - (1-λ) × max(Sim(doc, selected_docs))

  • λ=1:纯按相关性排序
  • λ=0:纯按多样性排序
  • 通常取0.5-0.7

什么时候用

  • 用户提问比较宽泛时(如"介绍一下RAG"),不想返回5条几乎一样的结果
  • 知识库有重复/近似文档时,避免冗余
  • 不适合精确问答场景(如"错误码1001是什么意思"),只要最相关的

三、RAG进阶

8. 查询改写是什么?有哪些方法?

参考答案

用户提问往往不够清晰,查询改写是在检索前对query做优化。

常见方法

  1. 查询扩展:用大模型把query扩展为多个相关查询,分别检索后合并
  2. 查询分解:把复杂问题拆成多个子问题,分别检索
  3. HyDE(假设文档嵌入):让大模型先生成一个假设答案,用假设答案的Embedding去检索
  4. 同义词替换:把query中的词替换为同义词,扩大召回

实践建议:查询改写能提升召回率,但增加了延迟和成本。建议先做baseline,再按需加改写策略。


9. RAG vs 微调,怎么选?

参考答案

选RAG的场景

  • 知识需要频繁更新
  • 有大量私有文档
  • 需要引用溯源
  • 知识量大但查询时只需要一小部分

选微调的场景

  • 需要改变模型的输出风格或格式
  • 需要模型学会某种推理模式
  • 知识相对稳定且量适中
  • 延迟敏感(RAG有检索开销)

两者不冲突:可以先微调让模型学会回答格式和推理方式,再用RAG提供知识。面试中这个答案很加分。


10. RAG系统怎么评估?有哪些指标?

参考答案

检索环节指标

  1. Context Precision:召回的上下文中有多少是真正相关的
  2. Context Recall:相关文档是否都被召回
  3. Hit Rate:Top-K中是否包含正确答案

生成环节指标

  1. Faithfulness(忠实度):回答是否基于检索到的上下文,有没有编造
  2. Answer Relevancy(回答相关性):回答是否切题
  3. Answer Correctness:回答是否正确

端到端指标

  1. 用户满意度评分
  2. 人工标注准确性
  3. 拒答率(该答的不答 vs 该拒的不编)

工具建议:可以用RAGAS等框架做自动评估,但关键case必须人工复核。


四、生产落地

11. RAG系统架构怎么设计?分层吗?

参考答案

推荐的分层架构:

  1. 数据层:文档存储、向量库、关系数据库
  2. 索引层:文档解析、切分、Embedding、索引构建与更新
  3. 检索层:查询改写、多路召回、重排、过滤
  4. 生成层:Prompt组装、大模型调用、输出校验
  5. 应用层:对话管理、UI、API

关键设计原则

  • 检索和生成解耦,可以独立优化
  • 索引层支持增量更新,不用全量重建
  • 检索层支持多策略切换(A/B测试)
  • 生成层做输出校验和兜底

12. 知识库更新怎么做?增量还是全量?

参考答案

全量重建

  • 简单可靠,但耗时耗成本
  • 适合Embedding模型升级、切分策略变更
  • 适合知识库规模小(<1万文档)

增量更新

  • 新文档入库时只处理新文档
  • 需要维护文档ID到向量ID的映射
  • 删除文档时要从向量库中删除对应向量
  • 适合知识库频繁更新、规模大

实践建议

  • 生产系统用增量更新为主,定期全量重建对齐
  • 增量更新要有版本管理,出问题可以回滚
  • Embedding模型升级时必须全量重建

13. RAG响应延迟怎么优化?

参考答案

各环节延迟拆解

  • 查询改写:100-500ms
  • Embedding计算:50-200ms
  • 向量检索:10-100ms
  • 重排:100-500ms
  • 大模型生成:1-10s

优化手段

  1. 并行化:查询改写和Embedding可以并行
  2. 缓存:热门query缓存检索结果和答案
  3. 流式输出:大模型流式返回,首Token延迟降到1-2s
  4. 减少重排量:召回Top-20重排Top-5,而不是召回Top-100
  5. 异步预检索:用户输入时就开始检索,不用等完整query

14. RAG失败怎么兜底?

参考答案

常见失败场景和兜底

  1. 检索无结果:返回"未找到相关资料"+引导用户换关键词
  2. 检索结果都不相关:不强行回答,告知"现有资料无法回答"
  3. 大模型输出与上下文矛盾:用校验器检测,不一致时返回检索原文
  4. 大模型超时:降级返回检索摘要
  5. 向量库故障:降级为关键词检索

原则:宁可说"不知道",不要编造。生产环境的RAG系统,拒答比瞎答好。


15. 从0到1搭建RAG系统,你会怎么规划?

参考答案

Phase 1:MVP验证

  • 选10-50个核心文档
  • 固定长度切分(500 Token)
  • 通用Embedding模型
  • 纯向量检索,Top-5
  • 基础Prompt:“根据以下资料回答问题”
  • 验证基本可用性

Phase 2:效果优化

  • 优化切分策略
  • 加混合检索(向量+BM25)
  • 加重排器
  • 加查询改写
  • 建立评估集,做量化评估

Phase 3:生产化

  • 分层架构,检索生成解耦
  • 增量索引
  • 缓存策略
  • 监控告警
  • 兜底降级
  • A/B测试框架

面试加分点:强调"先跑通再优化"——很多团队一上来就追求完美架构,结果MVP都跑不通。


总结

RAG面试的核心思路是:不要只讲概念,要能说清楚每个环节"为什么这么做"“有什么坑”“怎么选”。面试官想听的是你的实战经验和踩坑教训,不是教科书定义。