最近在做一个企业知识库的RAG项目,用LangChain + Chroma,embedding用的bge-large-zh,检索top5。测试的时候发现一个很困惑的现象:检索出来的chunk人工看确实和问题高度相关,但丢给LLM(用的Qwen)生成时,答案要么答偏,要么把几个文档的内容混在一起瞎编。prompt也试过“只根据以下上下文回答”,效果还是不稳定。想问问大家,这种情况一般是检索的问题还是生成的问题?有没有什么系统性的排查思路?感觉卡在这好几天了。
最近在做一个企业知识库的RAG项目,用LangChain + Chroma,embedding用的bge-large-zh,检索top5。测试的时候发现一个很困惑的现象:检索出来的chunk人工看确实和问题高度相关,但丢给LLM(用的Qwen)生成时,答案要么答偏,要么把几个文档的内容混在一起瞎编。prompt也试过“只根据以下上下文回答”,效果还是不稳定。想问问大家,这种情况一般是检索的问题还是生成的问题?有没有什么系统性的排查思路?感觉卡在这好几天了。
我之前也卡在这过,后来发现top5里其实混了一两个语义相近但角度不对的chunk,人工看觉得相关,模型却容易被带偏。你可以先把每个chunk单独喂给模型测一遍,看是哪个在捣乱,顺便在prompt里加上“如果上下文不足以回答就说不知道”。另外Qwen对指令位置比较敏感,把约束条件放到上下文后面再试一次,有时候效果差挺多。