1. RAG架构中的文档分块技术概述
在构建企业级RAG(检索增强生成)系统时,文档分块技术是数据工程环节中最关键的预处理步骤之一。作为一名经历过多个RAG项目落地的技术负责人,我深刻体会到分块质量直接决定了后续检索和生成的效果上限。
文档分块的本质是将大型文档分解为语义连贯的小片段,使其能够:
- 适配嵌入模型的输入长度限制(如OpenAI text-embedding-3-small最大支持8191 tokens)
- 保持足够的上下文完整性以供LLM理解
- 提高检索环节的精准度和召回率
当前主流的分块方法可分为五大类,每种方法在语义保持、计算效率、实现复杂度等方面存在显著差异。下面我将结合具体案例详细解析各技术的实现细节和选型策略。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 五种分块技术深度解析
2.1 固定大小分块(Fixed-size chunking)
这是最基础的分块方式,通过设定固定的字符数/词数进行机械切分。在LangChain中可通过CharacterTextSplitter快速实现:
python复制from langchain.text_splitter import CharacterTextSplitter
splitter = CharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
separator="\n"
)
chunks = splitter.split_text(document)
核心参数说明:
chunk_size:每个块的字符数,建议范围300-1000chunk_overlap:块间重叠量,通常设为chunk_size的10-20%separator:优先按段落分隔符切分
典型问题与解决方案:
-
句子截断问题:当分块边界恰好切断完整句子时,会导致关键信息分散。解决方法是通过
length_function参数指定按token计数而非字符数。 -
格式敏感性:PDF/HTML等富文本需先提取纯文本。推荐使用
Unstructured库预处理:python复制from unstructured.partition.pdf impor
