カテゴリ:

:doc:`/sql-reference/functions-string`(AI 関数)

AI_EXTRACT

入力文字列またはファイルから情報を抽出します。

構文

入力文字列から情報を抽出する:

AI_EXTRACT( <text>, <responseFormat> )
Copy
AI_EXTRACT( text => <text>,
            responseFormat => <responseFormat> )
Copy

ファイルから情報を抽出する:

AI_EXTRACT( <file>, <responseFormat> )
Copy
AI_EXTRACT( file => <file>,
            responseFormat => <responseFormat> )
Copy

引数

text

抽出用の入力文字列。

file

抽出用の FILE

サポートされているファイル形式:

  • PDF

  • PNG

  • PPTX、 PPT

  • EML

  • DOC、 DOCX

  • JPEG, JPG

  • HTM, HTML

  • TEXT, TXT

  • TIF, TIFF

  • BMP、 GIF、 WEBP

  • MD

ファイルのサイズは100 MB 未満である必要があります。

responseFormat

次の応答形式のいずれかで抽出される情報。

  • ラベルと抽出する情報をマッピングする単純なオブジェクトスキーマ。例:

    {'name': 'What is the last name of the employee?', 'address': 'What is the address of the employee?'}
    
  • 抽出する情報を含む文字列の配列。例:

    ['What is the last name of the employee?', 'What is the address of the employee?']
    
  • 2つの文字列(ラベと抽出する情報)を含む配列の配列。例:

    [['name', 'What is the last name of the employee?'], ['address', 'What is the address of the employee?']]
    
  • 抽出された情報の構造を定義する JSON スキーマ。エンティティとテーブルの抽出をサポートします。例:

    {
      'schema': {
        'type': 'object',
        'properties': {
          'income_table': {
            'description': 'Income for FY2026Q2',
            'type': 'object',
            'column_ordering': ['month', 'income'],
            'properties': {
              'month': {
                'description': 'Month',
                'type': 'array'
              },
              'income': {
                'description': 'Income',
                'type': 'array'
              }
            }
          },
          'title': {
            'description': 'What is the title of the document?',
            'type': 'string'
          },
          'employees': {
            'description': 'What are the names of employees?',
            'type': 'array'
          }
        }
      }
    }
    

    注釈

    • JSON スキーマ形式を他の応答形式と組み合わせることはできません。responseFormatschema キーが含まれている場合、すべての質問を JSON スキーマ内で定義する必要があります。追加キーはサポートされていません。

    • このモデルは、 JSON スキーマの特定の形式のみを受け入れます。最上位タイプは常に、独立して抽出されたサブオブジェクトを含むオブジェクトである必要があります。サブオブジェクトは、テーブル(列を表す文字列のリストのオブジェクト)、文字列のリスト、または文字列の場合があります。

      現在サポートされているスカラー型は文字列のみです。

    • description フィールドを使用して、モデルにコンテキストを提供します。たとえば、モデルがドキュメント内の正しい適切なテーブルをローカライズするのに役立ちます。列のヘッダー名を入力するか、他の方法で列を説明することができます。

    • column_ordering フィールドを使用して、抽出されたテーブル内にあるすべての列の順序を指定します。column_ordering フィールドでは大文字と小文字が区別されます。 properties フィールドで定義された列名と一致する必要があります。順序は、ドキュメントの列の順序を反映する必要があります。

戻り値

抽出された情報を含む JSON オブジェクト。

配列、テーブル、単一値の抽出を含む出力の例:

{
  "error": null,
  "response": {
    "employees": [
      "Smith",
      "Johnson",
      "Doe"
    ],
    "income_table": {
      "income": ["$120 678","$130 123","$150 998"],
      "month": ["February", "March", "April"]
    },
    "title": "Financial report"
  }
}

アクセス制御の要件

ユーザーは、 SNOWFLAKE.CORTEX_USER データベースロール が付与されているロールを使用する必要があります。この権限の付与については、 Cortex LLM 権限 をご参照ください。

使用上の注意

  • AI_EXTRACT はデジタル作成およびスキャン済みドキュメントの両方に最適化されています。

  • 同じ関数呼び出しの中で、 textfile の両方のパラメーターを同時に使用することはできません。

  • 自然言語で質問するか、抽出する情報(都市、通り、 ZIP コードなど)を説明できます。例:

    ['address': 'City, street, ZIP', 'name': 'First and last name']
    
  • 次の言語がサポートされています。

    • アラビア語

    • ベンガル語

    • ビルマ語

    • セブアノ語

    • 中国語

    • チェコ語

    • オランダ語

    • 英語

    • フランス語

    • ドイツ語

    • ヘブライ語

    • ヒンディー語

    • インドネシア語

    • イタリア語

    • 日本語

    • クメール語

    • 韓国語

    • ラオス語

    • マレー語

    • ペルシャ語

    • ポーランド語

    • ポルトガル語

    • ロシア語

    • スペイン語

    • タガログ語

    • タイ

    • トルコ語

    • ウルドゥー語

    • ベトナム語

  • ドキュメントは125ページ以内でなければなりません。

  • 1回の AI_EXTRACT 呼び出しで、エンティティ抽出については最大100件、テーブル抽出については最大10件の質問を行うことができます。

    テーブル抽出質問は、エンティティ抽出質問10件に相当します。たとえば、1回の AI_EXTRACT 呼び出しで、4件のテーブル抽出質問と60件のエンティティ抽出質問を行うことができます。

  • エンティティ抽出の最大出力長は、1問あたり512トークンです。テーブル抽出の場合、モデルは最大4096トークンの回答を返します。

  • クライアント側の暗号化ステージはサポートされていません。

  • 信頼性スコアはサポートされていません。

コストの考慮事項

Cortex AI_EXTRACT関数では、ドキュメントごとのページ数、入力プロンプトトークン、処理される出力トークンに基づいて計算コストが発生します。

  • ページ化されたファイル形式の場合(PDF、DOCX、TIF、TIFF)、各ページは970トークンとしてカウントされます。

  • 画像ファイル形式の場合(JPEG、JPG、PNG)、個々の画像ファイルはページとして請求され、970トークンとしてカウントされます

Snowflake は、Cortex AI_EXTRACT 関数を呼び出すクエリを、小規模なウェアハウス(MEDIUM 以下)で実行することを推奨しています。ウェアハウスが大きくなってもパフォーマンスは向上しません。

リージョンの可用性

AI_EXTRACTは、以下のリージョンのアカウントで利用できます。

クラウドプラットフォーム

リージョン名

Amazon Web Services(AWS)

  • US 東部(バージニア北部)

  • US 西部(オレゴン)

  • カナダ(中部)

  • 南米(サンパウロ)

  • EU (アイルランド)

  • EU (フランクフルト)

  • アジア太平洋(東京)

  • アジア太平洋(シドニー)

Microsoft Azure

  • 東 US 2(バージニア)

  • 西 US 2(ワシントン)

  • 南中央 US (テキサス)

  • 北ヨーロッパ(アイルランド)

  • 西ヨーロッパ(オランダ)

  • 東南アジア(シンガポール)

  • オーストラリア東部(ニューサウスウェールズ)

  • インド中部(プネー)

  • 日本東部(東京)

AI_EXTRACT にはクロスリージョンサポートがあります。Cortex AI クロスリージョンのサポートの有効化については、 クロスリージョン推論 をご参照ください。

エラー条件

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}.

応答形式には、1つ以上の重複した機能名が含まれます。

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 を超えています。

入力文字列からの抽出

  • 次の例では、入力テキストから情報を抽出しています。

    SELECT AI_EXTRACT(
      text => 'John Smith lives in San Francisco and works for Snowflake',
      responseFormat => {'name': 'What is the first name of the employee?', 'city': 'What is the address of the employee?'}
    );
    
    Copy
  • 次の例では、入力テキストから情報を抽出して解析しています。

    SELECT AI_EXTRACT(
      text => 'John Smith lives in San Francisco and works for Snowflake',
      responseFormat => PARSE_JSON('{"name": "What is the first name of the employee?", "address": "What is the address of the employee?"}')
    );
    
    Copy

ファイルからの抽出

  • 次の例では、document.pdf ファイルから情報を抽出しています。

    SELECT AI_EXTRACT(
      file => TO_FILE('@db.schema.files','document.pdf'),
      responseFormat => [['name', 'What is the first name of the employee?'], ['city', 'Where does the employee live?']]
    );
    
    Copy
  • 次の例では、ステージ上のすべてのファイルから情報を抽出しています。

    注釈

    ディレクトリテーブルが有効になっていることを確認します。詳細については、 Manage directory tables をご参照ください。

    SELECT AI_EXTRACT(
      file => TO_FILE('@db.schema.files', relative_path),
      responseFormat => [
        'What is the document ID?',
        'What is the address of the company?'
      ]
    ) FROM DIRECTORY (@db.schema.files);
    
    Copy
  • 次の例では、 report.pdf ファイルから title 値を抽出します。

    SELECT AI_EXTRACT(
      file => TO_FILE('@db.schema.files', 'report.pdf'),
      responseFormat => {
        'schema': {
          'type': 'object',
          'properties': {
            'title': {
              'description': 'What is the title of document?',
              'type': 'string'
            }
          }
        }
      }
    );
    
    Copy
  • 次の例では、 report.pdf ファイルから employees 配列を抽出します。

    SELECT AI_EXTRACT(
      file => TO_FILE('@db.schema.files', 'report.pdf'),
      responseFormat => {
        'schema': {
          'type': 'object',
          'properties': {
            'employees': {
              'description': 'What are the surnames of employees?',
              'type': 'array'
            }
          }
        }
      }
    );
    
    Copy
  • 次の例では、 report.pdf ファイルから income_table テーブルを抽出します。

    SELECT AI_EXTRACT(
      file => TO_FILE('@db.schema.files', 'report.pdf'),
      responseFormat => {
        'schema': {
          'type': 'object',
          'properties': {
            'income_table': {
              'description': 'Income for FY2026Q2',
              'type': 'object',
              'column_ordering': ['month', 'income'],
              'properties': {
                'month': {
                  'description': 'Month',
                  'type': 'array'
                },
                'income': {
                  'description': 'Income',
                  'type': 'array'
                }
              }
            }
          }
        }
      }
    );
    
    Copy
  • 次の例では、 report.pdf ファイルからテーブル( income_table )、単一値( title )、配列( employees )を抽出します。

    SELECT AI_EXTRACT(
      file => TO_FILE('@db.schema.files', 'report.pdf'),
      responseFormat => {
        'schema': {
          'type': 'object',
          'properties': {
            'income_table': {
              'description': 'Income for FY2026Q2',
              'type': 'object',
              'column_ordering': ['month', 'income'],
              'properties': {
                'month': {
                  'description': 'Month',
                  'type': 'array'
                },
                'income': {
                  'description': 'Income',
                  'type': 'array'
                }
              }
            },
            'title': {
              'description': 'What is the title of document?',
              'type': 'string'
            },
            'employees': {
              'description': 'What are the surnames of employees?',
              'type': 'array'
            }
          }
        }
      }
    );
    
    Copy