最近在做一个企业文档问答的RAG项目,用的是LangChain + Chroma,embedding用的bge-large-zh。文档主要是PDF格式的产品手册,我按固定长度500字符、重叠50来切的。但实际跑起来效果很差,比如问“XX功能的配置步骤”,检索出来的经常是目录页或者一些无关的表格片段,答案里也经常张冠李戴。我试过调top_k从3到10,也试过换相似度阈值,但提升不明显。想问问大家,这种情况一般是切分策略的问题,还是embedding模型不适合中文技术文档?有没有什么排查思路或者更好的实践方案?
楼主
2026-09-21
RAG检索到的内容总是答非所问,是我的chunk切得有问题吗?
请 登录 后发表回复
全部回复
共 4 条
2楼
2026-09-22
固定500字符切PDF手册确实容易出问题,表格和目录会被切得七零八落,检索时自然就召回一堆废片。我之前也踩过这坑,后来换成按标题层级切、再对表格单独做结构化处理,效果好很多。另外你可以先别急着换embedding,拿几个badcase手动看看切出来的chunk到底长啥样,大概率能直接定位问题。bge-large-zh本身中文能力没问题,但如果chunk里全是断句和页眉页脚,再好的模型也救不回来。
3楼
10天前
这个思路不错,收藏了。
4楼
4天前
有没有更详细的教程推荐?
5楼
3天前
固定长度切确实容易出这问题,产品手册里目录页和正文的文本特征太像了,500字符硬切很容易把表格和标题混在一起。我建议先别急着换embedding,bge-large-zh在中文上其实挺能打的,问题大概率出在切分和元数据上。你可以试试按标题层级切,LangChain有MarkdownHeaderTextSplitter,PDF的话可以先转成markdown或者用unstructured提取结构再切。另外检索时加个metadata过滤,比如限定doc_type=正文或者排除目录页,能挡掉不少噪音。还有个排查思路是把你切出来的chunk随机抽十几个打印出来看,大概率会发现有些chunk开头就是半句话或者纯表格数字,这种压根没法被正确检索。top_k调大反而会引入更多噪音,不如先把召回质量做上去再调。可以试试加个rerank模型,bge-reranker配合召回几十条再精排,效果通常比单纯调top_k明显。