检索增强常见问题
先说结论
RAG 系统在实践中面临检索质量、生成质量和系统工程三大类共七大痛点,每个痛点都有对应的诊断方法和解决方案。
QUESTION 面试高频:RAG 系统的主要痛点有哪些?
七大核心痛点:①检索不到相关内容 ②检索到了但排序靠后 ③LLM 未利用检索内容(幻觉)④上下文窗口不足 ⑤答案不够完整 ⑥多跳推理失败 ⑦数据更新不及时。
痛点一:检索不到相关内容
症状
- 查询相关文档存在但检索不到
- 检索结果与查询完全不相关
诊断方法
- 目视检查:人工确认知识库中是否存在相关文档
- 向量相似度检查:计算 query 与相关文档的余弦相似度
- 分块检查:确认相关信息是否被切分到了不同的 Chunk
解决方案
| 方案 |
说明 |
效果 |
| Hybrid Search |
Dense + Sparse 融合检索 |
中等 |
| Query Rewriting |
用 LLM 改写查询 |
中等 |
| HyDE |
生成假设性答案辅助检索 |
中等 |
| 换嵌入模型 |
尝试不同嵌入模型 |
高(但成本大) |
| 微调嵌入模型 |
在领域数据上微调 |
高(需训练数据) |
| Chunk 优化 |
调整分块策略和大小 |
中等 |
痛点二:检索到了但排序靠后
症状
- 相关文档在检索结果中但排名不靠前
- Top-5 或 Top-10 中混入大量不相关内容
解决方案
| 方案 |
说明 |
ROI |
| Cross-Encoder 重排 |
对 Top-K 结果精排 |
极高 |
| Cohere Rerank |
API 调用的重排服务 |
高 |
| LLM 重排 |
用 LLM 判断相关性并排序 |
高(成本也高) |
| 元数据过滤 |
先按元数据筛选再检索 |
高(需好元数据) |
QUESTION 面试高频:重排序为什么是 ROI 最高的优化?
因为向量检索(Bi-Encoder)虽然速度快,但精度有限——它只看了查询和文档各自的向量,没有"交叉注意力"。Cross-Encoder 让查询和文档一起过一遍 Transformer,精度大幅提升。成本方面只需对 Top-20~50 结果重排,延迟和计算量可控。效果方面通常能带来 10-20% 的端到端提升。
痛点三:LLM 未利用检索内容(幻觉)
症状
- LLM 忽略检索到的上下文,自行编造答案
- 回答与检索上下文矛盾
解决方案
| 方案 |
说明 |
| Prompt 工程 |
明确要求"仅基于上下文回答,不要使用外部知识" |
| Few-shot 示例 |
给出正确利用上下文的回答示例 |
| 降低温度 |
temperature=0 减少随机性 |
| Faithfulness 约束 |
在生成后增加验证环节 |
| 微调模型 |
在忠实度数据上微调 LLM |
痛点四:上下文窗口不足
症状
- 检索到的内容太多,超出 LLM 上下文窗口限制
- 长文档检索时只能取部分内容
解决方案
| 方案 |
说明 |
| 重排 + 截断 |
重排后只取 Top-N,控制总长度 |
| 上下文压缩 |
用 LLM 压缩检索内容(提取关键信息) |
| Map-Reduce |
分段处理再汇总 |
| 长上下文模型 |
使用支持 128K+ 的模型 |
| 递归检索 |
先检索小 Chunk,再映射到大 Chunk |
痛点五:答案不够完整
症状
解决方案
| 方案 |
说明 |
| 增大 Top-K |
检索更多文档,但需配合重排 |
| 查询分解 |
将复杂查询拆分为多个子查询 |
| 多轮检索 |
先检索,生成后根据缺失信息二次检索 |
| Prompt 优化 |
要求"全面回答,覆盖所有方面" |
痛点六:多跳推理失败
症状
- 回答需要综合多个不同文档的信息
- 需要先找到 A,再用 A 的信息找到 B
解决方案
| 方案 |
说明 |
| Iterative Retrieval |
多步检索,每步基于上一步结果 |
| GraphRAG |
通过知识图谱支持路径推理 |
| Query Decomposition |
拆分为多步子问题 |
| Self-Ask / ReAct |
让模型自主决定检索策略 |
痛点七:数据更新不及时
症状
解决方案
| 方案 |
说明 |
| 增量索引 |
监听文档变更,自动触发增量索引 |
| 时间戳元数据 |
为 Chunk 附加时间戳,检索时优先最新 |
| 定期全量重建 |
周期性重建索引保证数据一致性 |
| 实时数据源 |
对时效性要求高的内容接入实时 API |
RAG 优化策略全景图
┌─ Query Rewriting
查询优化 ─────├─ HyDE
(Pre-Retrieval)├─ Query Expansion
└─ Query Decomposition
┌─ Hybrid Search (Dense+Sparse)
检索优化 ─────├─ Multi-Vector Retriever
(Retrieval) ├─ Parent-Child Retriever
└─ Adaptive Retrieval
┌─ Cross-Encoder Reranking
后处理优化 ───├─ Contextual Compression
(Post-Retrieval)├─ Metadata Filtering
└─ Deduplication
┌─ Prompt Engineering
生成优化 ─────├─ Chain-of-Note
(Generation) ├─ Self-RAG
└─ CRAG
如果要对外讲,可以怎么概括
"RAG 系统的优化应该先定位瓶颈再针对性解决。我会先建立评测管线,区分是检索问题还是生成问题。如果是检索问题——检索不到就优化分块策略、尝试 Hybrid Search 或 HyDE;检索到了但排序靠后就加 Cross-Encoder 重排,这是 ROI 最高的单点优化。如果是生成问题——幻觉就用 Prompt 约束 + Faithfulness 验证;不完整就增大 Top-K 或做查询分解。多跳推理是传统 RAG 的难点,GraphRAG 或 Self-Ask/ReAct 是主要解决方案。核心原则是:先搭基线、量化评估、定位瓶颈、针对性优化,不要一上来就堆高级技巧。"
最后记几条
- 七大痛点对应七大解决方案,关键是先诊断是哪个环节的问题
- 重排序是 ROI 最高的优化——几乎所有 RAG 系统都应该加
- 检索不到时先检查分块策略和嵌入模型,再考虑 HyDE/Query Rewriting
- 多跳推理是传统 RAG 的固有弱点,GraphRAG 和 ReAct 是主要解决方向
- 评估驱动——没有量化评估的优化是盲人摸象
参考资料
- Gao, Y. et al. "Retrieval-Augmented Generation for Large Language Models: A Survey" (2024)
- "Seven Failure Points When Engineering a Retrieval Augmented Generation System" (2024)
- Asai, A. et al. "Self-RAG" (ICLR 2024)
- Yan et al. "Corrective Retrieval Augmented Generation" (CRAG, 2024)
延伸阅读