游乐游手机版
首页/AI热点日报/热点详情

RAG知识库构建第二篇:数据分块详解

类型:热点整理2026-07-21
RAG知识库构建中,数据分块需遵循内容相关、适当长度和语义完整原则。分块策略包括正则表达式、NLP及大模型方法,数据清洗可提升检索效率。面对图文混排、数据版本和歧义等挑战,可借助多模态模型、知识库路由、标签或知识图谱优化。

掌握RAG知识库构建的关键一步:数据分块策略详解,提升检索效率与精准度。

上一篇文章我们系统介绍了RAG的基本概念与工作原理,感兴趣的朋友可以翻阅历史记录回顾。今天我们将深入探讨知识库的数据清洗与分块策略。这两个环节是整个RAG项目落地的根基——基础不牢,后续优化再努力也难以奏效。

为什么要分块

简单来说,分块是为了实现知识库内容的精准召回。如果不进行分块,而是将整个知识库一股脑喂给大模型,让它自行处理,在知识量极少的情况下确实可行。但在真实业务场景中,这几乎不可能。以AI医疗领域为例,知识库可能收录了上万本权威医疗指南,每一本都是厚厚的医书或学术论文。将如此庞大的资料一次性塞给大模型,既不现实,也无必要。

正确的做法是:根据用户的具体问题,仅召回最相关的知识片段。这要求我们对知识进行结构化存储,将大块内容切割成小块,按需调用。

如何分块

分块原则

分块的核心原则是什么?每个分块都必须是一个完整的内容片段。具体来说,三条铁律需要遵守:

原则说明
内容相关高相关性的内容应尽量放在同一个分块内。
分块适当分块不宜过长,通常512个Token以内最佳,具体长度需根据所选Embedding模型确定。
语义完整每个分块都必须保证语义的完整性,不能断章取义。

举个简单的例子:

# 原始文档
公司上班时间为:
周一至周五9:00 - 18:00, 午休1小时。
周六10:00 - 17:00, 午休1小时。
周日及法定节假日休息。
公司加班调休政策:
...

# 好的分块方式
- block1
公司上班时间为:
周一至周五9:00 - 18:00, 午休1小时。
周六10:00 - 17:00, 午休1小时。
周日及法定节假日休息。
- block2
公司加班调休政策:
...

# 错误示范1:高相关性内容被拆散
- block1
公司上班时间为:
周一至周五9:00 - 18:00, 午休1小时。
- block2
周六10:00 - 17:00, 午休1小时。
周日及法定节假日休息。
公司加班调休政策:
...

# 错误示范2:分块破坏语义完整性
- block1
公司上班时间为:
周一至周五9:00 - 18:00, 午休1小时。
周六10:00 - 17:00, 午休
周日及法定节假日休息。
公司加
- block2
班调休政策:
...

数据清洗

在分块之前,通常需要先进行数据清洗。清洗的目标是什么?说白了就是实现数据结构化,同时去除无效、低质量、非语义化、不利于检索的内容。这一步做得好,不仅能消除噪音,还能节约向量化成本,提升检索效率。

比如下面这个例子,清洗前满是特殊符号和不必要的格式标记,清洗后只剩下干净的结构化内容,分块处理起来就顺畅多了。

清洗工作可以交给程序代码,也可以直接让大模型批量处理。总之,这一步千万不能省略。

常见的分块策略

正则表达式分块

这其实就是规则匹配模式,也是各大智能体开发平台普遍支持的方式。它的优点是简单高效,不消耗Token。缺点嘛,不够智能,对源数据质量要求较高。

常见的分割方式包括:

分割模式说明
按长度分割固定字符或固定Token数
按段分割匹配双换行符
按行分割匹配单换行符
按句分割匹配句号
自定义分割按自定义符号分割

其中按固定长度分块,通常需要预留一部分冗余数据来解决语义完整性问题,比如这样:

# 原始文档
公司上班时间为:
周一至周五9:00 - 18:00, 午休1小时。
周六10:00 - 17:00, 午休1小时。
周日及法定节假日休息。
公司加班调休政策:
...

# Block1 (含冗余)
公司上班时间为:
周一至周五9:00 - 18:00, 午休1小时。
周六10:00 - 17:00, 午休1小时。
周日及法定节假日休息。
公司加

# Block2 (带冗余前缀)
六10:00 - 17:00, 午休1小时。
周日及法定节假日休息。
公司加班调休政策:
...

对于结构化良好的高质量文档,正则表达式分割法是最经济高效的选择。具体到不同文档类型,也有对应方案:

文档类型说明
Markdown用专门的Markdown解析器分块
代码用代码解析器分块
多维表格文档按记录分块
数据库记录按记录分块
Excel文档按行存储

NLP分块

利用自然语言处理工具理解语义,例如NLTK、spaCy等,可以识别句子边界和段落结构。这种方式比正则表达式更智能,能兼容部分非结构化文档。

大模型分块

直接让大模型判断句子和段落的边界,生成更符合语义的分段结果。如果你不擅长写代码,这可能是最推荐的入门方式。大模型能力越来越强,对各类非结构化文档都能应对。不过要注意,大模型存在幻觉问题,输出不够稳定,需要留个心眼。

数据分块的难点和挑战

掌握了上述方法,大部分文档都能处理。但实际操作中,麻烦事还真不少。

图文混排

很多知识文档都是图文混排的,比如PPT和PDF,里面有大量架构图、说明图。如果直接把图片过滤掉,文字内容会变得支离破碎,失去上下文。如果把图片单独向量化,检索效果又很差。这确实是个两难问题。

数据版本问题

同一份数据可能因时效性存在多个版本。比如:

上证指数今天上涨5%,达到3700点...
上证指数今天下跌4%,以3300点收官...
上证指数今天维持3500点上下不动...

这些版本都在知识库里,但它们的“有效时间窗口”不同,检索时该用哪条?

数据歧义问题

同一个关键词在不同知识库中可能指向完全不同的概念:

问题: 今年的苹果啥时候上市?

知识库A: 《苹果手机最新资讯》——最新的Iphone将在秋季苹果新闻发布会上跟大家见面...
知识库B: 《农副产品销售计划》——今年的红富士苹果将在1个月后上市销售...

这种歧义如果不处理好,检索结果会让人哭笑不得。

复杂问题检索

有些问题需要跨多个文档进行检索,并对检索到的内容做推理和加工。但知识库分块存储后,各个片段之间的关联关系就断了,面对复杂问题常常得不到满意答案。

进一步优化分块效果

针对上述难题,也有一些优化策略可以尝试。

图文混排文档的处理

可以用多模态大模型或OCR能力识别图片,为每张图生成一段摘要描述,然后加到原文中。这样既能保留语义,又能提高检索效果。

也可以借助一些开源工具,比如PDF-Extract-Kit、OmniParse,专门用来识别和转换PDF、PPT等文档格式。

知识库路由

将不同领域的知识拆分到不同的知识库中。每次查询时,系统根据问题的上下文先判断该检索哪个库。例如“苹果上市计划”这个关键词,在《农产品销售计划》和《Iphone新品发布计划》中意义完全不同,那就让大模型自己去判断该走哪条路。

知识库标签

给每个分块打上关键词标签,可以是人工添加的,也可以是程序自动生成的。这样除了向量相似度检索,还能通过关键词做精确匹配,提高召回精度。

知识图谱

这就涉及到Graph RAG的思路了。在设计知识库时,除了存储知识本身(实体),还要额外存储它们之间的关联关系(关系),从而形成一个知识图谱。检索时,以最相关的知识片段为起点,沿着关系做N跳内的扩展检索,确保能跨文档找到关联知识。

这种方式能显著提升检索质量,但实现起来也复杂得多,以后可以专门写一篇细聊。

Excel分块

Excel这种表格文档,最简单的做法是把每一行作为一个独立的分块,每条记录单独召回。同时,每个分块都要保留完整的表头信息,这样才能理解每条数据的含义。

结语

数据分块质量的好坏,直接决定了知识库的检索和召回效果。很多时候,整个知识库建设过程中工作量最大的,反而是数据清洗和分块这部分。本文介绍了不少策略和思路,但实话实说,这里面没有银弹。最佳实践永远是结合自己的业务场景和数据类型,选择最合适的方案。想达到理想效果,通常还是要写数据预处理代码。如果不懂代码,也可以直接用Coze、Dify这类智能体平台,通过UI界面配置知识库,不过就只能用平台内置的分块和嵌入策略,灵活性会差一些。

来源:https://www.53ai.com/news/RAG/2025080931798.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。