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
  • 评估体系:上下文相关性、内容创新性、无害性
  • 可解释性增强