最近在做一个企业知识库问答,用的faiss+openai embedding,chunk大概300字左右。发现一个问题:问“合同违约金怎么算”,检索出来的前几段都是泛泛介绍合同条款的,真正写着“违约金按日万分之五”那一段反而排到了第7、8位。我试过调top_k,但拉高了噪音也变多,回答经常张冠李戴。后来看有人说要加rerank,也有人说是chunk重叠和embedding模型没选对的问题。想请教下大家,这种“关键词很具体但语义很泛”的query,到底该怎么调?是换bge-m3还是上混合检索(BM25+向量),或者干脆先做一层意图分类再选路由?有点迷茫,求指路。