- カテゴリ:
- :doc:`/sql-reference/functions-string`(AI 関数) 
AI_FILTER¶
自由形式のプロンプト入力をブールに分類します。現在、テキストと画像の両方のフィルターをサポートしています。
リージョンの可用性¶
次の表は、テキストと画像の両方で AI_FILTER 関数を使用できるリージョンを示しています。
| データ型 | AWS US西部2 (オレゴン) | AWS US東部1 (N.バージニア) | AWSヨーロッパ中部1 (フランクフルト) | AWS ヨーロッパ西部1 (アイルランド) | AWS AP 南東部2 (シドニー) | AWS AP 北東部1 (東京) | Azure東部 US 2 (バージニア) | Azure西ヨーロッパ (オランダ) | AWS (リージョン横断) | 
|---|---|---|---|---|---|---|---|---|---|
| TEXT | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | 
| IMAGE | ✔ | ✔ | ✔ | ✔ | 
構文¶
入力文字列に AI_FILTER を適用します。
AI_FILTER( <input> )
単一の画像に AI_FILTER を適用します。
AI_FILTER( <predicate> , <input> )
PROMPT を活用し、テキストと画像の両方を含む複数の列に AI_FILTER を適用します。
AI_FILTER( PROMPT('<template_string>',  <col_1>, … ) )
引数¶
必須:
入力文字列を指定する場合:
- input
- 分類するテキストを含む文字列。 
1つのファイルでフィルターをかけている場合:
- predicate
- ファイル入力を - TRUEまたは- FALSEのどちらかに分類する指示を含む文字列。
- file
- predicateで指定された指示に基づいて、ファイルが分類される列。AI_FILTER 関数への入力値として IMAGE FILE を使用できます。
PROMPT() 関数を使って入力をフォーマットしている場合:
より複雑なプロンプト、特に複数のファイル列を含むプロンプトについては、 PROMPT を使用して input を作成することができます。
PROMPT() 関数は、文字列と FILE データ型の両方の形式をサポートしています。詳しい使用方法については、 例 をご参照ください。
戻り値¶
指定したテキストに対してステートメントが TRUE と評価されるか FALSE と評価されるかを示すブール値を返します。
アクセス制御の要件¶
ユーザーは、 SNOWFLAKE.CORTEX_USER データベースロール が付与されているロールを使用する必要があります。この権限の詳細については、 必要な権限 をご参照ください。
パフォーマンスとコストの最適化¶
デフォルトでは、AI_FILTER には、対象となるクエリに関するパフォーマンスの最適化が組み込まれています。この最適化では、品質への影響を最小限に抑えながら、パフォーマンスを2~10倍高速化し、最大60%のトークン使用量を削減することができます。
この最適化は、クエリエンジンが適切なパターンを検出すると自動的にトリガーされます。他のクエリ最適化と同様に、Snowflakeは、この最適化がすべてのクエリに適用されることを保証しません。エンジンは、可能な場合に、適応型ルーティングとコンテキスト認識型書き換えを活用して、より効率的な AI オペレーションを実行します。
アカウントでこの最適化を無効にしたい場合は、アカウントマネージャーまでお問い合わせください。
使用上の注意¶
最適なパフォーマンスを得るためには、以下のガイドラインに従ってください。
- AI_FILTER に送られる列に NULL 値が含まれていないことを確認してください。 
- 入力文字列または PROMPT() 引数には英語のプレーンテキストを使用します。 
- 入力テキスト指示の詳細を入力してください。例えば、「満足しているようです」のようなステートメントの代わりに、「以下のサポート記録では、お客様は満足しているように聞こえます」を使用します。 
- 質問の形で入力することを検討してください。例えば、「次のサポート記録では、顧客は満足しているように聞こえますか?」です 
例¶
AI_FILTER: テキスト¶
文字列定数に対する単純なスカラーブール関数として呼び出すことができます。
SELECT AI_FILTER('Is Canada in North America?');
TRUE
この関数を使用するには、指示をテキスト列と CONCAT、 || できます。
WITH reviews AS (
            SELECT 'Wow... Loved this place.' AS review
  UNION ALL SELECT 'The pizza is not good.'
)
SELECT * FROM reviews
WHERE AI_FILTER(CONCAT('The reviewer enjoyed the restaurant: ', review));
複数の列にまたがる形式のテンプレート化をより簡単にするために、Snowflakeは PROMPT を提供しています。例えば、次のとおりです。
WITH reviews AS (
SELECT 'Wow... Loved this place.' AS review
UNION ALL SELECT 'The pizza is not good.'
)
SELECT * FROM reviews
WHERE AI_FILTER(PROMPT('The reviewer enjoyed the restaurant: {0}', review));
+--------------------------+
| REVIEW                   |
|--------------------------+
| Wow... Loved this place. |
+--------------------------+
AI_FILTER の品質を評価しながら、列間で候補述語を比較するのに役立ちます。
WITH country AS (
          SELECT 'Switzerland' AS country,
UNION ALL SELECT 'Korea'
),
region AS (
            SELECT 'Asia' AS region,
  UNION ALL SELECT 'Europe'
)
SELECT country,
      region,
      AI_FILTER(PROMPT('{0} is in {1}', country, region)) AS result
FROM country CROSS JOIN region ;
+-------------+-------+--------+
| COUNTRY     |REGION | RESULT |
|-------------+-------+--------+
| Switzerland |Europe | TRUE   |
|-------------+-------+--------+
| Switzerland | Asia  | FALSE  |
|-------------+-------+--------+
| Korea       |Europe | FALSE  |
+-------------+-------+--------+
| Korea       | Asia  | TRUE   |
+-------------+-------+--------+
JOIN を使った AI_FILTER の使用¶
JOIN で AI_FILTER を使用すると、 AI が推論できる自然言語プロンプトで2つのテーブルをリンクする式を表現できます。
以下の例では、 AI_FILTER 関数のプロンプトを使用して、 RESUMES テーブルと JOBS テーブルを結合しています。
SELECT *
FROM RESUMES
JOIN JOBS
ON AI_FILTER(PROMPT('Evaluate if this resume {0} fits this job description {1}', RESUME.contents, JOBS.jd));
AI_FILTER: 画像¶
以下の例では、指示に基づいて画像ファイルをフィルターしています。
指示述語と画像ファイル列を提供して、画像をフィルターします。
WITH pictures AS (
  SELECT
      TO_FILE(file_url) AS img
  FROM DIRECTORY(@file_stage)
)
SELECT
FL_GET_RELATIVE_PATH(img) AS file_path FROM pictures
WHERE AI_FILTER('Is this a picture of a cat?', img);
WITH pictures AS (
  SELECT
      TO_FILE(file_url) AS img
  FROM DIRECTORY(@file_stage)
)
SELECT
    FL_GET_RELATIVE_PATH(img) AS file_path FROM pictures
WHERE AI_FILTER(PROMPT('{0} is a cat picture', img));
+--------------------------+
|        FILE_PATH         |
|--------------------------+
|        2cats.jpg         |
+--------------------------+
|        cat1.png          |
+--------------------------+
|      orange_cat.jpg      |
+--------------------------+
制限事項¶
- Snowflake AI 関数は、動的テーブルのインクリメンタルリフレッシュをサポートしていません。 
- Snowflake AI 関数は、以下のステージタイプのステージファイルから作成された FILEs では動作しません。 - 暗号化モード - TYPE = 'SNOWFLAKE_FULL'付き内部ステージ
- 顧客側の暗号化モードを持つ外部ステージ: - TYPE = 'AWS_CSE'
- TYPE = 'AZURE_CSE'
 
- ユーザーステージ、テーブルステージ 
- 名前が二重引用符で囲まれているステージ 
 
