Skip to content

RAG 项目面试表达:如何讲清楚从文档到答案的工程链路 ​

这篇文章解决什么问题 ​

面试中常见问题:

  • 你做过 RAG 吗?
  • RAG 的完整链路是什么?
  • Chunk 怎么切?
  • 向量库怎么选?
  • 检索效果不好怎么办?
  • RAG 怎么评测?
  • 如何减少幻觉?
  • 引用溯源怎么做?

如果你只回答"用向量数据库存文档,用户提问时检索相关段落,然后让模型生成答案",面试官会觉得你只做过 Demo,没有工程落地经验。

核心观点:RAG 不是向量库加 Prompt,而是一条可评估、可追踪、可迭代的知识增强链路。 这篇文章基于 HFL AI Agent Lab 中 RAG 工程化专题和项目 A 的工程理解,整理面试中如何讲清楚一个 RAG 项目。


面试官真正想考什么 ​

考察点面试官想确认什么
是否理解完整 RAG 链路你知不知道 RAG 不只是检索 + 生成
是否理解文档解析你知不知道解析质量直接影响后续所有环节
是否理解 Chunk 策略你知不知道切块方式影响召回质量和上下文完整性
是否理解 Embedding 版本管理你知不知道版本混用会影响召回稳定性
是否理解检索和 Rerank你知不知道检索策略和重排对效果的影响
是否理解引用溯源你知不知道引用是答案可信度的重要依据
是否理解 RAG 评测你知不知道 RAG 需要分层评测
是否有问题定位能力RAG 效果不好时,你知不知道怎么定位问题

面试官想确认你有没有完整做过 RAG 链路,而不只是调了一个向量搜索 API。

回答 RAG 项目时,要展示你理解每个环节的作用和风险:不只是检索能做什么,还有怎么保证召回质量、怎么减少幻觉、怎么做引用溯源、怎么评测和迭代。


一句话回答框架 ​

我不会把 RAG 简化成向量库加 Prompt。我会把它拆成文档解析、文本清洗、Chunk 切分、Embedding、向量入库、Query Rewrite、Hybrid Search、Rerank、Context Build、答案生成、引用溯源、Evaluation 和失败样本迭代几个环节。RAG 效果不好时,我会先定位是解析问题、切块问题、召回问题、排序问题、上下文构建问题还是生成问题。

这个回答框架的核心是:展示你理解 RAG 的完整链路,而不只是检索和生成;展示你有能力定位问题,而不只是调参数。


RAG 完整链路怎么讲 ​

文档上传 → 文档解析 → 文本清洗 → Chunk 切分 → Embedding → 向量入库 → 用户问题 → Query Rewrite → 检索 → Rerank → 上下文构建 → 答案生成 → 引用返回 → 用户反馈 → 失败样本库 → 评测迭代

每一步的作用:

  1. 文档上传:接收用户上传的文档。
  2. 文档解析:提取文本、标题、表格、页码等结构信息。
  3. 文本清洗:去除噪声、修复格式、保留关键结构。
  4. Chunk 切分:把文档切成适合检索的片段。
  5. Embedding:把 Chunk 转换成向量。
  6. 向量入库:把向量和元数据存入向量数据库。
  7. 用户问题:接收用户查询。
  8. Query Rewrite:优化用户查询,补全语义。
  9. 检索:向量检索 + 关键词检索,获取候选 Chunk。
  10. Rerank:对候选 Chunk 重新排序,提升相关性。
  11. 上下文构建:把排序后的 Chunk 组装成模型输入。
  12. 答案生成:模型基于上下文生成答案。
  13. 引用返回:返回答案和引用来源。
  14. 用户反馈:收集用户对答案的评价。
  15. 失败样本库:把失败案例积累起来。
  16. 评测迭代:定期评估效果,驱动优化。

文档解析怎么讲 ​

面试中要提:

  • 格式差异:PDF / Word / Markdown / HTML / 表格的解析方式不同,不能用一套逻辑处理所有格式。
  • 结构保留:标题、页码、段落、表格结构需要保留,否则 Chunk 会丢失上下文。
  • 元数据:每个 Chunk 要关联 source_uri、page、section、document_id,用于引用溯源。
  • 解析失败记录:某些文档可能解析失败,需要记录失败原因,不能静默跳过。
  • 结构丢失的影响:如果文档结构丢失,后续 Chunk 切分质量会下降,引用溯源也会出问题。

面试表达:

文档解析是 RAG 的基础,如果解析质量差,后面所有环节都会受影响。我会保留文档的标题、页码、段落和表格结构,并为每个 Chunk 关联元数据,用于引用溯源和问题排查。


Chunk 策略怎么讲 ​

策略适用场景风险
固定长度切分快速实现,文档结构不重要可能在句子中间切断,丢失语义完整性
按标题切分文档有清晰标题层级标题层级不一致时效果差
按语义切分需要保留语义完整性实现复杂,计算成本高
滑动窗口需要保留上下文连续性可能有重复内容,增加存储和检索成本
Parent-Child Chunk需要精确匹配但完整上下文实现复杂度增加
Chunk Overlap减少边界信息丢失增加存储和计算成本

面试要强调:

  • Chunk 太大会引入噪声,模型可能被无关信息干扰。
  • Chunk 太小会丢上下文,模型缺乏足够信息生成答案。
  • Chunk 大小通常在 200-1000 token 之间,需要根据文档类型和查询场景调优。

Embedding 和向量库怎么讲 ​

要讲清楚的关键字段:

  • embedding_model:使用的 Embedding 模型。
  • embedding_version:模型版本,版本混用会影响召回稳定性。
  • chunk_hash:Chunk 内容的哈希值,用于增量更新。
  • document_id:文档唯一标识。
  • chunk_id:Chunk 唯一标识。
  • vector_id:向量数据库中的 ID。
  • metadata:元数据,如页码、标题、文档类型。
  • 增量更新:文档修改后只更新变化的 Chunk,不重建整个索引。
  • 重建索引:Embedding 模型升级后需要重建索引。

面试表达:

Embedding 版本管理很重要——如果不同批次的 Chunk 使用了不同版本的 Embedding 模型,向量空间的语义分布会不一致,召回质量会下降。我会记录每个 Chunk 的 embedding_version,在模型升级时重建索引。


检索策略怎么讲 ​

  • 向量检索:适合语义相似的查询,比如"这个功能怎么用"。
  • 关键词检索:适合编号、术语、错误码、精确短语,比如"ERR-001"。
  • Hybrid Search:结合语义和关键词,覆盖更多场景。
  • Metadata Filter:处理权限、租户、时间、文档类型等过滤需求。
  • Query Rewrite:解决用户表达不完整的问题,比如把"怎么退款"改写成"退款流程、退款条件和退款时间"。
  • Multi-query:复杂问题多角度召回,比如生成多个不同角度的查询,合并去重后返回最相关的 Chunk。
  • Rerank:对候选结果重新排序,提升最终上下文质量。Rerank 通常比向量检索更准,但速度更慢。

面试表达:

检索策略的选择取决于查询场景。纯语义查询用向量检索,精确匹配用关键词检索,混合场景用 Hybrid Search。Query Rewrite 可以提升查询质量,Rerank 可以提升排序质量。


引用溯源怎么讲 ​

答案应返回:

  • document_id:文档唯一标识。
  • chunk_id:Chunk 唯一标识。
  • source_uri:文档来源链接。
  • page:页码。
  • section:章节。
  • score:相关度分数。

面试表达:

引用不是装饰,而是答案可信度、问题排查和评测的重要依据。用户可以通过引用验证答案是否来自可靠来源;开发人员可以通过引用定位检索问题;评测系统可以通过引用评估 Citation Accuracy。


RAG 评测怎么讲 ​

指标关注点
Recall@K检索阶段是否召回了相关文档
MRR相关文档在检索结果中的排名
Context Precision上下文中相关文档的比例
Context Recall相关文档被召回的比例
Faithfulness答案是否忠于上下文,没有幻觉
Answer Relevance答案是否和用户问题相关
Citation Accuracy引用是否正确指向来源
Human Review人工评估答案质量

面试要强调:

RAG 要分开评估召回、上下文、答案和引用。不能只看最终答案好不好,还要看是哪个环节导致的问题。

评测还要区分自动评测和人工评测。自动评测用指标打分,适合大规模回归测试;人工评测由标注员判断答案质量,适合发现自动评测无法捕捉的问题。两者结合才能建立可靠的评测体系。


RAG 效果不好怎么排查 ​

按问题类型定位:

  • 检索不到:检查文档解析是否正确、Chunk 是否丢失关键信息、Embedding 是否匹配、Query Rewrite 是否有效。
  • 检索到了但排序靠后:检查 Rerank 策略、score 阈值、top_k 设置。可能需要调整 Rerank 模型或增加 top_k。
  • 检索结果无关:检查 Chunk 是否有噪声、Metadata Filter 是否正确、Hybrid Search 权重是否合理。
  • 答案幻觉:检查上下文构建是否包含足够信息、Prompt 是否有引用约束、模型是否被无关上下文干扰。
  • 引用错误:检查 citation 绑定逻辑、chunk_id 是否正确关联。
  • 权限错误:检查 Metadata Filter 是否正确过滤了无权限的文档。

面试表达:

RAG 效果不好时,我不会盲目调参数,而是先定位问题出在哪个环节。通过 Trace 可以看到每次查询的检索结果、排序分数、上下文内容和最终答案,这样可以精确定位是召回问题、排序问题还是生成问题。

定位问题后,我会针对性优化:召回问题优化 Chunk 策略和 Embedding,排序问题优化 Rerank 模型,生成问题优化 Prompt 和上下文构建。每次优化后都要跑评测集,确认效果是否提升。


常见追问 ​

追问 1:Chunk 怎么设置大小? ​

回答要点:通常 200-1000 token,需要根据文档类型调优。法律文档可以大一些,FAQ 可以小一些。可以用滑动窗口减少边界信息丢失。

追问 2:Rerank 有什么作用? ​

回答要点:向量检索返回的是语义相似的候选,但不一定是最相关的。Rerank 用更精细的模型对候选重新排序,提升最终上下文质量。Rerank 通常比向量检索更准,但速度更慢,所以先用向量检索召回 top_k 个候选,再用 Rerank 精排。

回答要点:当查询可能包含语义和关键词混合时。比如"ERR-001 错误怎么解决","ERR-001"需要关键词匹配,"错误怎么解决"需要语义匹配。Hybrid Search 结合两种检索方式,通过权重调整平衡语义和关键词的贡献。

追问 4:RAG 怎么做权限控制? ​

回答要点:在文档入库时记录权限标签(tenant_id、role),检索时用 Metadata Filter 过滤无权限的文档。

追问 5:如何做增量更新? ​

回答要点:文档修改后,用 chunk_hash 对比变化的 Chunk,只更新变化的部分。Embedding 模型升级后需要重建整个索引。增量更新可以减少计算成本和时间,但需要维护 chunk_hash 和版本信息。

追问 6:如何处理表格和图片? ​

回答要点:表格可以转成文本或结构化数据。图片可以用多模态模型提取描述,或者单独存储图片链接。复杂表格可能需要专门的表格解析器。表格解析需要保留行列结构,否则 Chunk 会丢失表格语义。

追问 7:如何评估 RAG 是否变好了? ​

回答要点:建立评测指标体系(Recall、MRR、Faithfulness、Citation Accuracy),定期跑评测集,对比版本间的变化。不能只靠主观感受。

追问 8:如何减少幻觉? ​

回答要点:在 Prompt 中要求模型只基于上下文回答,不确定时说"我不知道"。用引用约束模型必须标注来源。用 Faithfulness 指标评估幻觉率。还可以在后处理阶段检查答案是否忠于上下文。

追问 9:RAG 和微调怎么选? ​

回答要点:RAG 适合知识频繁更新、需要引用溯源的场景;微调适合需要模型掌握特定风格或格式的场景。两者可以结合——用 RAG 提供知识,用微调优化生成风格。


容易踩坑的回答 ​

  • 只说用了向量数据库——面试官会觉得你只做了最简单的检索。
  • 只说用了 LangChain——面试官会觉得你只是调了框架 API。
  • 不讲文档解析——面试官会觉得你不了解 RAG 的基础环节。
  • 不讲 Chunk 策略——面试官会觉得你不理解切块对效果的影响。
  • 不讲引用溯源——面试官会觉得你不知道引用的重要性。
  • 不讲评测指标——面试官会觉得你不知道怎么评估 RAG 效果。
  • 不讲失败样本——面试官会觉得你没有迭代优化的意识。
  • 不知道怎么定位问题——面试官会觉得你只做过正常流程,没处理过异常。

更好的表达方式 ​

不推荐表达更好的表达
我用向量数据库存文档我把文档解析、Chunk 切分、Embedding、向量入库作为完整的索引链路
用户提问时搜索相关段落我用 Query Rewrite 优化查询,Hybrid Search 结合语义和关键词,Rerank 提升排序
让模型根据检索结果回答我构建上下文时会控制 Chunk 数量和顺序,在 Prompt 中加入引用约束
引用就是返回来源链接引用需要绑定 document_id、chunk_id、page、section,用于可信度验证和问题排查
效果不好就调参数我会先定位是解析、切块、召回、排序、上下文还是生成问题,再针对性优化
测试一下就知道好不好我建立评测指标体系,定期跑评测集,对比版本间 Recall、Faithfulness、Citation Accuracy
直接部署就行了需要监控检索延迟、token 消耗、引用准确率,建立失败样本库驱动迭代
RAG 就是向量搜索RAG 是完整的知识增强链路,从文档解析到评测迭代,每个环节都影响最终效果
Chunk 切小一点就行Chunk 太小会丢上下文,太大会引入噪声,需要根据文档类型和查询场景调优

对个人项目的启发 ​

项目 A(RAG 工单系统):

可以围绕 RAG 工单系统讲清楚文档解析、Chunk、Embedding、检索、Rerank、引用和评测。后续可以补失败样本库和 RAG Evaluation,让 RAG 系统有完整的质量闭环。RAG 查询可加入 Trace,记录每次查询的检索结果、排序分数、引用来源和用户反馈。

面试时可以这样表达:我的 RAG 工单系统覆盖了完整的工程链路——文档解析保留结构信息,Chunk 按标题切分,Hybrid Search 结合语义和关键词,Rerank 提升排序质量,引用溯源绑定 document_id 和 chunk_id。当效果不好时,我会通过 Trace 定位是哪个环节的问题。

项目 B(多 Agent 运营中台 Copilot):

多 Agent 使用知识库时也需要引用溯源。Agent 调用 RAG 工具时要记录 run_id 和 citation,这样可以追踪哪个 Agent 基于什么来源做了什么决策。本文只说明 Project B 可复用的 RAG 迁移方向。

面试时可以这样表达:在多 Agent 系统中,RAG 不只是单个 Agent 的能力,而是多个 Agent 共享的知识服务。每个 Agent 调用 RAG 工具时都会记录 run_id、agent_id 和 citation,这样可以追踪知识的使用链路。


后续 TODO ​

  • 补充 RAG 面试 3 分钟口述稿,用于面试快速表达。
  • 补充 RAG 效果排查案例,覆盖常见问题和解决方案。
  • 补充 RAG 评测表格模板,可直接用于项目 A 的评测设计。
  • 补充项目 A 的 RAG 面试表达版本,把工程实践转成面试话术。
  • 补充 RAG 评测自动脚本示例,展示如何自动化跑评测集。
  • 补充 Chunk 策略对比实验数据,用实际数据说明不同策略的效果差异。