SPLIT_TEXT_MARKDOWN_HEADER (SNOWFLAKE.CORTEX)

SPLIT_TEXT_MARKDOWN_HEADER 函数根据标题级别将 Markdown 格式的文档拆分为结构化文本块。该函数返回一个对象数组,其中每个对象都包含文本块及其所属的关联标题。

此函数适用于在以下场景中保持文档结构:对内容进行分块以用于嵌入、检索增强生成 (RAG) 或搜索索引时。

该函数首先使用指定的 Markdown 标头对输入文本进行分段,然后递归地使用默认纯文本分隔符(例如 ["nn", "n", " ", ""])对每个段进行分割,以生成所需大小的块。

语法

SNOWFLAKE.CORTEX.SPLIT_TEXT_MARKDOWN_HEADER (
  '<text_to_split>',
  '<headers_to_split_on>',
  <chunk_size>,
  [ <overlap> ]
)
Copy

实参

必填:

'text_to_split'

要拆分的 Markdown 格式的字符串。

'headers_to_split_on'

一种键值映射,其中的键是 Markdown 标头语法(例如 ###),值是用于标记块的元数据字段名称(例如 header_1header_2)。例如:

{
  "#": "header_1",
  "##": "header_2"
}
Copy

此配置将根据 ### 标头拆分文档。在输出中,header_1header_2 字段将包含相应的标头文本值。

chunk_size

一个整数,指定每个块中的最大字符数。该值必须大于零。

可选:

overlap

一个整数,其指定连续块之间要重叠的字符数。如果未提供,则默认为 0。

重叠对于跨区块维护上下文很有用,这可以提高嵌入和检索任务的性能。

返回

返回对象数组。每个对象都具有以下结构:

  • chunk:包含所提取文本的字符串。

  • headers:一个包含 Markdown 标头值的字典,块嵌套在其下面。键与在 headers_to_split_on 映射中提供的键相匹配。

已知限制

在此预览中,错误消息可能很隐秘。如果遇到问题,请验证您的实参是否有效且格式正确。

示例

简单用法

以下示例根据 ### 标头拆分 Markdown 字符串,生成最多 12 个字符的块,并在块之间应用 5 个字符的重叠。

SELECT SNOWFLAKE.CORTEX.SPLIT_TEXT_MARKDOWN_HEADER(
  '# HEADER 1\nthis is text in header 1\n## HEADER 2\nthis is a subheading',
  OBJECT_CONSTRUCT('#', 'header_1', '##', 'header_2'),
  12,
  5
);
Copy
[
  {
    "chunk": "this is text",
    "headers": {
      "header_1": "HEADER 1"
    }
  },
  {
    "chunk": "text in",
    "headers": {
      "header_1": "HEADER 1"
    }
  },
  {
    "chunk": "in header 1",
    "headers": {
      "header_1": "HEADER 1"
    }
  },
  {
    "chunk": "this is a",
    "headers": {
      "header_1": "HEADER 1",
      "header_2": "HEADER 2"
    }
  },
  {
    "chunk": "subheading",
    "headers": {
      "header_1": "HEADER 1",
      "header_2": "HEADER 2"
    }
  }
]

使用 Markdown 格式设置并将结果展平为行格式的示例

以下示例创建表 markdown_docs,每行都包含简短的 Markdown 文档,然后调用 SPLIT_TEXT_MARKDOWN_HEADER 函数根据 Markdown 标头 '#' 和 '##' 拆分每个文档。然后,该函数将每个段拆分为 20 个字符的块,块之间有 5 个字符的重叠。

CREATE OR REPLACE TABLE markdown_docs (doc VARCHAR);

INSERT INTO markdown_docs VALUES
('# Product Overview\nOur system is a high-performance data processing engine.\n\n## Architecture\nIt uses a distributed design optimized for analytics.\n\n## Key Benefits\n- Scalable\n- Cost-efficient\n- Secure'),
('# User Guide\nThis guide describes how to install and use the product.\n\n## Installation\nFollow the steps below to install.\n\n## Usage\nOnce installed, use the CLI or UI for operations.'),
('# FAQ\nHere are answers to commonly asked questions.\n\n## Pricing\nWe offer flexible pricing models.\n\n## Support\nContact our 24/7 support team anytime.');


SELECT
    c.value['chunk']::varchar as chunk,
    c.value['headers']::object as headers,
FROM
    markdown_docs,
    LATERAL FLATTEN(
        SNOWFLAKE.CORTEX.SPLIT_TEXT_MARKDOWN_HEADER(
        doc,
        OBJECT_CONSTRUCT('#', 'header_1', '##', 'header_2'),
        20,
        5
    )
    ) c;
Copy
语言: 中文