Cortex AISQL Images

Cortex AI Imagesを使えば、以下のことが可能です。

  • 画像の比較

  • 画像のキャプション

  • 画像の分類

  • 画像からのエンティティ抽出

  • 検索システムで使用する埋め込みベクトルを生成します。

  • グラフとチャートのデータを使用して質問に答える

これらのタスクは以下の関数で実行できます。

入力要件

COMPLETE マルチモーダルでは、以下のような特徴を持つ画像を処理することができます。

要件

ファイル名の拡張子

.jpg.jpeg.png.webp.gif

ステージ暗号化

サーバー側の暗号化

データ型

FILE

注釈

ステージングされたファイルを処理することは、現在、カスタムネットワークポリシーと互換性がありません。

画像処理用ステージの作成

処理する画像を格納するのに適したステージを作成します。ステージにはディレクトリテーブルとサーバー側の暗号化が必要です。

以下の SQL は、適切な内部ステージを作成します。

CREATE OR REPLACE STAGE input_stage
    DIRECTORY = ( ENABLE = true )
    ENCRYPTION = ( TYPE = 'SNOWFLAKE_SSE' );
Copy

次の SQL は、Amazon S3に外部ステージを作成します。Azure、 GCP の外部ステージにも対応しています。

CREATE OR REPLACE STAGE input_stage
    URL='s3://<s3-path>/'
    DIRECTORY = ( ENABLE = true )
    CREDENTIALS = (AWS_KEY_ID = <aws_key_id>
    AWS_SECRET_KEY = <aws_secret_key>)
    ENCRYPTION = ( TYPE = 'AWS_SSE_S3' );
Copy

注釈

新しいファイルや更新されたファイルが利用可能になったときに、外部ステージのディレクトリテーブルを自動的に更新するには、ステージの作成時に AUTO_REFRESH = true オプションを渡します。詳細については、 CREATE STAGE をご参照ください。

画像を分析する

COMPLETE 関数は、単一の画像または複数の画像を処理します(たとえば、さまざまな画像間のエンティティの違いを抽出します)。関数呼び出しでは、次のように指定します。

  • 使用するマルチモーダルモデル

  • プロンプト

  • FILE オブジェクトを介した画像ファイルのステージパス。

ビジョンQ&Aの例

次の例では、AnthropicのClaude Sonnet 3.5モデルを使って、 @myimages ステージに保存されている円グラフ science-employment-slide.jpeg を要約しています。

2023年に数学が「極めて重要」とされる職業の分布を示す円グラフ

2023年に数学が「極めて重要」と考えられる職業の分布

SELECT AI_COMPLETE('claude-3-5-sonnet',
    'Summarize the insights from this pie chart in 100 words',
    TO_FILE('@myimages', 'science-employment-slide.jpeg'));
Copy

応答:

This pie chart shows the distribution of occupations where mathematics is considered "extremely important" in 2023.
Data scientists dominate with nearly half (48.7%) of all such positions, followed by operations research analysts
at 29.6%. The remaining positions are distributed among statisticians (7.8%), actuaries (7.2%), physicists (5.1%),
mathematicians (0.6%), and other mathematical science occupations (1.1%). This distribution highlights the growing
importance of data science in mathematics-intensive careers, while traditional mathematics roles represent a smaller
share of the workforce.

画像の例を比較する

注釈

現在、一つのプロンプトで複数の画像をリファレンスできるのは、Anthropic (claude) と Meta (llama) モデルだけです。他のモデルの複数画像サポートは、将来のリリースで利用可能になる可能性があります。

一度の COMPLETE 呼び出しで複数の画像を処理するには、 PROMPT ヘルパー関数 を使います。次の例では、AnthropicのClaude Sonnet 3.5モデルを使用して、 @myimages ステージから2つの異なる広告クリエイティブを比較しています。

電気自動車の2つの広告イメージ

電気自動車の広告

SELECT AI_COMPLETE('claude-3-5-sonnet',
    PROMPT('Compare this image {0} to this image {1} and describe the ideal audience for each in two concise bullets no longer than 10 words',
    TO_FILE('@myimages', 'adcreative_1.png'),
    TO_FILE('@myimages', 'adcreative_2.png')
));
Copy

応答:

First image ("Discover a New Energy"):
• Conservative luxury SUV buyers seeking a subtle transition to electrification

Second image ("Electrify Your Drive"):
• Young, tech-savvy urbanites attracted to bold, progressive automotive design

画像の例を分類する

次の例では、AI_CLASSIFY を使用して不動産アプリケーションの画像を分類しています。

不動産のステージングされたリビングルームの画像

次の SQL は AI_CLASSIFY 関数を使用して画像を居住エリア、キッチン、浴室、庭または主寝室の写真として分類します。

SELECT AI_CLASSIFY(TO_FILE('@my_images', 'REAL_ESTATE_STAGING.PNG'),
    ['Living Area', 'Kitchen', 'Bath', 'Garden', 'Master Bedroom']) AS room_classification;
Copy

応答:

{ "labels": [ "Living Area" ] }

以下に示す SQL は、上の画像で見つかったオブジェクトを長椅子、窓、テーブル、テレビ、または芸術作品として分類します。

SELECT AI_CLASSIFY (TO_FILE ('@my_images', 'REAL_ESTATE_STAGING.PNG'),
    ['Couch', 'Window', 'Table', 'Television', 'Art'],  {'output_mode': 'multi'} )
    AS living_room_objects;
Copy

応答:

{
  "labels": [
    "Art",
    "Couch",
    "Table",
    "Window"
  ]
}

画像を検索する

AI_EMBED を使用してターゲット画像に類似した画像を検索できます。まず、AI_EMBED 関数を使用して、ターゲット画像の埋め込みベクトルを生成し、その視覚的特徴を画像の特徴の数値表現である抽象的なベクトル空間にマッピングします。その後、ベクトル類似度関数を使用して、この埋め込みベクトルを他の画像の埋め込みベクトルと比較し、共通または類似の視覚的特徴に基づいて類似度スコアを生成できます。このスコアは、ターゲット画像との類似性に基づいて、画像を分類、ランク付け、またはフィルタリングするために使用できます。

都市にいる大衆が写っている画像
都市にいる大衆が写っている画像

たとえば、上記の画像がある場合、次の SQL は各画像の埋め込みベクトルを生成し、コサイン類似度を用いてベクトルを比較します。約0.5である結果は、画像がやや類似していることを示しています。どちらの写真も都市の設定で取得されており、背景には大衆が写っていますが、メインのタイトルが異なります。

WITH ai_image_embeddings as (
    SELECT
        AI_EMBED('voyage-multimodal-3',
            TO_FILE ('@my_images', 'CITY_WALKING1.PNG')) as image1_embeddings,
        AI_EMBED('voyage-multimodal-3',
            TO_FILE ('@my_images', 'CITY_WALKING2.PNG')) as image2_embeddings
)
SELECT VECTOR_COSINE_SIMILARITY(image1_embeddings,image2_embeddings) as similarity FROM ai_image_embeddings;
Copy
0.5359029029

ターゲット画像に類似した画像を検索するには、AI_SIMILARITY を使用します。以下の例では、おそらく数千存在する画像に対して類似性スコアを計算し、以下のバイクの広告に最も類似した広告クリエイティブを返します。

画像検索に使用するバイクの広告の画像
SELECT
    TO_FILE('@ad_images', relative_path) as ALL_ADS
    FROM DIRECTORY(@ad_images)
WHERE AI_SIMILARITY(TO_FILE('@ad_images', 'image_226.jpg'), ALL_ADS) >= 0.5;
Copy

クエリは、類似度スコアが0.50より大きいマルチモーダルテーブルから画像を返します。特定された画像の一つ(image_226.jpg)は、参照として使用したものです。

+-----------------------------------------------------------+
| {} ALL_ADS                                                |
+-----------------------------------------------------------+
|  { "CONTENT_TYPE": "image/jpeg",                          |
|    "ETAG": "686897696a7c876b7e",                          |
|    "LAST_MODIFIED": "Wed, 26 Mar 2025 18:11:45 GMT",      |
|    "RELATIVE_PATH": "image_226.jpg",                      |
|    "SIZE": 39086,                                         |
|    "STAGE": "@ad_images" }                                |
+-----------------------------------------------------------+
|  { "CONTENT_TYPE": "image/jpeg",                          |
|    "ETAG": "e7b678c7a696798686",                          |
|    "LAST_MODIFIED": "Wed, 26 Mar 2025 18:11:57 GMT",      |
|    "RELATIVE_PATH": "image_441.jpg",                      |
|    "SIZE": 12650,                                         |
|    "STAGE": "@ad_images" },                               |
+-----------------------------------------------------------+

モデルの制限

Snowflake Cortex で利用可能なすべてのモデルには、モデルの コンテキストウィンドウ として知られる、入出力トークンの総数に制限があります。コンテキストウィンドウのサイズはトークン単位です。コンテキストウィンドウの制限を超える入力はエラーになります。

テキストモデルの場合、トークンは一般的に約4文字のテキストを表すため、制限に対応する単語数はトークン数よりも少なくなります。

画像モデルの場合、画像あたりのトークン数はビジョンモデルのアーキテクチャに依存します。プロンプト内のトークン(たとえば、「これは何の動物ですか」)も、モデルのコンテキストウィンドウに貢献します。

モデル

コンテキストウィンドウ(トークン)

ファイルタイプ

ファイルサイズ

プロンプトごとの画像

openai-gpt-4.1

1,047,576

.jpg、.jpeg、.png、.webp、.gif

10MB

5

openai-o4-mini

1,047,576

.jpg、.jpeg、.png、.webp、.gif

10MB

5

claude-4-opus

200,000

.jpg、.jpeg、.png、.webp、.gif

3.75 MB [L1]

20

claude-4-sonnet

200,000

.jpg、.jpeg、.png、.webp、.gif

3.75 MB [L1]

20

claude-3-7-sonnet

200,000

.jpg、.jpeg、.png、.webp、.gif

3.75 MB [L1]

20

claude-3-5-sonnet

200,000

.jpg、.jpeg、.png、.webp、.gif

3.75 MB [L1]

20

llama4-maverick

128,000

.jpg、.jpeg、.png、.webp、.gif、.bmp

10 MB

10

llama-4-scout

128,000

.jpg、.jpeg、.png、.webp、.gif、.bmp

10 MB

10

pixtral-large

128,000

.jpg、.jpeg、.png、.webp、.gif、.bmp

10 MB

1

voyage-multimodal-3

32,768

.jpg、.png、.pg、.gif、.bmp

10 MB

1

[L1] (1,2,3,4)

画像は8000x8000ピクセルより小さくなければなりません。個別の画像に制限が適用されます。

コストの考慮事項

請求はトークンの処理数に応じて変化します。画像あたりのトークン数はビジョンモデルのアーキテクチャに依存します。

  • Anthropic (claude) モデルの計算式は、トークン = (ピクセル幅 x ピクセル高) / 750 です。

  • Mistral (pixtral) モデルは、各画像を16x16ピクセルのバッチに分割し、各バッチをトークンに変換します。トークンの総数は、おおよそ (ピクセル単位の幅 / 16) * (ピクセル単位の高さ / 16) に相当します。

  • Meta (llama) モデルは、正方形のタイルで画像をタイル化しようとします。画像の縦横比とサイズによって、タイルの数は最大16個になり、それぞれが約153個のトークンで表されます。

  • オープン AI モデルは画像を再スケールし、正方形のパッチで並べます。openai-gpt-4.1 の場合は、画像の比率とサイズに応じて、トークン数は211(最大512x512pxの画像)、352(横方向の長さがより長い1024pxの非正方形の画像)、または630トークン(1024x1024px以上の正方形の画像)から913トークン(短い側の長さが1024pxの非正方形の画像)までの場合があります。openai-o4-mini の場合は、再スケーリングロジックがより複雑になり、トークン数は86(128x512px)から1428(2048x1024px)まで変化し、線形パターンに従いません。

  • voyage-multimodal-3 は、サイズがおよそ14x14pxの画像パッチの配列を操作します。画像は、最小64個のパッチと最大2500個のパッチを持つグリッドでカバーされるように再スケールされます。2つの余分な画像トークンが追加されるため、入力は画像のサイズとアスペクト比率に応じて、66から2502トークンの範囲になります。

注釈

COUNT_TOKENS 関数は現在、画像入力をサポートしていません。

ビジョンモデルの選択

COMPLETE 関数は、能力、遅延、コストが異なる複数のモデルをサポートしています。クレジットあたりのパフォーマンスを最適化するには、コンテンツのサイズとタスクの複雑さに合ったモデルを選択します。

モデル

MMMU

Mathvista

ChartQA

DocVQA

VQAv2

GPT-4o

68.6

64.6

85.1

88.9

77.8

openai-gpt-4.1

75.0

72.0

openai-o4-mini

81.6

84.3

claude-3-5-sonnet

68.0

64.4

87.6

90.3

70.7

llama-4-maverick

73.4

73.7

90

94.4

llama-4-scout

69.4

70.7

88.8

94.4

pixtral-large

64.0

69.4

88.1

85.7

67

ベンチマークは以下の通りです。

  • MMMU: 大学レベルの推論を必要とする学際的なタスクでマルチモーダルモデルを評価します。

  • Mathvista: 視覚的な文脈の中での数学的推論のベンチマーク。

  • ChartQA: チャートに関する複雑な推論問題を評価します。

  • DocVQA と VQv2: ドキュメント上の視覚的な質問応答のためのベンチマーク。

マルチモーダル埋め込みの場合は、voyage-multimodal-3 モデルのみが現在利用可能です。voyage-multimodal-3 は、テキストと画像を埋め込むことができる最先端のマルチモーダル埋め込みモデルです。PDFs、スライド、テーブル、図のスクリーンショットなどのソースから主要な視覚的特徴を抽出できます。これにより、複雑なドキュメント解析ワークフローの必要性が軽減されます。Voyage AI 内部ベンチマークによると、voyage-multimodal-3 モデルは、OpenAICLIP の大規模なAmazon Titanマルチモーダル、およびCohereマルチモーダルv3などの競合するモデルを上回る性能を発揮します。

リージョンの可用性

この機能のサポートは、以下のSnowflakeリージョンのアカウントでネイティブに利用可能です。

モデル
AWS US西部2
(オレゴン)
AWS US東部1
(N.バージニア)
AWSヨーロッパ中部1
(フランクフルト)

claude-3-5-sonnet

claude-3-7-sonnet [A1]

claude-4-sonnet [A1]

claude-4-opus [A1]

pixtral-large

llama4-maverick

llama4-scout

voyage-multimodal-3 [A1]

[A1] (1,2,3,4)

モデルはリージョン横断推論でのみ利用可能。

AI_COMPLETE は :doc:`クロスリージョン推論 </user-guide/snowflake-cortex/cross-region-inference>`を通じてその他のリージョンで利用可能です。

エラー条件

メッセージ

説明

外部関数 SYSTEM$COMPLETE_WITH_IMAGE_INTERNAL リモートサービスエラーでリクエストに失敗しました:400 '"無効な画像パス"

ファイル拡張子またはファイル自体のいずれかがモデルで受け入れられません。このメッセージは、ファイルパスが間違っている、つまり指定された場所にファイルが存在しないことを意味する場合もあります。ファイル名は大文字と小文字を区別します。

セキュアオブジェクトのエラー

ステージが存在しない可能性があります。ステージ名を確認し、ステージが存在し、アクセス可能であることを確認します。ステージパスの先頭には、 @myimages のように、必ずアット(@)記号を使用してください。

リモートサービスエラーで外部関数 _COMPLETE_WITH_PROMPT のリクエストに失敗しました:400 '"リクエストパラメーターが無効です: サポート対象外のイメージ形式: イメージ/**

claude-3-5-sonnet、.jpeg、.png、.webp、.gif 以外の形式がサポートされていません。

リモートサービスエラーで外部関数 _COMPLETE_WITH_PROMPT のリクエストに失敗しました:400 '"リクエストパラメーターが無効です: 画像データが5.00 MB を超えました"

claude-3-5-sonnet に提供された画像は5 MB を超えています。