AI系列面试题11:RAG 怎么调优?
RAG 的调优不是单一环节的调整,而是一个全链路优化的过程。下面我从数据索引侧、检索侧、生成侧、评估侧四个维度,给出系统性的调优策略,并附上面试中可以提及的实战经验。
一、数据索引侧调优(提升“知识库”质量)
这是最容易被忽视却见效最快的地方。
| 调优点 | 问题现象 | 具体做法 | 效果指标 |
|---|---|---|---|
| 文档解析 | PDF 中的表格、流程图被忽略,或文字乱码、顺序错乱。 | 换用更好的解析库(如 unstructured、pypdf 的布局保留模式);对表格使用 pandas 提取后转为 Markdown。 |
召回率 +5~15% |
| 文本分块大小 | chunk 太小丢失上下文(如“他今年营收增长”中的“他”指代丢失);chunk 太大导致检索噪音多。 | 实验不同 chunk size(256/512/768 token),重叠 overlap 设为 10~20%;对于长文档,按语义边界(段落/标题)切分而非固定长度。 | 命中率 / 忠实度 |
| 元数据附加 | 检索到了相关段落,但无法追溯到来源或时间,或者需要按领域过滤。 | 为每个 chunk 添加元数据:source(文件名/URL)、timestamp、page_num、doc_type。在检索时使用过滤器(如 doc_type == 'legal')。 |
过滤精准度 |
| 嵌入模型选择 | 通用 embedding 在垂直领域(医疗、代码、法律)表现差。 | 使用领域微调的模型(BGE‑large‑zh、GTE‑Qwen2‑7B‑instruct);或者微调自己的 embedding 模型(用 triplet loss)。 | 检索 MRR@10 +10~20% |
二、检索侧调优(让“翻书”更准)
检索决定了喂给 LLM 的“参考资料”质量。
| 调优点 | 问题现象 | 具体做法 | 效果 |
|---|---|---|---|
| 混合检索 | 向量检索无法匹配精确术语(如产品型号 ABC-123),关键词检索无法理解同义词。 |
同时使用向量检索(语义)和 BM25(关键词),通过加权(如 0.7向量 + 0.3BM25)或 rerank 融合。 | 召回率 +10~25% |
| 重排序(Rerank) | 向量检索返回的前几个结果不一定最相关,第 10 个才是最好的。 | 用 cross‑encoder 模型(如 BGE‑reranker-v2、Cohere Rerank)对候选集(如前 20 个)重新打分,取 top‑K。 |
命中率显著提升(尤其 top‑1) |
| 查询重写 | 用户问题含糊或多轮对话中指代不清(“它的价格呢?”)。 | 用 LLM 将原始问题改写成更适合检索的形式(如“iPhone 15 的价格是多少?”);或者利用对话历史补全。 | 召回率 +5~15% |
| HyDE | 用户问题太短或过于抽象(如“讲一下光合作用”),直接检索效果差。 | 先让 LLM 生成一个假设性答案,再用这个答案去检索文档。 | 适用于开放域,但不适用于事实型精确问答 |
| 检索数量 Top‑K 调整 | K 太小可能漏掉关键信息;K 太大增加 token 消耗和噪音。 | 实验 K=3/5/10,观察召回率和答案忠实度的平衡。 | 效率与效果 trade‑off |
三、生成侧调优(让 LLM 好好利用参考资料)
检索再准,提示词不好或模型不行也没用。
| 调优点 | 问题现象 | 具体做法 | 效果 |
|---|---|---|---|
| 提示词工程 | LLM 忽略检索内容,或凭空捏造。 | 明确指令:“仅根据以下提供的参考资料回答问题。如果资料不足或不相关,请回答‘没有足够信息’。” 加上 few‑shot examples 展示如何引用来源。 | 忠实度 +20~40% |
| 上下文压缩 | 检索到的内容太长(超过模型上下文窗口),或者大部分是噪音。 | 使用 LLMLingua 或 选择性上下文 压缩,保留最相关的句子后再送给 LLM。 |
降低丢信息风险 |
| LLM 模型升级 | 小模型(7B)无法执行复杂推理,或记不住长上下文。 | 换用更强的模型(GPT‑4o、Claude 3.5 Sonnet、Qwen2.5‑72B)。 | 推理准确率大幅提升 |
| 流式与引用 | 用户无法验证答案可信度。 | 在生成时让 LLM 输出 [citation:1],对应检索文档的编号。后端附上原文链接。 |
用户信任度 + 可调试 |
| 拒绝回答校准 | 模型在不该回答时乱编,或应该回答时却说不知道。 | 设置一个相似度阈值:如果检索到的 top‑1 chunk 与问题的余弦相似度低于 0.7,提示 LLM “资料不相关”。 | 降低幻觉率 |
四、评估与迭代侧(知道往哪里调)
没有度量就无法优化。
| 调优点 | 做法 | 指标 |
|---|---|---|
| 建立评估集 | 准备 100~300 个真实用户问题 + 标准答案 + 正确的检索文档 ID。 | 覆盖不同难度、不同意图。 |
| 自动化评估 | 使用 RAGAS(Faithfulness, Answer Relevance, Context Recall)或 TruLens。 | 三个核心指标:忠实度、答案相关性、上下文召回率。 |
| 人工评估 | 每周抽测 20 个 bad case,分析错误类型(检索失败 / 生成错误 / 知识库缺失)。 | 改进优先级排序。 |
| A/B 测试 | 在生产环境分桶测试不同检索策略(例如 BM25 vs 混合检索)。 | 在线指标:用户满意度、无答案率。 |
五、面试中可以说的“实战经验”(加分项)
“在我负责的 RAG 项目中,一开始基线命中率只有 67%。我做了三件事:
1. 分块从固定 1024 改为动态语义切分(按标题+段落),命中率提到 74%;
2. 加入混合检索(向量 + BM25)和一个小型 rerank 模型,命中率升到 83%;
3. 优化提示词并强制要求[未找到相关信息],幻觉率从 22% 降到 5% 以下。另外,我们建立了一个持续评估流水线,每次改动前跑 200 个问题的 RAGAS 分数,确保没有退化。”
最后总结:一张完整的 RAG 调优路线图
数据层 ─→ 文档清洗、分块优化、元数据增强、领域 embedding
检索层 ─→ 混合检索、rerank、查询重写、HyDE、Top-K 调优
生成层 ─→ 提示词强化、指令要求、压缩、引用、拒绝阈值
评估层 ─→ 评估集、RAGAS、人工分析、A/B 实验
评论
暂无已展示的评论。
发表评论(匿名)