RAG这事儿,成也分块,败也分块。这不是一句玩笑话。
Retrieval-Augmented Generation(RAG)系统——说白了就是给大语言模型配上一个外设知识库——其检索质量很大程度上取决于你如何处理"分块"这个环节。块分得好,模型拿到的是精准、完整的上下文;分得不好,那就是鸡同鸭讲,幻觉频出。
那到底要怎么分?下面整理了15种关键的分块策略,每一种都附带了实际的示例和操作思路,希望能帮你打通RAG检索的任督二脉。
1. 按行分块
核心原理:每遇到一个新行,就切一刀。
最佳适用场景:这类方法特别适合聊天记录、访谈问答这类数据——每行本身就是一个完整的语义单元。客服对话、即时消息应用都是它的主场。
举个例子:
Alice: 嘿,Bob,今天下午3点有空通话吗? Bob: 当然,Alice。你想聊项目更新吗? Alice: 对,还要讨论客户会议。 Bob: 没问题!3点见。
分块后的效果:
- CHUNK1: Alice: 嘿,Bob,今天下午3点有空通话吗?
- CHUNK2: Bob: 当然,Alice。你想聊项目更新吗?
- CHUNK3: Alice: 对,还要讨论客户会议。
- CHUNK4: Bob: 没问题!3点见。
这么分的好处是:每条消息都是一个独立的上下文,LLM可以直接抓取具体的问答对。但需要注意,如果某一行的信息太短,模型可能因为缺乏上下文而开始"胡编乱造"。
2. 固定大小分块
核心原理:不管三七二十一,按固定的字数或字符数一刀切下去。
最佳适用场景:它简单粗暴,最适合那些杂乱无章、本身就没有天然边界的文本——比如OCR扫描出来的文字、爬虫抓取的原始网页内容、老旧文档的数字化版本。
举个例子:假设固定大小为20个单词。
Python是一种高级、解释型编程语言。它的简单语法和动态类型使其在快速应用开发和脚本编写中很受欢迎。Python支持多种编程范式,包括结构化、面向对象和函数式编程。它广泛用于Web开发、数据分析、AI、科学计算等领域。
分块后的效果:
- CHUNK1: Python是一种高级、解释型编程语言。它的简单语法和动态类型使其在快速应用开发
- CHUNK2: 和脚本编写中很受欢迎。Python支持多种编程范式,包括结构化、面向对象和函数式编程。
- CHUNK3: 它广泛用于Web开发、数据分析、AI、科学计算等领域。
这么分的好处是:它完全不管内容含义,强行保持块大小一致。但缺点也很明显——你可能会把一句话或一个完整的概念拦腰切断,严重影响理解。小贴士:只有在实在没有结构可用的文本上才用,块的大小需要结合LLM的token限制来调整。
3. 滑动窗口分块
核心原理:按固定的字数或token数分块,但让相邻块之间有一定比例的重叠,以此来保留上下文。
最佳适用场景:当句子或概念可能会跨越块边界时,这个方法就很关键了。叙事文本、法律文档、技术写作是它的典型应用场景。
举个例子:假设窗口大小为15个单词,重叠部分为5个单词。
机器学习模型需要大量数据集来训练。数据的质量和数量显著影响模型性能。数据预处理包括清理和转换原始数据为可用输入。
分块后的效果:
- CHUNK1: 机器学习模型需要大量数据集来训练。数据的质量和数量
- CHUNK2: 质量和数量显著影响模型性能。数据预处理包括清理和转换
- CHUNK3: 转换原始数据为可用输入。
这么分的好处是:它尽可能地保持了上下文的连续性,检索时不会丢失边界处的关键信息。代价是块之间会有冗余,增加了存储开销——但为了上下文准确,这笔账是划算的。
4. 按句子分块
核心原理:每个句子当作一个独立的块。
最佳适用场景:对于编辑良好、结构清晰的文章,每个句子本身就承载了一个完整的观点。文章、文档、教科书都很适合。
举个例子:
深度学习已经改变了许多技术领域。神经网络现在能在图像识别上超越人类。训练这些模型需要大量计算资源。
分块后的效果:
- CHUNK1: 深度学习已经改变了许多技术领域。
- CHUNK2: 神经网络现在能在图像识别上超越人类。
- CHUNK3: 训练这些模型需要大量计算资源。
这么分的好处是:每个块聚焦一个明确观点,方便LLM灵活重组上下文。不过风险在于,有些句子可能太短或者孤立,丢失了必要的前后因果关系。实践中,有时把2-3个连续句子合并成一个块,效果反而更好。
5. 按段落分块
核心原理:每个段落作为一个完整的块。
最佳适用场景:格式良好的文档、博客、文章——每个段落天然就覆盖了一个单一的观点或主题。
举个例子:
数据科学结合了领域专业知识、编程技能以及数学和统计知识,从数据中提取有意义的洞察。 它是一个跨学科领域,使用计算机科学、统计学、机器学习和数据可视化技术来解决复杂问题。 数据科学家处理大型数据集,以识别趋势、进行预测并推动战略决策。
分块后的效果:
- CHUNK1: 数据科学结合了领域专业知识、编程技能以及数学和统计知识,从数据中提取有意义的洞察。
- CHUNK2: 它是一个跨学科领域,使用计算机科学、统计学、机器学习和数据可视化技术来解决复杂问题。
- CHUNK3: 数据科学家处理大型数据集,以识别趋势、进行预测并推动战略决策。
这么分的好处是:它完美保留了原文的逻辑流动和上下文,很适合检索较大的"思维块"。
6. 按页面分块
核心原理:在分页文档中,每一页作为一个完整的块。
最佳适用场景:处理PDF、书籍、扫描文档、法律合同时特别实用。尤其是当你需要按页码进行引用时。
举个例子:
第1页: 第1节:RAG简介 Retrieval-Augmented Generation(RAG)系统结合了LLM和信息检索。RAG提升了事实准确性,扩展了模型超越训练数据的知识。 第2页: 第2节:架构 主要组件是retriever(检索相关文档)和generator(根据检索到的上下文生成答案)。
分块后的效果:
- CHUNK1 (第1页): 第1节:RAG简介
Retrieval-Augmented Generation(RAG)系统结合了LLM和信息检索。RAG提升了事实准确性,扩展了模型超越训练数据的知识。 - CHUNK2 (第2页): 第2节:架构
主要组件是retriever(检索相关文档)和generator(根据检索到的上下文生成答案)。
这么分的好处是:当页面本身的结构很重要时(比如法律证据、合同条款、教科书章节),这个方法几乎是必不可少的。
7. 按章节或标题分块
核心原理:按照文档中的标题(H1/H2等)进行拆分。
最佳适用场景:技术文档、书籍、白皮书——只要文档有清晰的逻辑章节,这个策略就能发挥最大价值。
举个例子:
# 简介 Retrieval-Augmented Generation(RAG)允许语言模型使用外部信息来改善回答。 # RAG如何工作 RAG首先检索相关文档,然后基于用户查询和上下文生成回答。 # 优点 RAG提升了事实准确性,并支持使用私有或更新的数据。
分块后的效果:
- CHUNK1: # 简介
Retrieval-Augmented Generation(RAG)允许语言模型使用外部信息来改善回答。 - CHUNK2: # RAG如何工作
RAG首先检索相关文档,然后基于用户查询和上下文生成回答。 - CHUNK3: # 优点
RAG提升了事实准确性,并支持使用私有或更新的数据。
这么分的好处是:每个块对应一个自然的主题边界,检索准确性会大幅提升。用户可以直接检索整个主题或章节,而不是零碎的片段。
8. 按关键词分块
核心原理:每次遇到特定关键词(比如"步骤"、"诊断"、"注意")就直接拆分。
最佳适用场景:表格、日志、带有重复关键词的技术说明。医疗记录、步骤指南都是它的拿手好戏。
举个例子:
诊断:急性支气管炎。 症状:持续咳嗽、轻度发烧、胸部不适。 处方:阿莫西林500毫克,每日三次,连续7天。 注意:建议患者休息和补充水分。
分块后的效果(关键词为"注意:"):
- CHUNK1: 诊断:急性支气管炎。
症状:持续咳嗽、轻度发烧、胸部不适。
处方:阿莫西林500毫克,每日三次,连续7天。 - CHUNK2: 注意:建议患者休息和补充水分。
这么分的好处是:它能将语义上相关的信息自然地保持在一起,非常适合结构化记录。
9. 按实体分块
核心原理:利用命名实体识别(NER)技术,将句子或段落按照实体(人物、组织、产品等)进行分组。
最佳适用场景:新闻、法律文档、产品评论——一切实体引用很重要的场景都适用。
举个例子:
苹果在年度活动中发布了新款iPhone型号。Tim Cook展示了聚焦于相机改进和电池续航的新功能。与此同时,三星据传下个月将推出竞争设备。
分块后的效果(NER识别"Apple"、"Tim Cook"、"Samsung"):
- CHUNK1: 苹果在年度活动中发布了新款iPhone型号。Tim Cook展示了聚焦于相机改进和电池续航的新功能。
- CHUNK2: 与此同时,三星据传下个月将推出竞争设备。
这么分的好处是:它支持基于实体的检索——比如当模型被问及"苹果发布了什么?"时,可以直接获取所有与"Apple"相关的块。
10. 按Token分块
核心原理:按照模型的处理单位(token)来拆分,而非单纯计算字数。
最佳适用场景:当LLM的上下文窗口有限时——比如模型只能处理1024或2048个token,你必须精确控制输入。
举个例子:
生成式AI的快速增长推动了聊天机器人、文档摘要和数据提取应用的激增。随着模型越来越大,它们需要更多内存和计算,但也为跨行业的自动化开辟了新可能。组织正在探索结合传统算法和大型语言模型的混合系统,以提升性能和成本效率。
分块后的效果(每个块25个token):
- CHUNK1: 生成式AI的快速增长推动了聊天机器人、文档摘要和数据提取应用的激增。
- CHUNK2: 随着模型越来越大,它们需要更多内存和计算,但也为跨行业的自动化开辟了新可能。
- CHUNK3: 组织正在探索结合传统算法和大型语言模型的混合系统,以提升性能和成本效率。
这么分的好处是:它能精准控制模型输入的大小,避免截断错误,特别适合API驱动的应用。
11. 表格分块
核心原理:将每个表格提取出来作为一个单独的块(可以按行,也可以保持整个表格)。
最佳适用场景:发片、财务报告、科学论文——一切带表格的文档都适用。
举个例子:
表格1:季度收入 | 季度 | 收入(美元) | |---------|---------------| | 2024年Q1 | $1,000,000 | | 2024年Q2 | $1,200,000 | 公司经历了稳定增长,Q2增长尤为明显。
分块后的效果:
- CHUNK1: 表格1:季度收入
| 季度 | 收入(美元) |
|2024年Q1 | $1,000,000 |
|2024年Q2 | $1,200,000 | - CHUNK2: 公司经历了稳定增长,Q2增长尤为明显。
这么分的好处是:表格可以作为结构化数据被单独解析。当模型被问及"2024年Q2的收入是多少?"时,可以直接命中对应的表格块。
12. 递归分块
核心原理:先按大块(段落或章节)拆分,如果某个块太大,再进一步拆(按句子、单词),直到每个块都符合大小要求。
最佳适用场景:长篇、冗长的访谈记录、采访稿,或者段落大小严重不均的文档。
举个例子:
访谈记录: John:一开始我们主要关注用户体验。我们跑了好几次调查,收集反馈,快速迭代。 后来,随着产品成熟,我们开始解决扩展性和基础设施问题。这阶段更具挑战,因为我们需要在扩展时保持系统正常运行。
步骤1:先按段落拆分
- 段落1:"John:一开始我们主要关注用户体验。我们跑了好几次调查,收集反馈,快速迭代。"
- 段落2:"后来,随着产品成熟,我们开始解决扩展性和基础设施问题。这阶段更具挑战,因为我们需要在扩展时保持系统正常运行。"
步骤2:段落仍然太大,拆成句子
分块后的效果(最大20个单词):
- CHUNK1: John:一开始我们主要关注用户体验。
- CHUNK2: 我们跑了好几次调查,收集反馈,快速迭代。
- CHUNK3: 后来,随着产品成熟,我们开始解决扩展性和基础设施问题。
- CHUNK4: 这阶段更具挑战,因为我们需要在扩展时保持系统正常运行。
这么分的好处是:它保证了没有块会超出系统的承受能力,是一种"保底"策略。
13. 语义分块
核心原理:利用嵌入向量或AI模型,将讨论同一主题的句子或段落自动分组。
最佳适用场景:混合主题的数据集——比如客服工单、问答文档、FAQ。
举个例子:
问:如何重置密码? 答:前往登录页面,点击"忘记密码"。 问:如何更改邮箱地址? 答:访问你的个人资料设置,输入新邮箱。 问:退款政策是什么? 答:购买后30天内可退款。
分块后的效果(语义模型检测到"账户管理"和"支付"两个主题):
- CHUNK1: 问:如何重置密码?
答:前往登录页面,点击"忘记密码"。
问:如何更改邮箱地址?
答:访问你的个人资料设置,输入新邮箱。 - CHUNK2: 问:退款政策是什么?
答:购买后30天内可退款。
这么分的好处是:它能让检索结果与用户意图高度匹配,大大减少上下文缺失和"胡编乱造"的概率。
14. 层次分块
核心原理:构建多级分块体系——按章节、再按小节、再按段落逐级划分。
最佳适用场景:大型、结构良好的文本,比如书籍、技术文档、法律条文。
举个例子:
第1章:简介 1.1节:什么是RAG? Retrieval-Augmented Generation(RAG)结合了LLM和外部数据源,提供最新答案。 1.2节:为什么用RAG? RAG扩展了模型能力,提升事实准确性,支持私有或动态信息。
分块后的效果:
- CHUNK1: 第1章:简介
- CHUNK2: 1.1节:什么是RAG?
Retrieval-Augmented Generation(RAG)结合了LLM和外部数据源,提供最新答案。 - CHUNK3: 1.2节:为什么用RAG?
RAG扩展了模型能力,提升事实准确性,支持私有或动态信息。
这么分的好处是:它赋予了RAG系统"不同粒度"的检索能力——可以检索宏观的章节,也可以定位到详细的小节。
15. 内容类型感知分块
核心原理:对表格、列表、图片、纯文本等不同类型的内容,采用不同的分块策略。
最佳适用场景:包含混合内容的文档——比如PDF、研究论文、报告。
举个例子:
摘要: 本研究探讨了RAG管道的分块策略。结果显示分块方法影响答案质量。 表格1:测试结果 | 方法 | 准确率 | |----------------|--------| | 按句子分块 | 85% | | 滑动窗口分块 | 90% | 图1:管道图(此处未显示图片)
分块后的效果:
- CHUNK1: 摘要:
本研究探讨了RAG管道的分块策略。结果显示分块方法影响答案质量。 - CHUNK2: 表格1:测试结果
| 方法 | 准确率 |
| 按句子分块 | 85% |
| 滑动窗口分块 | 90% | - CHUNK3: 图1:管道图(此处未显示图片)。
这么分的好处是:它确保了检索不会把表格、文本和图片混为一谈,支持针对性检索——比如"给我看结果表格"或"获取摘要"。
结论
关键要点:没有一种分块策略能够通吃所有数据。正确的做法是:根据你的文档格式、具体使用场景和用户问题的特点来灵活选择分块方法。最后,务必在实际数据上进行测试,并持续检查LLM的输出是否出现了上下文漂移或"胡编乱造"的情况。
