Extraindo informações de documentos com AI_EXTRACT

AI_EXTRACT é uma função de AI do Cortex que permite extrair informações estruturadas, como entidades, listas e tabelas, de arquivos de texto ou de documento, fazendo perguntas em linguagem natural ou descrevendo as informações a serem extraídas. Ela pode ser usada com outras funções para criar pipelines de processamento de documentos personalizados para uma variedade de casos de uso (consulte Cortex AI Functions: documentos).

A AI_EXTRACT pode processar documentos de vários formatos (em 29 idiomas) e extrair informações tanto de parágrafos com muito texto quanto de conteúdo em formato gráfico, como logotipos, texto manuscrito (por exemplo, assinaturas), tabelas ou marcas de seleção. A AI_EXTRACT pode extrair informações nos seguintes formatos estruturados:

  • Entidade: faça perguntas em linguagem natural ou descreva as informações a serem extraídas (como cidade, rua ou código ZIP).

  • Lista (ou matriz): você pode fornecer um esquema JSON para extrair uma matriz ou lista de informações presentes no documento, como o nome de todos os titulares de contas em um extrato bancário ou uma lista de todos os endereços em um de documento.

  • Tabela: forneça um esquema JSON para extrair dados tabulares presentes no documento especificando o título da tabela e uma lista de colunas que devem ser extraídas.

A AI_EXTRACT é dimensionada automaticamente conforme sua carga de trabalho, processando vários documentos ao mesmo tempo. Os documentos podem ser processados diretamente do armazenamento de objetos para evitar movimentação desnecessária de dados.

Nota

AI_EXTRACT é atualmente incompatível com políticas de rede personalizadas.

Qualidade da extração

A AI_EXTRACT usa arctic-extract, um modelo de linguagem grande (Large Language Model, LLM) baseado em visão proprietária que entrega extração de alta precisão. A tabela a seguir apresenta as pontuações do modelo com base em vários parâmetros de comparação padrão, com as pontuações de outros modelos populares para comparação:

Resposta visual a perguntas (VQA)

Oferta

Pontuação DocVQA

Avaliação humana

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

Resposta somente texto a perguntas (SQuAD v2)

Oferta

ANLS

Correspondência exata

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

Exemplos

Estes exemplos usam a imagem a seguir como documento de entrada. O documento é armazenado em uma área de preparação.

Contrato de compra e venda de condomínio

Extração de uma entidade

Extrai o nome do vendedor e a data de expiração da oferta do contrato de venda.

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

Resultado:

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

Extraindo informações das caixas de seleção

Este exemplo extrai informações sobre itens que não estão incluídos, com base nas caixas de seleção marcadas no documento.

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

Resultado:

{
    "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

Extraindo status da assinatura

Este exemplo extrai informações sobre o contrato ter sido ou não assinado.

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

Resultado:

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

Extraindo uma lista de entidades

Este exemplo extrai uma lista de nomes de compradores.

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

Resultado:

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

Extrair informações da tabela

Este exemplo extrai dados tabulares do documento a seguir.

Testes de causalidade de Granger – P-valores
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

Requisitos de entrada

A AI_EXTRACT é otimizada para documentos originalmente digitais e que foram digitalizados. A seguinte tabela lista as limitações e os requisitos dos documentos de entrada:

Tamanho máximo do arquivo

100 MB

Máximo de páginas por documento

125

Máximo de perguntas

  • 100 perguntas para extração de entidades (única ou lista)

  • 10 perguntas para extração de tabela

Tipos de arquivos compatíveis

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

Criptografia de estágio

Criptografia do lado do servidor

Requisitos de controle de acesso

Para usar a função AI_EXTRACT, um usuário com a função ACCOUNTADMIN deve conceder a função de banco de dados SNOWFLAKECORTEX_USER ao usuário que chamará a função. Veja o tópico Cortex LLM privileges para mais detalhes.

Considerações sobre custo

A função AI_EXTRACT do Cortex incorre em custos de computação com base no número de páginas por documento, nos tokens de prompts de entrada e nos tokens de saída processados.

  • Para formatos de arquivo paginados (PDF, DOCX, TIF, TIFF), cada página é contada como 970 tokens.

  • Para formatos de arquivo de imagem (JPEG, JPG, PNG), cada arquivo de imagem individual é cobrado como uma página e contado como 970 tokens

O Snowflake recomenda a execução de consultas que chamem a função AI_EXTRACT do Cortex em um warehouse menor (até o tamanho MEDIUM). Warehouses maiores não aumentam o desempenho.

Linguagens compatíveis

A AI_EXTRACT oferece suporte aos seguintes idiomas:

  • Árabe

  • Bengali

  • Birmanês

  • Cebuano

  • Chinês

  • Tcheco

  • Holandês

  • Inglês

  • Francês

  • Alemão

  • Hebraico

  • Hindi

  • Indonésio

  • Italiano

  • Japonês

  • Quemer

  • Coreano

  • Lao

  • Malaio

  • Persa

  • Polonês

  • Português

  • Russo

  • Espanhol

  • Tagalo

  • Tailandês

  • Turco

  • Urdu

  • Vietnamita

Disponibilidade regional

O suporte para AI_EXTRACT está disponível para contas nas seguintes regiões Snowflake:

AWS

Azure

US West 2

East US 2

US East 1

West US 2

US CA Central 1

South Central US

Europe Central 1

North Europe

Europe West 1

West Europe

SA East 1

Central India

AP Northeast 1

Japan East

AP Southeast 2

Southeast Asia Australia East

A AI_EXTRACT tem suporte entre regiões. Para obter informações sobre como habilitar o suporte entre regiões do Cortex AI, consulte Inferência entre regiões.

Condições de erro

O Snowflake Cortex AI_EXTRACT pode produzir as seguintes mensagens de erro:

Mensagem

Explicação

Internal error.

Ocorreu um erro no sistema. Aguarde e tente novamente. Se o problema persistir, entre em contato com o suporte Snowflake.

Not found.

O arquivo não foi encontrado.

Provided file cannot be found.

O arquivo não foi encontrado.

Provided file cannot be accessed.

O usuário atual não tem privilégios suficientes para acessar o arquivo.

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

O documento não está em um formato compatível.

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

O documento não está armazenado em um área de preparação com criptografia do lado do servidor.

Empty request.

Nenhum parâmetro foi fornecido.

Missing or empty response format.

Nenhum formato de resposta foi fornecido.

Invalid response format.

O formato de resposta não é um JSON válido.

Duplicate feature name found: {feature_name}.

O formato de resposta contém um ou mais nomes de recursos duplicados.

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

O número de perguntas excede o limite permitido.

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

O documento excede o limite de 125 páginas.

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

A entrada de imagem ou uma página de documento convertida é maior do que as dimensões permitidas.

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

A página é maior do que as dimensões permitidas.

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

O documento tem mais de 100 MB.