カテゴリ:

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

AI_EXTRACT

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

構文

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

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

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

AI_EXTRACT( <file>, <responseFormat> )
AI_EXTRACT( file => <file>,
            responseFormat => <responseFormat>,
            [ config => <config_object> ]

引数

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?']]
    
  • サブオブジェクトに``'type': 'string'``を持つJSONスキーマ。

    {
      'schema': {
        'type': 'object',
        'properties': {
          'title': {
            'description': 'What is the title of the document?',
            'type': 'string'
          }
        }
      }
    }
    

リスト抽出形式

サブオブジェクトに``'type': 'array'``を持つJSONスキーマを使用して、値の配列を抽出します。

{
  'schema': {
    'type': 'object',
    'properties': {
      'employees': {
        'description': 'What are the names of employees?',
        'type': 'array'
      }
    }
  }
}

テーブル抽出形式

'type': 'object'``および``column_ordering``を持つJSONスキーマを使用して、表形式のデータを抽出します。各列は、'type': 'array'``と、ファイルの列名と一致する``description``を持つネストされたプロパティとして定義されます。

{
  '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'
          }
        }
      }
    }
  }
}

注釈

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

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

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

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

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

config => config_object

構成設定を指定する:ref:OBJECT <label-data_type_object>`値。このオブジェクトを指定するには、 :ref:`OBJECT 定数 <label-object_constant> を使用します。

このオブジェクトでは、次のキーと値のペアを指定できます。

キー

説明

scale_factor

1.0から4.0までの数値。基礎となるモデルによって処理される前に、入力ファイルのページをスケーリングします。これにより、OCRの品質を強化し、抽出結果を改善できます。

以下のシナリオで予期しない、または不明確な応答を受け取った場合は、``scale_factor``を使用します。

  • A4より大きいページサイズのドキュメント

  • 小さなテキスト、詳細な視覚要素、高密度なレイアウトを含むドキュメント

  • 抽出されたテキストに誤字や文字レベルのOCRエラーが含まれている

省略された場合、AI_EXTRACTはデフォルト値('scale_factor': 1.0')を使用します。

戻り値

抽出された情報を含むJSONオブジェクト。応答の構造は、抽出のタイプによって異なります。+1

エンティティ抽出

抽出された各エンティティのキーと値のペアを持つJSONオブジェクトを返します。

{
  "error": null,
  "response": {
    "title": "Financial report"
  }
}

リスト抽出

抽出された値の配列を持つJSONオブジェクトを返します。

{
  "error": null,
  "response": {
    "employees": [
      "Smith",
      "Johnson",
      "Doe"
    ]
  }
}

テーブル抽出

抽出されたテーブルを表す列配列を持つJSONオブジェクトを返します。

{
  "error": null,
  "response": {
    "income_table": {
      "income": ["$120 678","$130 123","$150 998"],
      "month": ["February", "March", "April"]
    }
  }
}

組み合わせ抽出

1回の呼び出しでエンティティ、リスト、テーブルを抽出すると、応答にはすべての抽出タイプが含まれます。

{
  "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トークンとしてカウントされます

  • ``scale_factor``パラメーターを使用すると、消費されるトークン数と、1回の呼び出しで処理できるページ数が変わります。

    • 消費される入力トークンの数は、``scale_factor``に比例して増加します。

    • AI_EXTRACTで処理できるドキュメントあたりの最大ページ数は、``scale_factor``ずつ減少します。

    トークン数およびページ数とscale_factorの関係

    scale_factor

    ページあたりのトークン数

    ドキュメントあたりの最大ページ数

    2

    970 * 2 = 1940トークン

    125/2 = 62.5(62に切り捨て)

    2.5

    970 * 2.5 = 2425トークン

    125/2.5 = 50

    4

    970 * 4 = 3880トークン

    125/4 = 31.25(31に切り捨て)

  • 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 {file_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?'}
    );
    
  • 次の例では、入力テキストからエンティティを抽出して解析します。

    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?"}')
    );
    
  • 次の例では、``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?']]
    );
    
  • 次の例では、ステージ上のディレクトリ内のすべてのファイルからエンティティを抽出します。

    注釈

    ディレクトリテーブルが有効になっていることを確認します。詳細については、 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);
    
  • 次の例では、JSONスキーマを使用して、``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'
            }
          }
        }
      }
    );
    

リスト抽出

次の例では、``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'
        }
      }
    }
  }
);

テーブル抽出

次の例では、 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'
            }
          }
        }
      }
    }
  }
);

組み合わせ抽出

次の例では、1回の呼び出しで``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'
        }
      }
    }
  }
);

カスタムスケール係数による抽出

次の例では、2.0のスケール係数を使用して、``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'
        }
      }
    }
  },
  config => {'scale_factor': 2.0}
);

微調整された``arctic-extract``モデルを使用した抽出

AI_EXTRACT 関数による推論に微調整した arctic-extract モデルを使用するには、次の例に示すように、 model パラメーターを使用してモデルを指定します。

SELECT AI_EXTRACT(
  model => 'db.schema.my_tuned_model',
  file => TO_FILE('@db.schema.files','document.pdf')
);

次の例に示すように、 responseFormat パラメーターを使用すると、微調整に使用される質問を上書きできます。

SELECT AI_EXTRACT(
  model => 'db.schema.my_tuned_model',
  file => TO_FILE('@db.schema.files','document.pdf'),
  responseFormat => [['name', 'What is the first name of the employee?'], ['city', 'Where does the employee live?']]
);

次の例では、微調整された``arctic-extract``モデルと2.0のスケール係数を使用して、``invoice.pdf``ファイルからデータを抽出します。

SELECT AI_EXTRACT(
  model => 'db.schema.my_tuned_model',
  file => TO_FILE('@db.schema.files', 'invoice.pdf'),
  config => {'scale_factor': 2.0}
);

詳細については、 微調整 arctic-extract モデル をご参照ください。