使用 AI_EXTRACT 从文档中提取信息

AI_EXTRACT 是一个 Cortex AI 函数,允许您从文本或文档文件中提取结构化信息(如实体、列表和表),方法是用自然语言提出问题或描述要提取的信息。它可以与其他函数结合使用,为各种用例创建自定义文档处理管道(请参阅 Cortex AI 函数:文档)。

AI_EXTRACT 可以处理各种格式的文档(支持 29 种语言),并从文本密集型段落和图形形式的内容中提取信息,例如徽标、手写文本(如签名)、表或复选标记。AI_EXTRACT 可以提取以下结构化格式的信息:

  • 实体:用自然语言提问或描述要提取的信息(如城市、街道或 ZIP 代码)。

  • 列表(或数组):您可以提供用于提取文档中信息数组或列表的 JSON 架构,例如银行对账单中所有账户持有人的姓名或文档中所有地址的列表。

  • 表:提供 JSON 架构,以通过指定表标题和应提取的列的列表,来提取文档中的表数据。

AI_EXTRACT 通过同时处理多个文档,自动根据您的工作负载进行扩展。可以直接从对象存储中处理文档,以避免不必要的数据移动。

备注

AI_EXTRACT 目前与自定义 网络策略 不兼容。

提取质量

AI_EXTRACT 使用 arctic-extract,一种基于视觉的专有大型语言模型 (LLM),来实现高精度提取。下表列出了该模型在各种标准基准测试中的得分,并与其他热门模型的得分进行了比较:

视觉问答 (VQA)

产品或服务

DocVQA 得分

人工评估

0.9811

Snowflake Arctic-Extract

0.9433

Azure OpenAI GPT-o3

0.9339

Google Gemini 2.5-Pro

0.9316

Google Anthropic Claude 4 Sonnet

0.9119

Azure Document Intelligence + GPT-o3

0.8853

Google Document AI + Gemini

0.8497

Azure OpenAI GPT-o3

0.9339

AWS Textract

0.8313

纯文本问答 (SQuAD v2)

产品或服务

ANLS

完全匹配

Snowflake Arctic-Extract

81.18

78.74

Anthropic Claude 4 Sonnet

80.54

77.10

Meta LLaMA 3.1 405B

80.37

76.56

Meta LLaMA 4 Scout

74.30

70.70

OpenAI GPT 4.1

70.71

66.81

Meta LLaMA 3.1 8B

59.13

54.48

示例

这些示例使用以下图像作为输入文档。文档存储在暂存区中。

公寓购买和销售协议

提取实体

从销售协议中提取卖方姓名和要约到期日期。

SELECT AI_EXTRACT(
  file => TO_FILE('@db.schema.stage','document.pdf'),
  responseFormat => [['seller_name', 'What is the seller name?'], ['address', 'What is the offer expiration date?']]
);
Copy

结果:

{
    "error": null,
    "response": {
        "address": "12/12/2023",
        "seller_name": "Paul Doyle"
    }
}
Copy

提取复选框信息

此示例根据文档中标记的复选框,提取有关未包含项的信息。

SELECT AI_EXTRACT(
  file => TO_FILE('@db.schema.stage','document.pdf'),
  responseFormat => [['flat_items', 'What items are not included with the flat?'], ['default', 'What Default is selected?']]
);
Copy

结果:

{
    "error": null,
    "response": {
        "default": "Forfeiture of Earnest Money",
        "flat_items": "dryer, security system, satellite dish, wood stove, fireplace insert, hot tub, attached speaker(s), generator, other"
    }
}
Copy

提取签名状态

此示例提取有关协议是否已签署的信息。

SELECT AI_EXTRACT(
    file => TO_FILE('@db.schema.stage','document.pdf'),
    responseFormat => [['signature', 'Is this document signed?']]
);
Copy

结果:

{
  "error": null,
    "response": {
        "signature": "no"
    }
}
Copy

提取实体列表

此示例会提取买家姓名列表。

SELECT AI_EXTRACT(
    file => TO_FILE('@db.schema.files', 'report.pdf'),
    responseFormat => {
        'schema': {
        'type': 'object',
        'properties': {
            'buyer_list': {
            'description': 'What are the buyer names?',
            'type': 'array'
            }
        }
        }
    }
);
Copy

结果:

{
    "error": null,
    "response": {
        "buyer_list": [
        "John Davis",
        "Jane Davis"
        ]
    }
}
Copy

提取表信息

此示例会从以下文档中提取表数据。

Granger Causality Tests - P-values
SELECT AI_EXTRACT(
    file => TO_FILE('@db.schema.files', 'report.pdf'),
    responseFormat => {
        'schema': {
            'type': 'object',
            'properties': {
                'income_table': {
                'description': 'Table 2: Granger Causality Tests - P-values',
                'type': 'object',
                'column_ordering': ['description', 'countries','lags','z','z_approx'],
                'properties': {
                    'description': {
                        'description': 'Description',
                        'type': 'array'
                        },
                    'countries': {
                        'description': 'Countries',
                        'type': 'array'
                        },
                    'lags': {
                        'description': 'Lags',
                        'type': 'array'
                        },
                    'z': {
                        'description': 'Z',
                        'type': 'array'
                    },
                    'z_approx': {
                        'description': 'Z approx.',
                        'type': 'array'
                    }
                }
            }
        }
    }
);
Copy
{
    "error": null,
    "response": {
        "income_table": {
            "countries": [
                "33","80","29","84","34"
            ],
            "description": [
                "Commodity exporters",
                "Non-commodity exporters",
                "AE",
                "EMDE",
                "Large or market-dominant countries"
            ],
            "lags": [
                "2","1","1","1","1"
            ],
            "z": [
                "0.11","0.08","0.89","0.12","0.07"
            ],
            "z_approx": [
                "0.25","0.19","0.95","0.25","0.14"
            ]
        }
    }
}
Copy

输入要求

AI_EXTRACT 针对数字化文档和扫描文档进行了优化。下表列出了输入文档的限制和要求:

最大文件大小

100 MB

每个文档的最大页数

125

问题数上限

  • 实体(单个或列表)提取为 100 个问题

  • 表提取为 10 个问题

支持的文件类型

PDF、PPT、PPTX、DOCX、EML、DOC、DOCX、HTM、HTML、TEXT、MD、TXT、BMP、JPEG、JPG、PNG、TIFF、TIF、WEBP

暂存区加密

服务器端加密

访问控制要求

要使用 AI_EXTRACT 函数,ACCOUNTADMIN 角色用户须将 SNOWFLAKE.CORTEX_USER 数据库角色授予将调用该函数的用户。有关详细信息,请参阅 Cortex LLM privileges 主题。

成本注意事项

Cortex AI_EXTRACT 函数的计算费用根据每个文档的页数、输入提示词元数和处理的输出词元数计算。

  • 对于分页文件格式(PDF、DOCX、TIF、TIFF),每页计为 970 个词元。

  • 对于图像文件格式(JPEG、JPG、PNG),每个单独的图像文件计为一页,每页按 970 个词元计费

Snowflake 建议在使用较小仓库(不大于 AI_EXTRACT)的情况下执行调用 Cortex MEDIUM 函数的查询。较大的仓库并不会提高性能。

支持的语言

AI_EXTRACT 支持以下语言

  • 阿拉伯语

  • 孟加拉语

  • 缅甸语

  • 宿务语

  • 中文

  • 捷克语

  • 荷兰语

  • 英语

  • 法语

  • 德语

  • 希伯来语

  • 印地语

  • 印尼语

  • 意大利语

  • 日语

  • 高棉语

  • 韩语

  • 老挝语

  • 马来语

  • 波斯语

  • 波兰语

  • 葡萄牙语

  • 俄语

  • 西班牙语

  • 他加禄语

  • 泰语

  • 土耳其语

  • 乌尔都语

  • 越南语

区域可用性

AI_EXTRACT 的支持适用于以下 Snowflake 区域的账户:

AWS

Azure

US 西部 2

US东部 2

US 东部 1

US 西部 2

US CA 中部 1

US 中南部

欧洲中部 1

欧洲北部

欧洲西部 1

欧洲西部

SA 东部 1

印度中部

AP 东北部 1

日本东部

AP 东南部 2

东南亚澳大利亚东部

AI_EXTRACT 具有跨区域支持。有关启用 Cortex AI 跨区域支持的信息,请参阅 跨区域推理

错误条件

Snowflake Cortex AI_EXTRACT 可能会生成以下错误消息:

消息

解释

Internal error.

出现系统错误。等待并重试。如果错误仍然存在,请联系 Snowflake 支持部门。

Not found.

找不到该文件。

Provided file cannot be found.

找不到该文件。

Provided file cannot be accessed.

当前用户没有足够的权限来访问该文件。

The provided file format {fil_extension} isn't supported.

文档的格式不受支持。

The provided file isn't in the expected format or is client-side encrypted or is corrupted.

文档未存储在采用服务器端加密的暂存区中。

Empty request.

未提供参数。

Missing or empty response format.

未提供响应格式。

Invalid response format.

响应格式不是有效的 JSON。

Duplicate feature name found: {feature_name}.

响应格式包含一个或多个重复的特征名称。

Too many questions: {number} complex and {number} simple = {number} total, complex question weight {number}

问题数量超出允许的限制。

Maximum number of 125 pages exceeded. The document has {actual_pages} pages.

该文档超出了 125 页的限制。

Page size in pixels exceeds 10000x10000. The page size is {actual_px} pixels.

图像输入或转换后的文档页面超出支持的尺寸。

Page size in inches exceeds 50x50 (3600x3600 pt). The page size is {actual_in} inches ({actual_pt} pt).

页面超出支持的尺寸。

Maximum file size of 104857600 bytes exceeded. The file size is {actual_size} bytes.

文档超过 100 MB。

语言: 中文