Skip to content

RAG 优化策略面试题 ​

内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。

1. RAG 各模块的优化策略 ​

模块优化策略
文档块切分设置适当的块间重叠、多粒度文档块切分、基于语义的文档切分、文档块摘要
文本嵌入模型基于新语料微调嵌入模型、使用动态嵌入(Dynamic Embedding)
提示工程优化模板增加提示词约束、提示词改写
大模型生成基于正反馈微调模型、量化感知训练、提供大 Context Window 的推理模型
检索后处理元数据过滤、重排序(Rerank)减少文档块数量

2. 知识图谱增强 RAG(KG+RAG) ​

2.1 向量数据库的局限性 ​

  1. 无法获取长程关联知识
  2. 信息密度低(尤其在 LLM Context Window 较小时)

2.2 解决方案 ​

在向量库(VS)旁增加一路知识图谱(KG)上下文增强:

  • 从 Query 中抽取实体作为种子节点
  • 在知识图谱中进行图采样(必要时先通过向量相似度筛选种子节点)
  • 将子图转换为文本片段,作为额外上下文输入 LLM
  • 可使用 NL2Cypher 进行图查询增强

3. Self-RAG:让大模型自主筛选召回结果 ​

3.1 经典 RAG 的问题 ​

经典 RAG 无差别地将所有召回的上下文与 Query 合并输入 LLM。但有时召回的上下文可能与 Query 无关甚至矛盾,应当舍弃(尤其在 Context Window 仅为 4K 时)。

3.2 Self-RAG 的核心流程 ​

  1. 按需检索(Retrieve on Demand):判断是否需要额外检索事实信息,仅当需要时才召回
  2. 并行处理:对每个召回片段独立生成 Prompt 和结果
  3. 反思字段(Reflection Tokens):使用特殊标记检查输出是否相关、完整
  4. 选择最优片段:选择最符合需求的片段
  5. 可重复检索:支持多轮检索优化

3.3 Self-RAG 的创新:反思字符(Reflection Tokens) ​

  • Retrieve 类型:标记是否需要检索
  • Critique 类型:标记输出的相关性、完整性、检索片段对输出的支持程度

3.4 Self-RAG 的训练过程 ​

  1. 使用 GPT-4 生成反思字符作为训练数据
  2. 将知识蒸馏到内部 Critic 模型
  3. Critic 模型评估检索段落和任务输出质量
  4. 使用标准的 Next Token 目标在增强语料库上训练生成模型
  5. 比 PPO 等方法更具成本效益

3.5 Self-RAG 的推理过程 ​

  • 使用反思字符自我评估输出,使推理具有适应性
  • 可根据任务类型定制行为(事实准确性 vs 创意输出)
  • 段落级 Beam Search 获取最佳序列
  • 无需额外训练即可通过调整权重改变模型行为

4. 多模态 RAG ​

4.1 半结构化 RAG(文本 + 表格) ​

  1. 版面分析(基于 Unstructured 工具)生成原始文本和表格
  2. Summary LLM 生成文本摘要和表格摘要
  3. 同一嵌入模型向量化后存入多向量检索器
  4. 用户 Query 向量化后用 ANN 检索召回原始文本和表格
  5. 构造完整 Prompt 送入 LLM 生成最终结果

4.2 多模态 RAG(文本 + 表格 + 图片) ​

三种技术路线:

路线方案
选项 1对文本/表格生成摘要,使用多模态嵌入模型对所有内容向量化;查询时召回原始文本/表格/图像,送入多模态 LLM
选项 2使用多模态 LLM(GPT-4V、LLaVA、FUYU-8b)生成图片摘要;向量化文本/表格/图片摘要;查询时召回原始文本/表格 + 图片摘要
选项 3前置同选项 2;查询时召回原始文本/表格/图片,送入多模态 LLM

4.3 私有化部署 ​

使用开源组件:LLaVA-7b(图片摘要)、Chroma(向量库)、Nomic GPT4All(嵌入模型)、Ollama LLaMA2-13b-chat(生成)。

5. RAG Fusion 优化策略 ​

思路:接收用户 Query 时,让 LLM 生成 5-10 个相似 Query,每个 Query 匹配 5-10 个文本块,对所有返回的文本块进行倒序融合排序(可选精排),取 Top-K 拼接至 Prompt。

优点:

  • 增加相关文本块召回率
  • 自动进行文本纠错和长句分解

缺点:无法从根本上解决理解用户意图的问题

6. 模块化 RAG 架构 ​

在基础 RAG 的检索-生成模块之外,可灵活增加:

模块功能
搜索模块融合代码/SQL/Cypher 等查询语言,搜索多元化数据源
记忆模块利用 LLM 自身记忆引导检索,寻找与输入最匹配的记忆
额外生成模块面对检索冗余和噪声时,由 LLM 生成必要上下文而非检索
任务适应模块将 RAG 调整以适应各种下游任务
对齐模块在检索器中添加可训练 Adapter 解决 Query 与文本的对齐问题
验证模块评估检索文档与 Query 的相关性,提升 RAG 鲁棒性

7. 查询转换(Query Transformations) ​

利用 LLM 将用户的原始 Query 改写为更适合检索的形式。用户原始查询可能存在表述不清、需求复杂、内容不相关等问题。LLM 确保转换后的查询更有可能获取准确答案。

8. 索引优化策略 ​

8.1 嵌入优化 ​

  • 微调嵌入:让检索内容与查询的相关性更紧密,尤其在专业领域效果显著
  • 动态嵌入:不同于静态嵌入,根据单词上下文动态调整向量表示

8.2 块大小优化 ​

  • 小块:可能导致关键信息缺失
  • 大块:可能引入无关噪声
  • 最佳实践:在测试集上运行评估并计算指标(LlamaIndex 支持此功能),通过实验找到最佳平衡

8.3 混合检索 ​

结合向量搜索和关键词搜索的优势:

  • 向量搜索:语义相关性
  • 关键词搜索:精确匹配特定术语

例如:搜索 "阿迪达斯 XYZ 运动鞋白色",混合检索既能匹配颜色和品牌的语义,又能精确匹配型号 XYZ。

8.4 重排序(Rerank) ​

Top-K 结果不一定按最优相关度排序。重排序将最相关信息重新定位到 Prompt 的边缘位置。

常用策略:Diversity Ranker(基于文档多样性排序)、LostInTheMiddleRanker(在 Context Window 首尾交替放置最佳文档)。

9. 数据质量优化 ​

Garbage In, Garbage Out 原则:

  1. 清理噪声:去除特殊字符、奇怪编码、不必要的 HTML 标签
  2. 删除无关文档:通过主题提取、降维和数据可视化发现并删除
  3. 去除冗余:通过相似度度量删除重复文档
  4. 维护更新:添加机制更新过时文档

10. 元数据增强 ​

将元数据与索引向量结合使用,在向量搜索之上增加结构化搜索层:

  • 时间维度:按日期元数据排序
  • 文档结构:按章节/部分过滤
  • 来源标识:区分内外部文档

11. 查询与文档对齐优化 ​

问题:用户简短查询与文档之间存在语义不一致。

解决方案:不通过段落的嵌入来索引段落,而是通过"段落能回答的问题"的嵌入来索引段落。即将块与它们回答的问题一起索引,优化与底层问题的相似度而非与原始文档的相似度。

12. Prompt 压缩 ​

研究表明,检索上下文中的噪声会对 RAG 性能产生不利影响。解决方案:

  • 选择性上下文(Selective Context):使用小型 LLM 计算即时互信息或困惑度,估算元素重要性
  • LLMLingua:使用小型 LLM 进行压缩
  • 在检索后应用后处理步骤,压缩无关上下文,突出重要段落,减少总体上下文长度

13. RAG 结合 SFT ​

RA-DIT 方法:

  1. 更新 LLM,最大化在给定检索增强指令下正确答案的概率
  2. 更新检索器,最小化文档与查询在语义上的差异

使 LLM 更好地利用相关背景知识,即使在检索出错时也能产生较准确的预测。

14. RAG 未来发展方向 ​

垂直优化 ​

  • 长上下文处理
  • RAG 鲁棒性研究
  • 大规模知识库检索效率
  • 企业数据安全(防止 LLM 泄露文档来源和敏感信息)

水平扩展 ​

  • 从文本 QA 拓展到图像、代码、结构化知识、音视频

生态系统 ​

  • 技术栈:LangChain、LlamaIndex、HayStack、Flowise AI、Cohere Coral
  • 评估体系:上下文相关性、内容创新性、无害性
  • 可解释性增强