最近在做一个企业知识库问答,用的是LangChain + pgvector,embedding模型是bge-m3,生成用Qwen2.5-7B。检索这块我看了下top5的chunk,跟问题语义相似度都挺高的,人工看也觉得应该能回答。但实际生成的时候模型经常答偏,要么把几个文档的内容混在一起,要么直接说“根据已知信息无法回答”。我试过调temperature、换prompt模板,效果都不稳定。想问下大家,这种情况一般是什么原因?是chunk切得不对,还是检索和生成之间的衔接有问题?有没有什么系统性的排查思路?
楼主
26天前
RAG检索出来的文档明明很相关,为什么大模型还是答非所问?
请 登录 后发表回复
全部回复
共 1 条
2楼
24天前
这个现象太典型了,检索相关不等于生成能用,中间那段其实是最容易出问题的。top5语义相似度高只能说明embedding空间里距离近,但模型真正需要的是能直接回答问题的信息,有时候这俩不是一回事。我之前也踩过类似的坑,后来发现很大一部分原因是chunk里缺少上下文,比如一段话被切断了,指代关系丢了,模型拿到手根本不知道在说谁。你可以先做个小实验,把检索到的chunk和问题拼一起,人工模拟一遍生成,看看到底是信息不够还是信息太多互相打架。另外Qwen2.5-7B本身指令跟随能力有限,prompt里如果没明确要求“只根据给定内容回答”,它很容易自己发挥或者过度保守。还有一点容易被忽略,就是多个chunk之间可能有冲突或者重复,模型面对矛盾信息时会懵,要么混着说要么干脆摆烂。建议你把检索结果按相关性排序后只保留最核心的一两个,再在prompt里加一句“如果信息不足就明确说不知道”,稳定性会好很多。