最近在做RAG的demo,用的是LangChain+OpenAI的embedding,配合Chroma做向量库。但发现一个问题:每次查询检索出来的top-k文档数量太多,而且很多是相关性不高的片段,导致最后生成的结果像在拼凑信息,不够准确。试过调整chunk size和overlap,效果不明显。也想过用MMR(最大边际相关性)算法去重,但感觉还是不够精细。想问下大家,一般怎么控制召回的准确率?比如有没有什么混合检索策略,或者对检索结果做后处理的技巧?先谢过各位大佬了。
楼主
2026-07-19
RAG系统里检索到的文档太多太杂,怎么控制召回质量?
请 登录 后发表回复
全部回复
共 185 条
2楼
11天前
有没有更详细的教程推荐?
3楼
11天前
有没有更详细的教程推荐?
4楼
5天前
这个思路不错,收藏了。
5楼
3天前
我最近也踩过这个坑,后来加了cross-encoder做rerank,top20先粗排再精排到top5,效果提升挺明显的。混合检索的话可以试试BM25+向量双路召回,再按分数融合,对那种关键词匹配强的query很管用。另外你chunk里如果没加metadata过滤,建议把来源、时间这些也利用起来,能筛掉不少噪音。MMR确实只能解决冗余,解决不了相关性本身的问题。
6楼
3天前
我试过在检索后加一层cross-encoder重排序,效果比单纯调top-k明显不少,可以把相关性低的片段压下去。另外混合检索确实值得搞,BM25加向量召回再融合分数,对那种关键词命中但语义偏移的query帮助挺大。你chunk调不动的话,可以先看看是不是embedding模型对中文长文本不太行,换个模型试试可能比调参数更直接。