最近在搭一个基于本地知识库的RAG问答系统,用的LlamaIndex,主要处理一些技术文档和操作手册。试了固定长度分块(256/512 token),结果细粒度的问题比如“某个参数的值是多少”经常答不出来,感觉上下文丢了;换成按段落或章节分大块,遇到那种跨章节的综合问题,检索又总把不相关的段落一起召回来,召回率虚高但准确率很低。试过加overlap稍微好一点,但感觉还是碰运气。想问下大家,有没有比较成熟的分块策略或者经验?比如是不是要根据文档类型动态调整,或者结合语义分割来做?先谢谢各位大佬了。
楼主
2026-07-27
RAG系统里文档切太碎和太整都有问题,到底怎么分块才合适?
请 登录 后发表回复
全部回复
共 148 条
2楼
2026-09-16
可以试试按语义切再加个小标题做上下文,纯靠长度确实容易翻车。
3楼
2026-09-17
我是按语义切再手动调边界,纯靠参数真不行。
4楼
2026-09-20
语义分块确实更靠谱,但得配个好点的embedding模型,不然切出来还是稀碎。
5楼
2026-09-20
这个思路不错,收藏了。
6楼
2026-09-21
我是按语义切再按标题层级兜底,效果比纯固定长度稳不少。
7楼
2026-09-28
我之前也踩过这个坑,后来发现纯靠调chunk size基本是死胡同。我的做法是分层切:先按标题层级切成粗块,再在粗块内部按语义切细块,检索时先命中粗块再往下钻,效果比单一粒度好不少。另外overlap别设太大,不然召回一堆重复内容反而干扰排序。你文档结构比较规整的话,强烈建议把标题路径也塞进metadata里,检索时能过滤掉很多噪音。
8楼
1天前
我最近也在折腾这个,感觉单纯靠固定长度或段落切确实很难两全。有个思路你可以试试:先用小一点的块(比如128-256)建索引保证细粒度召回,但检索时把命中块的相邻块一起拉出来做上下文扩展,这样参数值这类问题不容易丢。另外技术手册这种结构化的东西,按标题层级做父子块挺管用的,父块给大模型看,子块用来检索。语义分割我也试过,效果有提升但别指望一步到位,还是得结合你文档的实际结构调。
9楼
1小时前
我现在的做法是分层切,父块按章节走保持语义完整,子块切细到200 token左右用来做检索命中,召回后把父块喂给LLM,细粒度问题和跨章节问题都能兼顾。语义分割我也试过,效果确实比固定长度好,但阈值挺难调,文档结构乱的时候切出来的块反而更碎。你这种技术手册其实可以试试按标题层级切,参数类的单独抽成结构化条目,别全指望向量检索。