【2026年7月最新】69道RAG面试题

前言

RAG本身的概念还是很容易理解的,既: 索引→检索→生成→评估 四个环节串联,但是在实际的开发项目中还是经常遇到一些问题,而最好的方式就是通过面试题的形式进行记忆和查找,以点带线,以线促面,以下面试题基于实际开发项目以及我们要想掌握RAG必须会的。ps:建议学习一下milvus的使用

典型的RAG项目架构参考:

RAG 面试 69 题附完整答案可以点击目录进行跳转

目录

项目背景与选型

  1. 帮助谁解决了什么问题?为什么做这个项目?
  2. 系统的每天使用量是多少?
  3. [为什么不用工具,要选择代码开发?coze 和 dify 不能实现需求吗?](#为什么不用工具,要选择代码开发?coze 和 dify 不能实现需求吗?)
  4. 调研过哪些文档知识库工具?
  5. 离线知识库的规模有多大?
  6. 如何做知识库版本管理?
  7. 怎么做知识溯源?

RAG 基础概念

  1. [什么是 RAG?它解决了大模型的哪些问题?](#什么是 RAG?它解决了大模型的哪些问题?)
  2. [RAG 的完整工作流程是什么?](#RAG 的完整工作流程是什么?)
  3. [RAG 和模型微调有什么区别?如何选择?](#RAG 和模型微调有什么区别?如何选择?)
  4. [为什么需要微调?Prompt 或 RAG 不行吗?](#为什么需要微调?Prompt 或 RAG 不行吗?)
  5. [如何结合 RAG 和 Fine-tuning 提升提示词效果?](#如何结合 RAG 和 Fine-tuning 提升提示词效果?)
  6. [什么是 Advanced RAG?什么是 Modular RAG?](#什么是 Advanced RAG?什么是 Modular RAG?)
  7. [Spring AI 的模块化 RAG 架构是什么?](#Spring AI 的模块化 RAG 架构是什么?)
  8. [在 LangChain 中如何实现 RAG 应用?](#在 LangChain 中如何实现 RAG 应用?)

文档处理与知识库治理

  1. [RAG 的文档处理流程是怎样的?](#RAG 的文档处理流程是怎样的?)
  2. 索引流程中的文档解析怎么做?
  3. 用什么框架解析文档?为什么不用第三方集成工具?
  4. [LangChain 如何处理 PDF 表格数据召回?](#LangChain 如何处理 PDF 表格数据召回?)
  5. [PDF 中的图片怎么处理?](#PDF 中的图片怎么处理?)
  6. [PDF 中复杂表格如何处理?](#PDF 中复杂表格如何处理?)
  7. 什么是分块?为什么需要分块?
  8. 常见分块策略有哪些?
  9. [中文文档 chunk_size 和 overlap 如何设置?](#中文文档 chunk_size 和 overlap 如何设置?)
  10. [父块大小 1000 是怎么定的?](#父块大小 1000 是怎么定的?)
  11. 怎么评估知识库分块是否切坏?

Embedding 与向量化

  1. [什么是 Embedding?它如何工作?](#什么是 Embedding?它如何工作?)
  2. [常见 Embedding 模型有哪些?](#常见 Embedding 模型有哪些?)
  3. [如何选择合适的 Embedding 模型?](#如何选择合适的 Embedding 模型?)
  4. [Bert 模型能不能用于 embedding?](#Bert 模型能不能用于 embedding?)
  5. [你们使用什么 embedding 模型?为什么?](#你们使用什么 embedding 模型?为什么?)

向量数据库

  1. [RAG 为什么需要向量数据库?](#RAG 为什么需要向量数据库?)
  2. [如何选择向量数据库?Milvus、Pinecone、Chroma 怎么选?](#如何选择向量数据库?Milvus、Pinecone、Chroma 怎么选?)
  3. 如何实现向量数据库增量更新?

检索策略与优化

  1. 什么是混合检索?如何实现?
  2. [什么是 Rerank?为什么需要?如何实现?](#什么是 Rerank?为什么需要?如何实现?)
  3. [Top-K 是什么意思?K 值如何确定?](#Top-K 是什么意思?K 值如何确定?)
  4. 相似度阈值如何设置?
  5. 如何利用元数据过滤提升检索精度?
  6. 什么是查询扩展?为什么需要?
  7. 什么是自查询?为什么需要?
  8. 什么是查询重写?如何优化检索?
  9. 检索不到相关文档怎么办?
  10. [召回结果和 query 意图不匹配怎么改?](#召回结果和 query 意图不匹配怎么改?)
  11. [如何优化 RAG 检索效果?](#如何优化 RAG 检索效果?)
  12. [HyDE 是什么?举例说明](#HyDE 是什么?举例说明)
  13. 子查询检索是什么?举例说明
  14. 回溯检索是什么?适用什么场景?
  15. [BM25 是什么?和 TF-IDF 有什么区别?](#BM25 是什么?和 TF-IDF 有什么区别?)
  16. 检索效果不好可能哪里出问题?如何优化?
  17. 检索内容过长或相关性低怎么优化?

查询处理与意图识别

  1. [用户 query 随意或不清楚怎么处理?](#用户 query 随意或不清楚怎么处理?)
  2. 为什么要做意图识别?
  3. [为什么用 Bert,不直接用大模型做意图识别?](#为什么用 Bert,不直接用大模型做意图识别?)
  4. 意图识别具体怎么做?
  5. 意图分类错了会怎样?测试过吗?

生成与提示工程

  1. [RAG 中如何设计 Prompt?](#RAG 中如何设计 Prompt?)
  2. 什么是提示压缩?为什么需要?
  3. 提示工程有什么心得和技巧?
  4. [如何减少 RAG 幻觉?](#如何减少 RAG 幻觉?)
  5. 如何标注信息来源和引用?
  6. 如何从根本上缓解幻觉和知识缺乏?

效果评估与调优

  1. [如何进行 RAG 调优后的效果评估?](#如何进行 RAG 调优后的效果评估?)
  2. [如何评估 RAG 系统效果?检索和生成分别看什么?](#如何评估 RAG 系统效果?检索和生成分别看什么?)
  3. [如何评估 LangChain RAG 应用效果?](#如何评估 LangChain RAG 应用效果?)
  4. 检索效果如何评估?

生产环境与工程实践

  1. 生产环境如何优化性能和降低成本?
  2. [RAG 中如何计算文本相似度?](#RAG 中如何计算文本相似度?)
  3. 多个知识库时如何兼顾效率、准确性和低幻觉?

项目背景与选型

Q01. 帮助谁解决了什么问题?为什么做这个项目?

  • 这个项目主要服务内部业务、客服、运营和研发同学,解决文档分散、查资料慢、口径不统一的问题。
  • 以前遇到业务规则、产品说明、排障文档时,要去飞书、语雀、PDF、代码仓库里翻,耗时长,而且容易找错版本。
  • 做 RAG 的原因是企业知识更新快,单靠大模型本身的训练知识不够新,也不能保证回答基于公司内部资料。
  • 项目目标不是做聊天机器人,而是做一个可追溯、可更新、能回答业务问题的知识问答系统。
  • 面试里可以强调三点:提升查询效率、统一知识口径、降低人工答疑成本。

Q02. 系统的每天使用量是多少?

  • 我们按问答次数、活跃用户数、响应耗时和命中率来统计使用量。
  • 试运行阶段日均几百次问答,核心用户主要是客服、运营和内部研发。
  • 高峰一般出现在业务上线、活动发布、客服集中处理问题的时候。
  • 线上会记录每次 query、命中文档、召回分数、生成耗时、用户反馈,方便后续调优。
  • 如果面试官追问具体数值,建议说自己项目真实数据;不要随口编特别夸张的量级。

Q03. 你们为什么不用工具,要选择代码开发,coze 和 dify 不能实现你们的需求吗?

  • 我们调研过低代码工具,适合快速验证 Demo,但生产系统需要更强的工程控制。
  • 主要限制在四块:文档解析可控性、权限体系、检索策略定制、日志和评估闭环。
  • 例如复杂 PDF 表格、图片 OCR、按部门权限过滤、多路召回加 rerank,这些需要自己细调。
  • 公司内部系统还要接登录、审计、灰度、监控、知识版本管理,直接用平台会比较受限。
  • 所以选择代码开发,不是工具不能用,而是生产环境需要更可控、更好扩展。

Q04. 你们调研过哪些文档知识库的工具?

  • 低代码平台:Dify、Coze,适合快速搭流程和验证效果。
  • 框架类:LangChain、LlamaIndex,适合自定义 RAG 流程。
  • 向量库:Milvus、Chroma、FAISS、Elasticsearch 向量检索、Pinecone。
  • 文档解析:Unstructured、MinerU、PyMuPDF、pdfplumber、Apache Tika。
  • 最后选型看三点:能否满足私有化部署、复杂文档处理能力、是否方便接入现有 Java/Python 服务。

Q05. 离线知识库的规模有多大?

  • 我们会从文档数量、原始文件体积、切分后的 chunk 数、向量数量四个维度描述规模。
  • 典型规模是几千到几万份文档,切分后可能是几十万到百万级 chunk。
  • 文档类型包括 Markdown、Word、PDF、FAQ、接口文档、产品手册、运营规则。
  • 真正影响检索性能的不是原始文档数,而是 chunk 数、向量维度、索引类型和过滤条件。
  • 面试回答时要补一句:规模数据会随着知识更新持续变化,所以线上要有统计面板。

Q06. 你们如何做知识库的版本管理?

  • 原始文档保留文件 ID、版本号、更新时间、来源系统和负责人。
  • 每次文档更新都会重新解析、分块、向量化,并记录本次索引批次号。
  • 向量库里每个 chunk 都带 doc_id、chunk_id、version、source、更新时间等元数据。
  • 更新时不直接覆盖,通常先写入新版本,验证通过后切换生效版本。
  • 出问题可以按版本回滚,也能定位某个回答来自哪个版本的文档。

Q07. 你们是怎么做知识的溯源的?

  • 每个 chunk 都保存来源信息,包括文档名、路径、页码、章节标题、chunk 序号。
  • 检索结果返回给大模型前,会把来源 metadata 一起带上。
  • 最终回答展示引用来源,例如文档名、章节、页码或链接。
  • 用户如果质疑答案,可以点开原文核对,不只看模型生成内容。
  • 溯源的关键是索引阶段就把 metadata 建好,后面生成阶段才有依据。

RAG 基础概念

Q08. 什么是 RAG?它解决了大模型的哪些问题?

  • RAG 是 Retrieval-Augmented Generation,检索增强生成。
  • 核心思路是先从外部知识库检索相关资料,再把资料和问题一起交给大模型回答。
  • 它解决三个典型问题:知识不够新、内部知识缺失、回答无法溯源。
  • RAG 不能完全消灭幻觉,但能把回答约束在可检索的知识范围内。
  • 面试里一句话概括:RAG 是把大模型的生成能力和企业知识库的事实依据结合起来。

Q09. RAG 的主要流程/完整工作流程是什么?核心步骤有哪些?

  • 离线阶段:文档采集、解析清洗、分块、向量化、写入向量库。
  • 在线阶段:用户提问、query 预处理、检索、rerank、组装 prompt、调用大模型生成。
  • 生成后还要做引用展示、敏感词过滤、日志记录和用户反馈收集。
  • 核心步骤是文档处理、检索召回、上下文构造、生成回答。
  • 真正影响效果的是分块质量、embedding 模型、检索策略、prompt 约束和评估闭环。

Q10. RAG 和模型微调有什么区别?如何选择?

  • RAG 解决"知识从哪里来",微调解决"模型怎么说、怎么按固定模式做事"。
  • RAG 适合知识频繁更新、需要引用来源、公司内部资料问答的场景。
  • 微调适合固定任务、固定风格、分类抽取、格式化输出、领域表达习惯。
  • 如果问题是知识缺失,优先 RAG;如果问题是行为不稳定,考虑微调。
  • 生产里常见做法是 RAG 提供知识,微调或 prompt 约束回答风格和任务格式。

Q11. 为什么需要微调?直接用 Prompt Engineering 或 RAG 不行吗?

  • Prompt 能快速调行为,但稳定性有限,复杂规则太多时容易失效。
  • RAG 能补知识,但不一定能让模型稳定执行某类任务。
  • 微调适合把大量样例固化到模型里,让它学会固定输出格式、分类边界和行业话术。
  • 比如意图识别、结构化抽取、客服话术风格,微调通常比纯 prompt 更稳定。
  • 但微调成本更高,知识更新也不如 RAG 灵活,所以不是所有场景都需要微调。

Q12. 如何结合 RAG 和 Fine-tuning 来提升提示词效果?

  • RAG 负责提供最新、准确、可溯源的上下文。
  • 微调负责让模型更懂业务表达、回答格式和拒答边界。
  • 可以用线上高质量问答日志构造训练样本,让模型学会如何使用检索结果。
  • 也可以微调 query 改写、意图识别、文档 rerank 等小模型,而不是直接微调大模型。
  • 落地原则是:知识放在 RAG,稳定行为交给 prompt 或微调。

Q13. 什么是 Advanced RAG?什么是 Modular RAG?

  • Advanced RAG 是在基础 RAG 上加强检索和生成质量,例如 query rewrite、hybrid search、rerank、parent retrieval。
  • 它重点解决基础 RAG 召回不准、上下文太长、答案不稳定的问题。
  • Modular RAG 是把 RAG 拆成独立模块,例如解析、索引、路由、检索、重排、生成、评估。
  • 模块化的好处是每个环节可以单独替换和调优。
  • 生产系统一般都会走 Modular RAG,而不是把所有逻辑写死在一条链路里。

Q14. 什么是 Spring AI 提出的模块化 RAG 架构?预检索、检索和后检索阶段各自负责什么?

  • 预检索阶段处理用户 query,例如改写、扩展、意图识别、路由到不同知识库。
  • 检索阶段负责从向量库、关键词索引、数据库或外部 API 中召回候选内容。
  • 后检索阶段负责过滤、去重、rerank、压缩上下文、合并父文档。
  • 最后才是 prompt 组装和大模型生成。
  • 这种拆分方便定位问题:召回差看检索,排序差看 rerank,回答差看 prompt 和模型。

Q15. 在 LangChain 中如何实现 RAG 应用?

  • 先用 DocumentLoader 加载 PDF、Word、Markdown 等文档。
  • 再用 TextSplitter 切块,用 Embeddings 模型向量化。
  • 向量写入 VectorStore,例如 Chroma、FAISS、Milvus。
  • 在线查询时使用 Retriever 召回文档,可以加 MultiQueryRetriever、EnsembleRetriever 或 ContextualCompressionRetriever。
  • 最后用 PromptTemplate 加 LLM 生成回答,并返回 source_documents 做引用。

文档处理与知识库治理

Q16. RAG 的文档处理流程是怎样的?如何处理 PDF、Word、Markdown 等不同格式?

  • 统一流程是采集、解析、清洗、结构化、分块、加元数据、向量化、入库。
  • Markdown 保留标题层级,按标题和段落切分。
  • Word 先提取正文、标题、表格,必要时转成 Markdown 结构。
  • PDF 最麻烦,要处理版面、页眉页脚、表格、图片、跨页内容。
  • 不同格式最后都转成统一 Document 结构,便于后续分块和检索。

Q17. 在 RAG 中,索引流程中的文档解析你们怎么做的?

  • 先按文件类型选择解析器,不同格式走不同 pipeline。
  • 解析后会做清洗,例如去页眉页脚、去目录噪声、合并断行、过滤空段。
  • 保留结构信息,例如标题、页码、表格位置、图片说明。
  • 表格和图片不会简单丢弃,会转成文本描述或结构化 Markdown。
  • 解析结果会落盘保存,方便排查检索不到是解析问题还是检索问题。

Q18. 你们用的什么框架解析文档?为什么不用第三方集成好的工具?

  • 常用 PyMuPDF、pdfplumber、Unstructured、Apache Tika,复杂 PDF 会结合 OCR。
  • Word 和 Markdown 解析相对稳定,可以用 python-docx、Markdown parser 或框架自带 loader。
  • 没完全依赖第三方一站式工具,是因为业务文档格式不统一,复杂表格和图片需要定制。
  • 另外还要接元数据、权限、版本、异常重试和解析质量校验。
  • 我们不是排斥工具,而是在工具基础上加自己的解析和治理逻辑。

Q19. 使用 LangChain 实现 RAG 系统时,如何处理 PDF 文档中的表格数据召回问题?

  • 不建议把表格直接当普通文本切碎,容易丢行列关系。
  • 解析时把表格转成 Markdown table 或 key-value 描述,保留表头和单位。
  • 表格 chunk 单独入库,metadata 标记为 table,方便检索时加权。
  • 对复杂表格可以生成一段摘要,和原始表格一起入库。
  • 检索时向量召回加关键词匹配,必要时对表格结果单独 rerank。

Q20. PDF 中包含的图片怎么处理?

  • 先判断图片是否有业务价值,装饰图可以过滤。
  • 流程图、架构图、截图、票据类图片要保留。
  • 文字型图片用 OCR 提取文字,并记录图片所在页码和位置。
  • 业务图可以用多模态模型生成简短描述,再作为文本 chunk 入库。
  • 回答时引用图片来源,必要时返回原图链接,而不是只给模型生成描述。

Q21. PDF 中表格,尤其比较复杂的表格如何处理?

  • 简单表格转 Markdown table,保留表头、行列、单位。
  • 跨页表格要先合并,再切分,避免一半表格单独入库。
  • 合并单元格要补全语义,例如把上级表头下沉到每一行。
  • 大表格可以按主题、行组或业务对象拆成多个 chunk。
  • 对金额、指标、配置项这类表格,建议同时建结构化索引,不能只靠向量检索。

Q22. 什么是 RAG 中的分块?为什么需要分块?

  • 分块就是把长文档切成适合检索和放入上下文的小片段。
  • 原因是大模型上下文有限,向量检索也需要粒度合适的文本单元。
  • 块太大,召回内容噪声多;块太小,语义不完整。
  • 好的分块要尽量保持一个完整知识点,不切断标题、步骤、表格和结论。
  • 分块质量直接影响召回质量,是 RAG 里最容易被低估的环节。

Q23. 常见的分块策略有哪些?分别有什么区别?

  • 固定长度分块:实现简单,但容易切断语义。
  • 按段落分块:更自然,适合说明文档和制度文档。
  • 按标题层级分块:适合 Markdown、手册、技术文档,能保留章节语义。
  • 递归分块:按标题、段落、句子逐级切,LangChain 常用。
  • 语义分块:根据语义相似度切分,效果好但成本更高。
  • 父子分块:小块用于检索,父块用于生成,适合长文档问答。

Q24. 中文文档切割的 chunk_size 和 overlap 应该如何设置?

  • 中文建议按字符或 token 统计,不要直接套英文参数。
  • 常见起点是 chunk_size 500 到 1000 中文字符,overlap 50 到 150。
  • FAQ 类短文本可以更小,技术文档和制度文档可以稍大。
  • overlap 主要防止上下文被切断,但太大会增加重复召回和成本。
  • 最终不是拍脑袋定,要用测试集看召回率、答案准确率和上下文冗余。

Q25. 父块大小 1000 是怎么定的?

  • 1000 不是固定标准,是根据业务文档长度、模型上下文和检索效果调出来的。
  • 父块要足够包含完整知识点,比如一个小节、一个流程、一个规则说明。
  • 太小会丢上下文,太大会带入无关内容。
  • 我们会用不同父块大小做对比,例如 800、1000、1500,看命中率和回答质量。
  • 如果面试官追问,重点说"通过评估集验证",不要说"网上都这么配"。

Q26. 你们怎么评估知识库的分块,有没有把知识切开?

  • 先人工抽样看 chunk,检查标题、正文、表格是否完整。
  • 再用标准问题集测试,看问题是否能召回包含答案的 chunk。
  • 关注指标包括 Recall@K、MRR、命中文档准确率、答案引用是否正确。
  • 对跨 chunk 的问题,检查是否需要 overlap 或 parent retrieval。
  • 如果发现模型回答需要的信息分散在多个 chunk,就要调整分块策略或加父子块。

Embedding 与向量化

Q27. 什么是 RAG 中的 Embedding 嵌入?它是如何工作的?

  • Embedding 是把文本转换成向量,用数字表示文本语义。
  • 语义接近的文本,向量距离也更近。
  • RAG 中会把文档 chunk 和用户 query 都转成向量。
  • 检索时计算 query 向量和文档向量的相似度,找出最相关内容。
  • Embedding 决定了系统能不能"按意思找资料",不是简单按关键词匹配。

Q28. 常见的 Embedding Model 嵌入模型有哪些?

  • OpenAI text-embedding 系列,效果稳定,适合云服务场景。
  • BGE 系列,中文和中英混合场景常用,适合私有化部署。
  • M3E、GTE、E5,也常用于中文或多语言检索。
  • Sentence-BERT 系列适合语义相似度和句向量任务。
  • 选模型不能只看榜单,还要用自己的业务问题集做召回评测。

Q29. 如何为 RAG 系统选择合适的 Embedding 模型?需要考虑哪些因素?

  • 先看语言场景:中文、英文、多语言、代码文档是否都要覆盖。
  • 再看效果:用业务测试集评估 Recall@K、MRR、nDCG。
  • 还要看向量维度、推理速度、部署成本、是否支持私有化。
  • 如果文档有大量专业词,要测试同义词、缩写、业务别名的召回。
  • 最后看稳定性和维护成本,生产系统不能只追求单次效果最好。

Q30. Bert 模型能不能用于 embedding?

  • 可以,但原始 BERT 不是专门为向量检索训练的。
  • 直接拿 CLS 向量做检索,效果通常不如 Sentence-BERT、BGE、E5 这类模型。
  • 如果要用 BERT,最好经过对比学习或相似句任务微调。
  • BERT 更常见的用法是分类、意图识别、序列标注。
  • 面试回答可以说:能用,但生产检索一般选专门的 embedding 模型。

Q31. 你们使用的什么 embedding 模型?为什么?还调研过哪些?

  • 我们优先选支持中文、效果稳定、可私有化部署的 embedding 模型。
  • 常见选择是 BGE 或同类中文向量模型,因为中文检索效果和部署成本比较均衡。
  • 调研过 OpenAI embedding、BGE、M3E、GTE、E5,也对比过不同维度和不同推理速度。
  • 评估时不是只看相似度,而是看业务问题能不能召回正确文档。
  • 最终选择依据是召回效果、延迟、成本、私有化要求和工程维护成本。

向量数据库

Q32. RAG 为什么需要向量数据库?它和传统数据库有什么区别?

  • 向量数据库用于存储 embedding 向量,并做近似最近邻检索。
  • 传统数据库擅长结构化查询,例如按 ID、时间、状态过滤。
  • 向量数据库擅长语义相似度查询,可以按"意思接近"找文档。
  • RAG 里通常会把向量检索和元数据过滤结合起来。
  • 简单说:传统数据库找精确字段,向量数据库找语义相似内容。

Q33. 如何为 RAG 项目选择向量数据库?Milvus、Pinecone、Chroma 怎么选?

  • Milvus 适合大规模、私有化、生产级向量检索,功能完整但运维成本更高。
  • Pinecone 是托管服务,上手快,适合能用云服务的团队。
  • Chroma 轻量,适合本地开发、Demo、小规模应用。
  • FAISS 更偏向向量检索库,适合嵌入到服务里,但缺少完整数据库能力。
  • 选型重点看规模、部署方式、过滤能力、索引类型、运维成本和团队技术栈。

Q34. RAG 中如何实现向量数据库的增量更新?

  • 给每个文档建立唯一 doc_id 和版本号。
  • 发现文档新增、修改、删除后,只处理变更文档,不全量重建。
  • 修改文档时先删除或标记旧版本 chunk,再写入新版本 chunk。
  • 向量入库要保证幂等,避免重复索引。
  • 更新完成后跑抽样校验,确认新内容能检索到,旧内容不会误召回。

检索策略与优化

Q35. 什么是 RAG 混合检索?如何实现向量检索和关键词检索结合?

  • 混合检索就是同时用语义检索和关键词检索召回文档。
  • 向量检索擅长同义表达,BM25 擅长精确词、编号、专有名词。
  • 实现上可以分别取 Top-K,再做去重、分数归一化和融合排序。
  • 常见融合方式有加权求和、RRF、先召回再 rerank。
  • 适合业务文档里有大量术语、型号、接口名、配置项的场景。

Q36. 什么是 RAG 中的 Rerank?为什么需要?具体如何实现?

  • Rerank 是对初步召回结果重新排序,挑出最相关的上下文。
  • 向量检索召回快,但排序不一定最准,容易把相似但不回答问题的内容排前面。
  • Rerank 通常用 cross-encoder 或专门的 reranker 模型。
  • 流程是先召回较多候选,比如 Top 20,再 rerank 取前 3 到 5 个。
  • 它能明显提升准确率,但会增加延迟,所以要控制候选数量。

Q37. RAG 检索中的 Top-K 是什么意思?K 值如何确定?

  • Top-K 表示检索时返回相似度最高的 K 个 chunk。
  • K 太小可能漏掉答案,K 太大容易带入噪声和增加 token 成本。
  • 常见做法是初召回 K 取 10 到 30,rerank 后保留 3 到 8 个。
  • 最终要根据测试集调参,看 Recall@K、回答准确率和生成成本。
  • 不同场景 K 值不同,FAQ 可以小一些,复杂问题需要更大的候选集。

Q38. 相似度阈值如何设置?设置不当有什么影响?

  • 相似度阈值用于过滤低相关结果。
  • 阈值太高会召回不到内容,导致系统频繁拒答。
  • 阈值太低会引入噪声,模型容易根据无关内容编答案。
  • 设置方式一般是用标注测试集观察正负样本分数分布。
  • 线上可以按知识库、文档类型、问题类型设置不同阈值,而不是全局一个值。

Q39. RAG 系统如何利用元数据过滤提升检索精度?

  • 元数据包括部门、文档类型、产品线、版本、时间、权限、语言、来源系统。
  • 检索前先根据用户身份和问题意图过滤候选范围。
  • 例如问支付问题,只检索支付知识库;问某版本功能,只检索对应版本文档。
  • 这样可以减少无关召回,也能保证权限安全。
  • 元数据过滤适合和向量检索结合:先缩小范围,再做语义匹配。

Q40. 什么是查询扩展?为什么在 RAG 中需要查询扩展?

  • 查询扩展是给用户问题补充同义词、业务别名、上下文词。
  • 用户提问往往很短,比如"退款失败怎么办",但文档里可能写"退费异常处理"。
  • 扩展后可以提升召回率,减少因为表达不同导致的漏召回。
  • 实现方式可以用词典、规则、LLM 生成扩展词、多查询检索。
  • 要控制扩展范围,扩展过头会把问题带偏。

Q41. 什么是自查询?为什么在 RAG 中需要自查询?

  • 自查询是让模型把自然语言问题解析成检索条件和语义 query。
  • 例如"查 2024 年支付产品的上线规则",可以解析出时间、产品线、文档类型。
  • 它适合有丰富 metadata 的知识库。
  • 好处是可以自动生成过滤条件,提高检索精度。
  • 风险是模型解析错条件,所以要做字段白名单和规则校验。

Q42. 什么是查询重写(Query Rewriting)?如何优化检索效果?

  • 查询重写是把用户原始问题改写成更适合检索的表达。
  • 例如把口语、省略、指代不清的问题改成完整问题。
  • 多轮对话中还要补齐上下文,把"这个怎么配置"改成具体对象。
  • 可以用规则、意图模板或大模型重写。
  • 重写后要保留原意,不能为了召回擅自扩展成另一个问题。

Q43. 如何处理 RAG 检索不到相关文档的情况?

  • 首先不要让模型硬答,应该明确提示没有找到可靠依据。
  • 可以尝试 query rewrite、查询扩展、混合检索、降低阈值再检一次。
  • 如果还是没有结果,返回兜底话术,建议用户换个问法或转人工。
  • 同时记录这类问题,用来补充知识库或优化分块。
  • 生产里要区分"真的没有知识"和"检索策略没召回"。

Q44. 当 RAG 系统召回结果与用户 query 意图不匹配时,有哪些改进方向?

  • 先看 query 是否太短或有歧义,必要时做意图识别和查询重写。
  • 再看知识库路由是否正确,是否检索到了错误的业务域。
  • 检查 embedding 对业务词是否理解,必要时换模型或做领域微调。
  • 加 BM25、metadata 过滤和 rerank,减少语义相似但答案不相关的内容。
  • 最后用线上 badcase 反推,是分块问题、索引问题还是排序问题。

Q45. 如何优化 RAG 的检索效果?

  • 文档侧:优化解析、清洗、分块、metadata 和版本管理。
  • 模型侧:选择更合适的 embedding,必要时微调或换 reranker。
  • 检索侧:使用混合检索、query rewrite、rerank、parent retrieval。
  • 评估侧:建立标准问题集,持续看 Recall@K、MRR、答案准确率。
  • 线上侧:收集用户反馈和 badcase,定期回流优化知识库。

Q46. 假设检索(HyDE)是什么?能不能举个例子?

  • HyDE 是让大模型先根据问题生成一段"假设答案",再用这段文本去检索。
  • 它不是直接相信假设答案,而是用更完整的语义表达帮助召回。
  • 例子:用户问"退款失败怎么处理",模型先生成可能包含"退款单状态、支付渠道、重试、人工处理"的假设段落。
  • 然后用这个假设段落向量检索,可能比短 query 更容易命中文档。
  • 适合用户问题很短、语义不充分的场景,但要配合 rerank 防止跑偏。

Q47. 子查询检索是什么?能不能举个例子?

  • 子查询检索是把复杂问题拆成多个简单问题分别检索。
  • 例子:用户问"新用户活动怎么配置,失败怎么排查?"
  • 可以拆成"新用户活动配置流程"和"活动配置失败排查方法"两个子查询。
  • 每个子查询分别召回,再合并去重和 rerank。
  • 适合多意图、多条件、跨文档的问题。

Q48. 回溯检索(Parent Document Retrieval)是什么?对应场景是什么?

  • 回溯检索也叫父文档检索,通常是小块检索、大块生成。
  • 小 chunk 用来提高召回精度,父块提供完整上下文。
  • 适合长段落、制度条款、流程文档、技术手册。
  • 例如小块命中"审批失败原因",生成时回溯到整个审批流程章节。
  • 它能解决小块语义不完整的问题,但父块过大也会带来噪声。

Q49. BM25 是什么算法,与 TF-IDF 有什么区别?

  • BM25 是经典关键词检索算法,基于词频、逆文档频率和文档长度归一化。
  • TF-IDF 主要看词在文档中是否重要,BM25 在此基础上处理词频饱和和长度影响。
  • BM25 对短 query、专有名词、编号、接口名效果很好。
  • 它不理解语义相似,比如"退款"和"退费"可能需要分词词典或同义词扩展。
  • RAG 中常把 BM25 和向量检索结合,互相补短板。

Q50. 检索效果不好,可能是哪里出问题了,如何优化?

  • 文档解析错:正文、表格、标题没提取好,需要优化 parser。
  • 分块不合理:知识点被切断或 chunk 太大,需要重新切分。
  • embedding 不适合:业务词召回差,需要换模型或加领域样本。
  • 检索策略单一:只用向量不够,要加 BM25、metadata、rerank。
  • query 太差:需要重写、扩展、意图识别。
  • 评估缺失:没有标准问题集,就很难判断优化是否有效。

Q51. 如果检索出的内容过长,或者检索的内容相关性不高,如何优化检索出的内容相关性?

  • 先用 rerank 筛掉弱相关结果,只保留真正回答问题的 chunk。
  • 对长 chunk 做上下文压缩,提取和 query 相关的句子或段落。
  • 调小生成阶段使用的 Top-K,初召回可以多,最终上下文要精。
  • 优化分块,避免一个 chunk 混入多个主题。
  • 用 metadata 限定范围,比如产品线、版本、文档类型。

查询处理与意图识别

Q52. 如果用户的 query 很随意,或者 query 的描述不清楚,应该如何处理?

  • 先判断是否能从上下文补全,例如多轮对话里的指代。
  • 如果能补全,就做 query rewrite,把问题改成完整检索语句。
  • 如果歧义太大,不直接检索,先反问用户补充关键信息。
  • 对常见口语表达建立同义词和业务别名映射。
  • 线上要记录这类 query,后续优化提示词、意图识别和知识库 FAQ。

Q53. 为什么要做意图识别?

  • 意图识别可以判断用户到底是问知识、查流程、报故障、还是闲聊。
  • 不同意图走不同链路,例如知识问答走 RAG,故障排查走诊断流程。
  • 它能减少错误知识库召回,提高回答准确率。
  • 也能做安全控制,例如敏感问题、越权问题直接拦截。
  • 对生产系统来说,意图识别是路由和兜底策略的入口。

Q54. 你们为什么选择用 Bert 模型,不直接用大模型做意图识别呢?

  • 意图识别是高频、短文本、分类边界明确的任务,小模型性价比更高。
  • BERT 延迟低、成本低、部署可控,适合在线高并发。
  • 大模型做分类效果可以,但调用成本和响应时间更高。
  • 小模型也更容易做固定标签的稳定输出,不容易生成额外内容。
  • 我们会在低置信度或复杂 query 时再调用大模型兜底。

Q55. 你们具体怎么做的?

  • 先定义意图标签,例如知识问答、流程咨询、故障排查、闲聊、转人工。
  • 从历史 query 和人工标注数据中构建训练集。
  • 用 BERT 做文本分类,输出意图标签和置信度。
  • 高置信度直接路由到对应链路,低置信度走大模型改写或反问。
  • 线上持续收集错分样本,定期增量训练和回归测试。

Q56. 如果意图分类错了,会怎么样,大模型回答效果如何,你们测试过吗?

  • 意图错了会导致路由错,比如本该查知识库的问题走了闲聊或错误知识库。
  • 结果通常是召回不到、召回错、或者模型答非所问。
  • 我们会用标注集测试意图准确率,也会做端到端问答测试。
  • 对高风险意图设置二次确认和低置信度兜底。
  • 线上看 badcase 时,会区分是意图错、检索错,还是生成错。

生成与提示工程

Q57. RAG 中如何设计 Prompt 来有效利用检索到的文档?

  • Prompt 要明确要求模型优先基于检索上下文回答。
  • 如果上下文没有答案,要说明不知道,不能编。
  • 上下文要带编号和来源,方便模型引用。
  • 要限制回答格式,例如分点回答、先结论后原因、必要时给步骤。
  • 对冲突资料要要求模型说明冲突来源,优先使用最新版本。

Q58. 什么是提示压缩?为什么在 RAG 中需要提示压缩?

  • 提示压缩是把检索到的大段上下文压缩成更短、更相关的内容。
  • RAG 里检索结果可能很长,直接塞给模型会浪费 token,也会引入噪声。
  • 压缩方式包括抽取相关句、摘要、去重、按 query 过滤段落。
  • 它能降低成本,提高回答聚焦度。
  • 但压缩不能丢关键事实,重要数字、条件、限制要保留。

Q59. 在 RAG 应用过程中,关于提示工程的设计有什么心得和技巧?

  • Prompt 不要写得太玄,核心是任务、上下文、约束、输出格式。
  • 明确告诉模型:只能基于资料回答,缺资料就拒答。
  • 检索片段要编号,方便引用和调试。
  • 对业务问答,最好让模型先给结论,再给依据和步骤。
  • 对长上下文,要把最相关内容放前面,减少模型忽略重点。

Q60. 如何减少 RAG 系统的幻觉问题?有哪些实用方法?

  • 提高检索质量,保证上下文里真的有答案。
  • Prompt 明确要求无依据不回答。
  • 设置相似度阈值,低相关结果不进入生成。
  • 加引用来源,强制答案能回到原文。
  • 对关键场景加规则校验,例如金额、日期、权限、配置项。
  • 线上收集幻觉案例,回流到知识库和评估集。

Q61. RAG 系统如何标注信息来源和提供引用?

  • 索引阶段给每个 chunk 记录文档名、页码、章节、链接和版本。
  • 检索结果进入 prompt 时带上 source_id。
  • 生成回答时要求模型在关键结论后标注引用编号。
  • 前端展示引用列表,用户可以点击回到原文。
  • 如果一个结论没有来源,就不要把它包装成确定答案。

Q62. RAG 主要解决大模型幻觉和知识缺乏问题,有什么办法能够从根本上缓解?

  • 根本上要提升知识质量,而不是只调 prompt。
  • 知识库要及时更新、去重、清洗、版本化,避免旧知识和错知识进入检索。
  • 检索链路要稳定,能把正确资料召回到模型面前。
  • 关键业务规则可以结构化,不完全依赖自由文本生成。
  • 对高风险问题加审核、规则校验或人工兜底,不能只相信模型。

效果评估与调优

Q63. 如何进行 RAG 调优后的效果评估?真实应用场景中采用哪些评估标准与方法?

  • 先建立业务问题集,每个问题要有标准答案和标准来源。
  • 离线评估看召回是否命中答案、生成是否正确、引用是否准确。
  • 在线评估看用户点赞率、转人工率、追问率、无答案率、平均响应时间。
  • 调优前后要做 A/B 或回归测试,避免局部优化导致整体退化。
  • 真实场景里最重要的是答案是否能解决问题,而不是模型说得是否流畅。

Q64. 如何评估 RAG 系统的效果?检索和生成分别看哪些指标?

  • 检索看 Recall@K、Precision@K、MRR、nDCG、命中文档率。
  • 生成看答案正确性、完整性、忠实度、引用准确率、拒答合理性。
  • 工程指标看延迟、成本、可用性、索引更新时间。
  • 用户指标看满意度、采纳率、重复提问率、转人工率。
  • 要分层评估,不能只看最终回答,因为最终错了可能是检索错,也可能是生成错。

Q65. 如何评估 LangChain RAG 应用的效果?

  • 可以用 LangSmith 记录每次链路调用,包括 query、检索结果、prompt、模型输出。
  • 用固定测试集跑批量评估,比较不同 splitter、retriever、reranker 的效果。
  • 检查 source_documents 是否包含标准答案来源。
  • 对生成结果可以用人工评估,也可以用 LLM-as-judge 辅助评估。
  • 重点不是 LangChain 本身,而是把链路每一步的数据记录下来,方便定位问题。

Q66. 检索的效果如何评估的?

  • 准备一批真实问题,并标注正确文档或正确 chunk。
  • 看 Top-K 里是否包含正确答案来源。
  • 常用指标是 Recall@K、MRR、Precision@K、nDCG。
  • 还会人工抽查排序靠前的结果是否真的回答问题。
  • 线上结合无答案率、用户反馈和 badcase 分析继续优化。

生产环境与工程实践

Q67. RAG 系统在生产环境中如何优化性能和降低成本?

  • 缓存高频 query 的检索结果和生成结果。
  • embedding 离线批量计算,避免在线重复向量化文档。
  • 初召回多一些,rerank 和生成阶段少一些,控制 token。
  • 选择合适模型,大模型处理复杂问题,小模型处理分类、改写、压缩。
  • 向量库做好索引、分片、过滤条件和连接池优化。
  • 监控延迟、token 成本、召回数量、错误率,按数据继续调参。

Q68. RAG 中如何计算文本相似度?常见算法有哪些?

  • 向量检索常用余弦相似度、点积、欧氏距离。
  • 余弦相似度关注方向,常用于文本语义相似度。
  • 点积适合部分向量模型的默认检索方式,要看模型训练方式。
  • 关键词检索常用 BM25、TF-IDF。
  • 实际 RAG 里常把向量相似度、BM25 分数和 rerank 分数结合使用。

Q69. 你有多个知识库,做 RAG 的时候,怎么保证查询效率和准确性兼容,并尽可能减少幻觉?

  • 先做知识库路由,根据意图、用户权限、产品线、问题类型选择候选知识库。
  • 每个知识库单独维护 metadata、版本和索引,避免全量混检。
  • 对不确定的问题可以多知识库并行召回,再用 rerank 统一排序。
  • 使用权限过滤,防止模型引用用户无权访问的内容。
  • 低相似度或跨库结果冲突时,不强行回答,要提示信息不足或列出冲突来源。
  • 线上记录命中的知识库、召回分数和用户反馈,持续优化路由规则和评估集。
相关推荐
Leslie1658 分钟前
模型调价之后,如何把 Token 账单变成可回滚的预算策略
人工智能
小强19889 分钟前
SQL Server 慢查询怎么定位?一套从“卡”到“快”的完整排查流程
后端
企鹅的企10 分钟前
2027北京AI健康科技与智慧医疗展官方链接产业资源
人工智能·科技
水深火乐10 分钟前
interface和any
后端
步行cgn12 分钟前
MyBatis Error evaluating expression ‘ids‘. Return value (3) was not iterable 错误详
java·后端
卸任12 分钟前
AI英语学习助手:从翻译工具到 AI 英语学习助手
前端·electron
计算机魔术师13 分钟前
A股人形机器人第一股来了!宇树科技8月19日上市,一签或赚20万
前端
神奇小汤圆14 分钟前
Spring Boot + LangChain4j实现RAG——从零搭建企业级知识库问答系统
后端
独隅15 分钟前
KMP 全栈进化:Koog 框架打造纯 Kotlin AI Agent 实战效果
开发语言·人工智能·kotlin
zhy2956318 分钟前
【DNN】Llama 3.2 1B模型LORA微调与QAIRT部署
人工智能·dnn·llama