最近在搭一个基于向量数据库的RAG问答系统,用的开源embedding模型+Milvus。一开始图省事,直接按固定500字切块存向量,结果发现很多问题答得前言不搭后语,尤其涉及长文档里的因果逻辑时。后来试着把chunk调小到200,又感觉召回的内容太碎片,经常缺上下文。想问问大家:chunk大小到底怎么定才合理?是跟embedding模型的最大输入长度挂钩,还是跟文档结构(标题、段落)走?有没有人踩过类似的坑,能分享下你们的切分策略或者调参思路?顺便问下,混合检索(向量+BM25)是不是能缓解这种问题?
楼主
2026-08-05
用向量数据库做RAG,为什么chunk大小对回答质量影响这么大?
请 登录 后发表回复
全部回复
共 101 条
2楼
17天前
我之前也踩过一模一样的坑,500字固定切分确实太粗暴了,尤其碰到那种跨段落讲因果的内容,模型拿到半截话根本拼不出完整逻辑。后来我的做法是先按文档结构切,比如markdown的标题层级或者自然段落,再对超长的段落做二次切分,尽量保证一个chunk里语义是自洽的。chunk大小其实没有万能值,跟embedding模型的最大输入长度有关,但更关键的是你的问答场景——事实型问题小一点没事,推理型问题就得给足上下文。另外重叠窗口挺重要的,我一般设10%到20%的重叠,能明显减少边界处丢信息的情况。混合检索确实有用,BM25能兜住那些专有名词和精确匹配,向量负责语义泛化,两个一起召回再用rerank排一下,碎片感会好很多。不过也别指望光靠调chunk就解决所有问题,prompt里怎么组织召回的上下文同样影响很大。