本文系统介绍 RAG 系统中常用的文本分块策略,助你高效构建知识库检索体系。
背景
随着企业知识库中文档数量与类型的不断增多,如何高效地对这些文档进行分块处理,成为 RAG(Retrieval-Augmented Generation)系统中的一个关键问题。不同类型的文档结构差异大,分块维度多样,缺乏统一的标准流程。
目的
本文旨在系统介绍 RAG 中常用的几种分块方式,帮助读者理解不同策略的适用场景,并简化分块的实际操作步骤。
目录
RAG 系统概述
RAG 系统简介
RAG(Retrieval-Augmented Generation)是一种结合检索与生成的混合模型,通过从外部知识库中检索相关信息,辅助大语言模型生成更准确、更具上下文的回答。
RAG 工作流程
- 用户输入查询
- 检索模块从知识库中查找相关文档片段
- 将检索结果与查询一起输入生成模型
- 生成模型输出最终回答
分块核心挑战
分块定义与重要性
分块(Chunking)是指将长文本切分为若干较短片段的过程。合理的分块能提升检索效率与生成质量,是 RAG 系统的基石。
分块大小与上下文
分块过大可能导致噪声增多,过小则可能丢失关键上下文。需根据任务需求平衡块大小与信息完整性。
分块策略
固定大小分块
通过设置固定的 token 数量进行分块,可设置重叠 token 以保持上下文连贯。
示例:
原文:Artificial intelligence is transforming technology and shaping the future.
参数:chunk_size = 6, chunk_overlap = 2
块1:Artificial intelligence is transforming technology and
块2:technology and shaping the future.
基于内容的分块
根据标点、换行等自然断句符进行分块,更符合语言结构。
示例:
原文:RAG非常有用。它提升了答案的准确性。开发者都喜欢它。
分割策略:"\n\n", "\n", ". ", "? ", "! ", " ", ""
块1:RAG非常有用。
块2:它提升了答案的准确性。
块3:开发者都喜欢它。
文档结构分块
根据文档的章节、标题、列表等结构进行分块,适用于结构化文档。
- 技术文档/Markdown分块
- 按标题分块(##)是绝佳选择。
- 对话/脚本分块
- 按说话人切换分块。
- 长篇文章/论文分块
- 语义段落分块
- 代码分块
- 按函数、类等逻辑单元分块。
语义分块
将语义相近的句子或段落合并为一个块,通常借助嵌入模型或聚类算法实现。
示例:
原文:
OpenAI发布了新的GPT-4o模型。它在多模态任务上表现卓越。
苹果公司即将召开全球开发者大会。预计将发布iOS 18和AI功能。
分析:前两句关于"GPT模型",后两句关于"苹果发布会"。
块1:OpenAI发布了新的GPT-4o模型。它在多模态任务上表现卓越。
块2:苹果公司即将召开全球开发者大会。预计将发布iOS 18和AI功能。
LLM分块
利用大语言模型理解文本内容,按需生成结构化分块结果。
示例:
原文:凉拌黄瓜:黄瓜用刀拍散,切块。加入蒜末、醋、生抽和香油,拌匀即可。
提示词:请将以下菜谱文本按每道菜拆分成独立的块,并以JSON格式输出。每个JSON对象包含"菜名"和"做法"两个字段。
结果:
[{
"菜名": "凉拌黄瓜",
"做法": "黄瓜用刀拍散,切块。加入蒜末、醋、生抽和香油,拌匀即可。"
}]
多向量匹配
将同一文本生成多种向量表示(如摘要向量、问题向量、原文向量),以支持不同检索需求。
示例:
原文:光合作用是植物利用光能,将二氧化碳和水转化为有机物(如葡萄糖)并释放氧气的过程。这一过程主要发生在叶绿体中。
摘要向量:"解释了光合作用的基本定义和发生地点。"
问题向量:"什么是光合作用?"、"光合作用在哪里发生?"、"植物如何进行光合作用?"
原始文本向量:光合作用是植物利用光能,将二氧化碳和水转化为有机物(如葡萄糖)并释放氧气的过程。这一过程主要发生在叶绿体中。
分块策略决策流程
选择分块策略时应考虑:
- 文档类型(结构化/非结构化)
- 检索目标(事实查询/语义理解)
- 模型限制(上下文长度)
- 计算资源
最佳实践与工具
分块最佳实践
- 结合多种分块策略
- 动态调整块大小与重叠度
- 评估分块效果与检索性能
- 根据反馈迭代优化
分块工具推荐
- LangChain:提供多种文本分割器
- Haystack:支持自定义分块管道
- LlamaIndex:专为RAG设计的分块与检索工具
总结与展望
分块策略总结
- 固定分块:简单高效,适用于通用场景
- 内容分块:保留语言结构,适合自然语言文本
- 语义分块:上下文连贯,检索精度高
- LLM分块:灵活智能,适用于复杂结构化需求
未来发展趋势
- 自适应分块:根据查询动态调整块大小与边界
- 多模态分块:支持图像、表格等多类型数据
- 端到端优化:将分块与检索、生成联合训练