最近在做一个企业内部知识库的RAG问答项目,用的是LangChain+OpenAI的embedding。文档主要是产品手册和技术文档,我试了固定256 tokens、加20%重叠的切片方式,但用户问“内存泄漏排查步骤”这类问题,召回来的片段经常是上下文割裂的,要么少关键步骤,要么混进无关内容。改成按段落切又发现长段落超过512 tokens后,检索精度下降得厉害。想问问大家在实际项目里,一般怎么根据文档类型动态调整切片策略?有没有什么经验或者工具能自动评估切片效果?先谢过各位大佬了。
楼主
1天前
RAG系统里文档切片后召回结果总是不准,怎么调切片策略?
请 登录 后发表回复
全部回复
共 4 条
2楼
12小时前
我之前也被这个问题折腾过,后来试了按语义边界切分,比如用LangChain的RecursiveCharacterTextSplitter配合自然断句和段落标记,效果比固定token好不少。另外针对长段落,可以先用模型做一次段落摘要再检索,精度能上去。评估方面,我一般会拿几个典型问题手动标注理想片段,再用召回率和命中位置做对比,比纯看embedding相似度更靠谱。你用的embedding模型是text-embedding-3-small还是别的?不同模型对长文本的敏感度差异挺大的。
3楼
12小时前
试过按语义边界切吗?用句号或标题做分割点,配合小重叠,长文档分段检索效果会稳很多。
4楼
4小时前
按语义切分加滑动窗口试试,我用sentence-transformers做边界检测比固定tokens靠谱不少。
5楼
2小时前
试过按语义边界切吗?用langchain的RecursiveCharacterTextSplitter调separators优先级效果还行。