RAG 会遇到哪些瓶颈?如何提高召回率和回答准确率?
- 面试场景
- 一、RAG最大的瓶颈是什么?
- 二、为什么召回率低?
-
- [1、Chunk 切分不合理](#1、Chunk 切分不合理)
- 2、Embedding模型太弱
- 3.TopK设置不合理
- 4、知识库质量差
- 5、用户问题表达方式不同
- 三、如何提高回答准确率?
-
- 1、增加Rerank重排序
- [2、混合检索(Hybrid Search)](#2、混合检索(Hybrid Search))
- 解决方案:
- 3、Prompt优化
- 4、增加引用来源
- 5、多轮检索
- 四、大厂都在怎么做?
- 五、面试官最喜欢听到的回答
面试场景
面试官:有点意思,那再随便问几个问题。
- 你们 RAG 效果怎么样?
- 为什么召回不准?
- Chunk 怎么切?
- 如何降低幻觉?
- 如何优化准确率?
你:我们一般是提高 TopK,窗口滑动的切分方式。主要方式就是文档导进去 → 向量化 → 接大模型。
面试官:你回去再准备准备吧!
一、RAG最大的瓶颈是什么?
很多人认为:模型不够强。
实际上 80% 的问题来自:检索阶段 ,因为:检索错误 = 上下文错误 = 生成错误
大模型再聪明,也无法从错误资料中生成正确答案。所以垃圾输入,垃圾输出。
二、为什么召回率低?
企业项目中最常见的五个原因:
1、Chunk 切分不合理
例如:原文:员工出差补贴标准:
一线城市:300元/天
二线城市:200元/天
切分后:
- Chunk 1:员工出差补贴标准:
- Chunk 2:一线城市:300元/天
- Chunk 3:二线城市:200元/天
此时用户问:出差补贴是多少?可能根本召回不到完整答案。
如何优化呢
- 可以使用滑动窗口切分:采用: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、知识库质量差
企业最常见问题:
- 旧文档
- 重复文档
- 过期文档
- 错误文档
全部导入知识库。
结果:检索出来的内容本身就是错的。
如何优化
建立:
- 知识库治理机制
- 定期:
- 去重
- 清洗
- 更新
- 版本管理
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优化主要分为检索优化和生成优化两部分。
-
检索侧主要优化Chunk切分策略、Embedding模型、TopK参数、Hybrid Search以及Query Rewrite。
-
生成侧主要通过Rerank重排序、Prompt优化、引用来源、多轮检索等方式提高准确率。
实际项目中提升效果最明显的通常是:
- 合理Chunk切分
- Hybrid Search
- Rerank重排序
这三个优化往往能解决80%以上的问题。
100% = 70%检索质量 + 20%Prompt设计 + 10%大模型能力
