面试提问:RAG会遇到哪些瓶颈?如何提高召回率和回答准确率?

RAG 会遇到哪些瓶颈?如何提高召回率和回答准确率?

面试场景

面试官:有点意思,那再随便问几个问题。

  • 你们 RAG 效果怎么样?
  • 为什么召回不准?
  • Chunk 怎么切?
  • 如何降低幻觉?
  • 如何优化准确率?

你:我们一般是提高 TopK,窗口滑动的切分方式。主要方式就是文档导进去 → 向量化 → 接大模型。

面试官:你回去再准备准备吧!

一、RAG最大的瓶颈是什么?

很多人认为:模型不够强。

实际上 80% 的问题来自:检索阶段 ,因为:检索错误 = 上下文错误 = 生成错误

大模型再聪明,也无法从错误资料中生成正确答案。所以垃圾输入,垃圾输出。

二、为什么召回率低?

企业项目中最常见的五个原因:

1、Chunk 切分不合理

例如:原文:员工出差补贴标准:

一线城市:300元/天

二线城市:200元/天

切分后:

  • Chunk 1:员工出差补贴标准:
  • Chunk 2:一线城市:300元/天
  • Chunk 3:二线城市:200元/天

此时用户问:出差补贴是多少?可能根本召回不到完整答案。

如何优化呢

  1. 可以使用滑动窗口切分:采用:Chunk Size:300~800 Token,Overlap:50~150 Token

面试官:那如何避免语义被切割呢?

简答:思路是从两个方向来规避这个问题。第一个方向是切的时候就不要在语义中间截断,用重叠切割和语义边界切割来保证每个 chunk 内容是完整的,也就是按句子、段落这些自然的边界来切。第二个方向是切完之后用检索策略把上下文补回来,核心方案是句子窗口检索,命中一个句子就把周围几句一起返回给 LLM;另外还有父子切割,小块检索命中、大块内容输出。还有是 Anthropic 提出的 Contextual Retrieval,在做 Embedding 之前先让大模型看着整篇文档为每个 chunk 生成一段背景说明,把这段背景和 chunk 拼在一起再向量化,从根本上解决孤立 chunk 没头没尾的问题。

方案 核心思路 适合场景 代价
重叠切割 相邻 chunk 有内容重叠 所有场景,基础兜底 存储轻微增加
语义边界切割 在句子/段落边界处切 段落结构清晰的文档 需要 NLP 工具
句子窗口检索 精细检索 + 扩展返回窗口 追求高召回精度 存储量大
父子切割 小块检索、大块返回 通用场景,效果均衡 存储翻倍、索引复杂
命题化切割 LLM 拆解为独立命题 高质量要求、重要知识库 LLM 调用成本高
Contextual Retrieval 向量化前为每个 chunk 补全背景上下文 文档语境强、chunk 孤立感严重的场景 LLM 调用成本高(Prompt Caching 可大幅降低)

2、Embedding模型太弱

很多团队直接使用默认Embedding。结果:出差补贴≈员工福利被判断成不相关。导致召回失败。

如何优化?

优先使用:

  • BGE-M3
  • bge-large-zh
  • GTE
  • text-embedding-3-large

对于中文知识库:BGE系列效果通常更好。

3.TopK设置不合理

例如:TopK=1只召回一个结果。容易漏掉答案。又例如:TopK=30召回太多。引入大量噪音。

经验值:TopK=5~10 通常效果最佳。

4、知识库质量差

企业最常见问题:

  • 旧文档
  • 重复文档
  • 过期文档
  • 错误文档

全部导入知识库。

结果:检索出来的内容本身就是错的。

如何优化

建立:

  • 知识库治理机制
    1. 定期:
    2. 去重
    3. 清洗
    4. 更新
    5. 版本管理

5、用户问题表达方式不同

知识库:请假制度

用户问:我想休年假怎么办?

虽然意思一样。但关键词完全不同。容易漏召回。

如何优化

Query Rewrite(问题改写)

例如:

bash 复制代码
我想休年假怎么办

↓

公司年假申请流程是什么

再去检索。召回率会大幅提高。

三、如何提高回答准确率?

很多团队以为:召回成功就结束了。其实不然。还有第二个阶段:生成阶段

1、增加Rerank重排序

bash 复制代码
传统流程:

用户问题

↓

向量检索

↓

Top10

问题:

相似度最高

≠

最相关

如何优化:

bash 复制代码
向量检索

↓

Rerank模型

↓

重新排序

例如:

  • BGE-Reranker
  • Cohere Rerank

企业项目中:Rerank往往能提升20%~40%的准确率。

2、混合检索(Hybrid Search)

传统检索:仅向量搜索,容易丢失关键词。

例如:ErrorCode:10086,向量搜索效果很差。

解决方案:

bash 复制代码
BM25+Vector Search

同时搜索。再融合结果。这就是:Hybrid Search。

目前已经成为主流方案。

3、Prompt优化

很多团队Prompt只有一句:请回答用户问题

效果极差。

优化建议:

bash 复制代码
仅依据提供资料回答。

如果资料中没有答案:

直接回答:

不知道。

这样可以明显降低幻觉。

4、增加引用来源

例如:

答案:根据《财务制度V2.0》第三章规定...,不仅提高可信度。还能帮助用户验证结果。

5、多轮检索

复杂问题:

研发报销标准是什么?

上海地区是否有特殊规定?

可能涉及多个文档。

如何优化:

bash 复制代码
第一次检索

↓

提取关键实体

↓

第二次检索

↓

综合生成

这属于:

Multi-Hop RAG。

四、大厂都在怎么做?

目前企业级方案基本演进为:

bash 复制代码
Query Rewrite (输入优化重写)
↓
Hybrid Search*(混合检索)
↓
Vector Search(矢量检索)
↓
Rerank (模型重排序)
↓
Prompt Engineering (提示词工程)
↓
LLM

而不是简单:

bash 复制代码
Embedding
↓
Vector Search
↓
LLM

这也是很多开源Demo和企业生产环境最大的区别。

五、面试官最喜欢听到的回答

如果面试官问:如何提高RAG召回率和准确率?

推荐回答:

RAG优化主要分为检索优化和生成优化两部分。

  1. 检索侧主要优化Chunk切分策略、Embedding模型、TopK参数、Hybrid Search以及Query Rewrite。

  2. 生成侧主要通过Rerank重排序、Prompt优化、引用来源、多轮检索等方式提高准确率。

实际项目中提升效果最明显的通常是:

  • 合理Chunk切分
  • Hybrid Search
  • Rerank重排序

这三个优化往往能解决80%以上的问题。

100% = 70%检索质量 + 20%Prompt设计 + 10%大模型能力