RAG效果总是不理想?问题多半出在分块这一步,而不是模型不够强

📅 2026/4/26 ✍️ 小文 📖 约 1 分钟

很多人把RAG效果差归咎于大模型,其实根子在检索前端的chunking。本文从固定长度分块、语义分块到父子分块讲透三种策略的取舍,并给出按文档类型选择分块方式的实战建议。

RAG的瓶颈往往不在”生成”,而在”找到”

大家用RAG问”为什么答非所问”,第一反应是换更强的模型。但很多翻车案例的真相是:文档被切成了一堆彼此割裂、语义残缺的碎片,正确的信息根本没被检索出来。检索不到,再强的生成模型也白搭。所以,先把分块(chunking)这步做对,比盲目升级模型见效更快。

三种分块策略,各有适用场景

策略一:固定长度分块。 按固定字符数或token数切分,实现简单、速度快。缺点是容易在句子中间截断,把语义切断,召回质量不稳定。适合格式规整、段落短小的内容,作为保底方案。

策略二:语义分块。 用模型判断句子的语义边界,在段落或话题切换处切分。切出的块语义更完整,检索准确率更高,但计算成本上升、速度变慢。适合长文、散文类需要保语义的内容。

策略三:父子分块。 这是进阶方案:底层切细块用于精确检索,上层保留更完整的大块作为”答案上下文”喂给模型。先靠细块命中,再取整段大块回答,兼顾了”找得准”和”答得全”。适合需要引用上下文的长文档。

按文档类型选策略,别一套打天下

表格、FAQ、API文档:通常一条记录就成一个块,语义完整,固定或父子分块均可。

论文、报告、长博客:父子分块最合适,既能精确定位,又保留论证上下文。

代码或配置:按逻辑块切,千万别在代码中间硬切。

对话记录:按话轮或主题分组,避免一句对话一个块的碎片化。

除了分块,还有两个隐藏变量

① 重叠(overlap)。 让相邻块之间保留一点重叠内容,能降低关键句正好落在切口上的概率,是低成本提升召回的常用手段。

② 过滤噪声。 分块前先去掉页眉页脚、目录、图表说明等干扰项,否则这些噪声会污染向量索引,拉低检索精度。预处理做得越干净,检索越准。

Debug的方法论

当RAG答错时,先别急着换模型。把命中的检索结果打出来看一眼:找到没?找对了没? 如果连找都没找到,问题在分块和索引;找到了但用错了,才轮到生成环节。把”检索端”和”生成端”分开排查,定位问题会快得多。

一句话总结

RAG效果的瓶颈,常常藏在没人愿意细看的分块和处理细节里。先做好预处理、按文档选对分块策略、再检查重叠与噪声,你的RAG能力可能比想象中提升一大截——根本不用急着换大模型。

📤 分享到