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> ]
)
实参¶
必填:
'text_to_split'
要拆分的 Markdown 格式的字符串。
'headers_to_split_on'
一种键值映射,其中的键是 Markdown 标头语法(例如
#
、##
),值是用于标记块的元数据字段名称(例如header_1
、header_2
)。例如:{ "#": "header_1", "##": "header_2" }
此配置将根据
#
和##
标头拆分文档。在输出中,header_1
和header_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
);
[
{
"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;