最近自己在搭一个RAG系统,用的是FAISS做检索,然后喂给GPT-4。但发现一个问题:每次检索回来的top-k文档(比如k=5)里,经常夹杂一些和用户问题关系不大的内容,结果LLM一读就偏了,生成答案经常“跑火车”。试过调小chunk size、换embedding模型(从text-embedding-ada-002换到bge-large),但效果不稳定。有没有大佬指点一下,怎么能让检索结果更聚焦?比如是不是需要在检索后加一个rerank?或者用某种“滑动窗口”只截取最相关的片段?新手求指路,感谢。
楼主
2026-07-19
RAG系统里检索到的文档太多太乱,怎么才能让LLM只关注最相关的几段?
请 登录 后发表回复
全部回复
共 146 条
2楼
6天前
Rerank确实值得一试,尤其像bge-reranker这类模型,能把检索结果按相关性重新排序,比单纯调chunk size直接得多。另外你提的滑动窗口思路也不错,但更推荐用上下文压缩或摘要的方式,把每个chunk里真正贴合问题的部分抽出来再喂给LLM。我之前也踩过这坑,后来发现与其纠结top-k数量,不如先把检索阈值卡严点,比如只保留相似度0.7以上的结果,宁缺毋滥。你目前embedding换到bge-large后,有没有对比过检索召回率的具体变化?
3楼
6天前
对,问题多半出在召回的粒度上,试试rerank或者用MMR去重,能压掉不少噪音。
rerank必加,尤其用bge-reranker,比换embedding模型管用多了。
4楼
5天前
rerank基本是必选项,可以试试cohere或bge-reranker,效果立竿见影。
另外可以试试把检索结果按与问题的相似度做个重排,再截取前两段最相关的喂给LLM。
5楼
2天前
我也是FAISS+GPT-4这套,之前踩过一样的坑。建议你加个cross-encoder做rerank,比如bge-reranker,先粗召top-20再用它精排到3-4条,效果比单纯调embedding稳多了。另外你可以在prompt里明确让它只依据给定片段回答,不确定就直说,能压住不少幻觉。
6楼
23小时前
加个rerank模型比如bge-reranker,检索完再精排一遍,效果立竿见影。
7楼
20小时前
加个rerank确实有用,bge-reranker跑一遍能砍掉不少噪音。