最近在搭一个RAG系统,用的bge-large做embedding,Chunk大小设了256,重叠64。但发现用户问一个具体问题(比如“合同里违约金比例是多少”),检索出来的top-5片段经常只有一两个真正相关,其他都是无关内容,导致LLM回答时经常被带偏。试过调高相似度阈值,但又容易漏掉有用信息。有没有大佬遇到过类似问题?是chunk策略不对,还是得在检索后加一层reranker?或者直接让LLM自己过滤?求指点,谢谢。
楼主
22小时前
RAG检索出来的文档太多太杂,怎么让大模型只挑关键部分回答?
请 登录 后发表回复
全部回复
共 3 条
2楼
20小时前
确实遇到过类似的问题,chunk大小256可能对合同这种密集文本来说有点小了,容易把关键信息切散。我后来试了把chunk调到512甚至1024,同时加一层轻量的reranker(比如bge-reranker),效果明显提升。另外也可以试试让LLM在prompt里先对检索结果做一轮相关性判断,再基于筛选后的内容回答,这样能减少干扰。
3楼
18小时前
这种情况我之前也踩过坑,bge-large的top-5里确实容易混进语义相似但实际不相关的片段。我觉得加一层reranker挺必要的,像bge-reranker或者cohere rerank能把真正有用的往前排,比单纯调阈值灵活多了。另外你也可以试试把chunk size再调大点到512,重叠设128,让每个片段包含更完整的上下文,这样检索出来相关性会好一些。直接让LLM自己过滤的话,它很容易被无关信息干扰,感觉不如先在外层做精排稳妥。
4楼
10小时前
加个reranker吧,我试过效果挺明显的,能直接把不相关的片段压到后面去。