Skip to main content
许多对话或问答应用在嵌入和向量化存储之前需要对输入文档进行分块处理。 这些笔记来自Pinecone提供了一些实用建议:
如前所述,分块的目标是将具有共同上下文的内容保留在一起。基于此,我们可能希望特别尊重文档自身的结构。例如,Markdown文件通过标题组织内容。在特定标题组内创建分块是一个直观的想法。为解决此挑战,我们可以使用MarkdownHeaderTextSplitter。这将根据指定的标题集对Markdown文件进行分割。 例如,如果我们想分割此Markdown:
我们可以指定要分割的标题:
内容将根据共同标题进行分组或分割:
让我们来看一些示例。

基础用法:

默认情况下,MarkdownHeaderTextSplitter会从输出分块的文档内容中移除被分割的标题。此行为可通过设置strip_headers = False禁用。
默认的MarkdownHeaderTextSplitter会移除空白和换行符。如需保留原始Markdown格式,请参考ExperimentalMarkdownSyntaxTextSplitter。

如何将Markdown行作为独立文档返回

默认情况下,MarkdownHeaderTextSplitter会根据headers_to_split_on中指定的标题进行行聚合。可通过指定return_each_line禁用此行为:
注意此处metadata会为每个文档保留标题信息。

如何约束分块大小:

在每个Markdown组内,我们可以应用任何文本分割器,例如RecursiveCharacterTextSplitter,以进一步控制分块大小。

故障排除:chunk_overlap似乎未生效

  • 在基于标题的分割后(例如MarkdownHeaderTextSplitter),请使用**split_documents(docs)(而非split_text)以确保重叠应用于每个章节**,并保留章节级元数据(标题)。
  • 重叠仅在单个章节超过chunk_size并被分割为多个分块时生效。
  • 重叠不会跨越章节/文档边界(例如# H1 → ## H2)。
  • 若标题成为极小的独立分块,请将strip_headers设置为True以避免标题行成为独立分块。
  • 若文本缺乏换行/空白,请确保在separators中保留备用"",使分割器仍能执行分块和重叠处理。

官方原文:src/oss/python/integrations/splitters/markdown_header_metadata_splitter.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026