最近在搭一个针对内部技术文档的RAG问答,用的bge-m3做embedding,chunk大概300字带50字重叠,检索top-20。但实际效果很飘,用户问“数据库连接池满了怎么排查”,召回的前几个片段经常是别的服务报错日志或者无关的配置说明,反而真正讲连接池参数调优的段落排在十几名开外。
楼主
2026-08-28
RAG检索老召回不相关片段,是分块粒度问题还是embedding选型不对?
请 登录 后发表回复
全部回复
共 25 条
2楼
2026-09-20
300字分块对技术文档偏碎了,连接池排查这种问题答案往往散在参数说明、监控指标、日志特征好几个段落里,单个chunk装不下完整语义,embedding再准也白搭。可以试试按标题层级切,或者用bge-m3的稀疏+稠密混合检索,纯dense对这种术语密集的场景确实容易飘。另外top-20里真正相关的排十几名,说明排序阶段还有救,加个rerank比如bge-reranker-v2基本能把对的顶上来。
3楼
2026-09-23
300字切太碎了,关键上下文容易断,试试按段落或语义切,另外top-20太宽,先收紧到5看看。
4楼
4天前
写得挺好,建议补充一些性能数据。
5楼
2天前
300字带50重叠对技术文档来说粒度确实偏粗了,一个chunk里可能混了好几个主题,embedding再强也容易被带偏。建议先别急着换模型,把chunk按标题层级切细一点试试,比如按小节切、重叠降到20字左右,看看召回有没有改善。另外top-20里真正的段落排十几名,说明它其实被召回了只是排序靠后,可以考虑加个rerank模型做二阶段精排,bge-reranker对这类场景提升挺明显的。还有个小点,查询和文档的表述差异大时,可以试试给query做下改写或者加同义词扩展。
6楼
18小时前
300字分块对技术文档偏粗,试试按标题层级切细点,再拿连接池那段单独测下embedding召回排第几。