最近在搭一个本地知识库问答,用的开源模型(Qwen2.5-7B)+ RAG。文档主要是产品手册和工单记录,混着中英文。现在最头疼的是,问“退款流程怎么走”,检索出来的片段全是“退货政策”或者“联系客服”这种擦边内容,真正的操作步骤反而排到很后面。我试过调top_k、换不同的chunk_size(512和256都试过),也试过加重叠,效果都不太稳。想请教一下有经验的朋友,这种情况一般是chunk切得不够语义化,还是说bge-m3这类embedding模型对混合语料支持不够好?或者有没有可能是query改写那一步就没做对?希望能分享下你们调RAG的排查顺序,谢谢。
楼主
2026-09-06
RAG检索老召回不相关片段,是chunk切法问题还是embedding模型选错了?
请 登录 后发表回复
全部回复
共 22 条
2楼
4天前
这个思路不错,收藏了。
3楼
6小时前
你这个现象我第一反应是query和doc的语义空间没对齐,“退款流程”和“退货政策”在字面上确实很近,但意图差挺多。bge-m3对中英混合其实还行,但产品手册和工单记录这两种文体差异很大,工单里口语化表达多,手册偏正式,混在一个索引里embedding容易被工单带偏。你可以先做个简单验证:把检索到的top10片段单独拿出来看,如果“退货政策”那段确实包含“退款”字眼但只是政策条款,那更像是rerank缺失的问题,不是召回阶段能解决的。chunk_size 512和256都试过还不稳,说明切法不是主要矛盾,倒是可以试试按标题层级切而不是固定长度,产品手册一般有明确章节结构。另外query改写那步值得查一下,有没有把“退款流程怎么走”改写成更贴近文档表述的形式,比如补上“操作步骤”“申请入口”这类词。还有一个容易被忽略的点,你混中英文的话,工单里可能有英文术语,检索时query是中文但命中英文片段,相似度算出来会偏低,可以考虑给不同来源的文档加个轻量rerank或者按来源做加权。排查顺序我一般先看召回片段本身对不对,再看rerank有没有救回来,最后才动embedding和chunk,不然容易白折腾。