Snowflake Cortex SUMMARIZE入門|AI_SUMMARIZE_AGG・AI_AGGとの使い分けを解説

Snowflake CortexのSUMMARIZE関数入門を示すアイキャッチ図。AI_SUMMARIZE_AGGやAI_AGGとの違いや使い分けのポイントを整理し、テキスト要約処理の活用シーンを視覚的に解説するイメージ Snowflake
この記事をシェアする𝕏B!FacebookLINEPocket

はじめに:Snowflake上でテキスト要約をSQLだけで実行する

Snowflakeでは、SQLだけでテキスト要約を実行できるCortex AI関数が用意されています。1つの英語テキストをシンプルに要約したい場合は SNOWFLAKE.CORTEX.SUMMARIZE、日本語や箇条書きなど要約形式を指定したい場合は AI_COMPLETE、複数行のレビューや問い合わせをまとめたい場合は AI_SUMMARIZE_AGG、特定観点で洞察を出したい場合は AI_AGG を使い分けるのがおすすめです。

本記事では、これらの要約系AI関数を初心者向けに整理し、用途別の使い分けと実務で使えるSQL例をまとめます。Cortex全体の位置づけはSnowflake Cortex入門もあわせてご覧ください。

結論:要約系AI関数の使い分け

やりたいこと優先候補理由
英語の単一テキストを短く要約したいSNOWFLAKE.CORTEX.SUMMARIZE構文がシンプル
日本語で要約したいAI_COMPLETE出力言語を指定しやすい
箇条書き・文字数・形式を指定したいAI_COMPLETEプロンプトで柔軟に指定できる
複数行のレビューをまとめたいAI_SUMMARIZE_AGGテキスト列全体を要約できる
複数行から不満点や改善要望を抽出したいAI_AGG自然言語の指示で観点指定できる
カテゴリ別・商品別に要約したいAI_SUMMARIZE_AGG + GROUP BYグループ単位で集約できる
大量データを要約したいAI_SUMMARIZE_AGG / AI_AGG行ごとのAI_COMPLETEより集約向き

SUMMARIZEとは?

SNOWFLAKE.CORTEX.SUMMARIZE は、指定した英語テキストを要約するシンプルなCortex関数です。入力は文字列1つで、出力も要約された文字列です。モデル名やプロンプト、出力形式を細かく指定する関数ではありません。

  • SUMMARIZEは英語入力テキスト向けとして公式に説明されています。
  • モデル名は指定しません。
  • 要約形式や出力言語を指定したい場合は AI_COMPLETE を使います。
  • 複数行をまとめて要約したい場合は AI_SUMMARIZE_AGG を使います。

SUMMARIZEの基本構文

引数は要約したいテキスト1つだけです。戻り値は要約された文字列になります。

SNOWFLAKE.CORTEX.SUMMARIZE( <text> )

SUMMARIZEで英語の単一テキストを要約する

SELECT SNOWFLAKE.CORTEX.SUMMARIZE(
  'Snowflake is a cloud data platform that supports data warehousing, data lakes, data engineering, data science, and secure data sharing. Its storage and compute resources are separated, allowing workloads to scale independently.'
) AS summary;

1つの英語パラグラフを短くまとめたい、というシンプルな用途にはこれだけで十分です。

テーブル列をSUMMARIZEで要約する

SELECT
  ticket_id,
  ticket_body,
  SNOWFLAKE.CORTEX.SUMMARIZE(ticket_body) AS summary
FROM support_tickets
WHERE ticket_body IS NOT NULL
LIMIT 10;
  • まずは LIMIT を付けて少量で試します。
  • WHERE 条件でNULLや空文字を除外します。
  • 英語テキストの単一行要約に向きます。
  • 同じ行を何度も要約すると、そのたびにコストが発生します。

日本語要約や形式指定にはAI_COMPLETEを使う

SUMMARIZE はシンプルですが、「日本語で」「3行で」「箇条書きで」「結論・理由・次アクションに分けて」などの指定は苦手です。このような場合は、プロンプトで自由に指示できる AI_COMPLETE が向いています。

SELECT AI_COMPLETE(
  model => 'mistral-large2',
  prompt => '次の問い合わせ内容を日本語で3行に要約してください。問い合わせ内容: ' || ticket_body,
  model_parameters => {
    'temperature': 0.2,
    'max_tokens': 200
  }
) AS summary_ja
FROM support_tickets
WHERE ticket_body IS NOT NULL
LIMIT 10;

AI_COMPLETE の使い方や model_parameters の詳細はSnowflake AI_COMPLETE関数入門でまとめています。

複数行の要約にはAI_SUMMARIZE_AGGを使う

AI_SUMMARIZE_AGG は、テキスト列全体をまとめて要約する集計関数です。1行ずつ要約する SUMMARIZEAI_COMPLETE と違い、複数行のレビュー、問い合わせ、アンケート、通話メモなどをまとめて要約したいときに向いています。

SELECT AI_SUMMARIZE_AGG(review_text) AS review_summary
FROM product_reviews
WHERE review_text IS NOT NULL;

集約関数なので、複数行をまとめて1つの要約に集約します。レビュー一覧全体や問い合わせ履歴全体から「全体的な傾向」をつかむのに便利です。

観点指定ありの要約・洞察抽出にはAI_AGGを使う

AI_SUMMARIZE_AGG は汎用的な要約を返します。一方で、AI_AGG は自然言語の指示を指定できるため、「不満点だけを抽出」「改善要望を3つに整理」「解約理由を分類」など、観点を指定した分析に向いています。

SELECT AI_AGG(
  review_text,
  'このレビュー全体から、ユーザーが不満に感じている点を3つにまとめてください'
) AS pain_points
FROM product_reviews
WHERE review_text IS NOT NULL;

AI_SUMMARIZE_AGGとAI_AGGの違い

比較項目AI_SUMMARIZE_AGGAI_AGG
目的テキスト列全体の汎用要約指示に基づく洞察抽出・観点指定要約
プロンプト不要必要
向いている用途レビュー一覧の全体要約、問い合わせ全体の要約不満点、改善要望、解約理由、傾向分析
GROUP BY使える使える
大量データ向いている向いている
初心者向けより簡単指示文の設計が必要

GROUP BYと組み合わせてカテゴリ別に要約する

商品カテゴリ別、店舗別、問い合わせ種別別など、グループ単位で要約したい場合は GROUP BY と組み合わせます。

SELECT
  product_category,
  AI_SUMMARIZE_AGG(review_text) AS category_summary
FROM product_reviews
WHERE review_text IS NOT NULL
GROUP BY product_category
ORDER BY product_category;

同じパターンで、カテゴリ別に改善ポイントを AI_AGG で抽出することもできます。

SELECT
  product_category,
  AI_AGG(
    review_text,
    'このカテゴリのレビューから、改善すべきポイントを3つにまとめてください'
  ) AS improvement_points
FROM product_reviews
WHERE review_text IS NOT NULL
GROUP BY product_category
ORDER BY product_category;

要約結果をテーブルに保存する

AI関数を毎回実行するとコストが増えていきます。一度作った要約結果はテーブルに保存し、ダッシュボードやレポートでは保存済みの要約を参照するのが基本です。

CREATE OR REPLACE TABLE product_review_category_summary AS
SELECT
  product_category,
  AI_SUMMARIZE_AGG(review_text) AS category_summary,
  CURRENT_TIMESTAMP() AS summarized_at
FROM product_reviews
WHERE review_text IS NOT NULL
GROUP BY product_category;
  • AI関数を毎回実行するとコストが増えます。
  • 一度作った要約結果はテーブルに保存します。
  • ダッシュボードやレポートでは保存済みの要約結果を参照します。
  • 更新頻度(日次・週次など)を決めて再生成します。

差分処理で再実行コストを抑える

  • 新しいレビューや問い合わせだけを対象にします。
  • 更新日時やIDを使って、前回処理済みのデータを除外します。
  • 週次・日次などバッチ単位で要約します。
  • 大量データを毎回全件再要約しないように設計します。

日次バッチで前日分のレビューだけを要約する例:

CREATE OR REPLACE TABLE daily_review_summary AS
SELECT
  DATE_TRUNC('day', created_at) AS review_date,
  AI_SUMMARIZE_AGG(review_text) AS daily_summary,
  CURRENT_TIMESTAMP() AS summarized_at
FROM product_reviews
WHERE review_text IS NOT NULL
  AND created_at >= DATEADD('day', -1, CURRENT_TIMESTAMP())
GROUP BY 1;

本番では、INSERT INTOMERGE を使って既存テーブルに追記する設計にすると、履歴を残しつつコストを抑えられます。

要約系AI関数を使うための権限

SUMMARIZE / AI_SUMMARIZE_AGG / AI_AGG / AI_COMPLETE を使うには、利用ロールにAI関数の利用権限と、必要なデータベースロールが必要です。検証環境では広めの権限、本番環境では必要な関数だけに絞る設計を検討します。

検証用ロール例(AI関数全体を許可):

USE ROLE ACCOUNTADMIN;

CREATE ROLE IF NOT EXISTS ai_summary_user_role;

GRANT USE AI FUNCTIONS ON ACCOUNT TO ROLE ai_summary_user_role;
GRANT DATABASE ROLE SNOWFLAKE.AI_FUNCTIONS_USER TO ROLE ai_summary_user_role;

GRANT ROLE ai_summary_user_role TO USER <USER_NAME>;

個別関数だけ許可する例(AI_SUMMARIZE_AGG / AI_AGG のみ):

USE ROLE ACCOUNTADMIN;

CREATE ROLE IF NOT EXISTS ai_summarize_only_role;

GRANT USE AI FUNCTION AI_SUMMARIZE_AGG
  ON ACCOUNT TO ROLE ai_summarize_only_role;

GRANT USE AI FUNCTION AI_AGG
  ON ACCOUNT TO ROLE ai_summarize_only_role;

GRANT DATABASE ROLE SNOWFLAKE.AI_FUNCTIONS_USER
  TO ROLE ai_summarize_only_role;

GRANT ROLE ai_summarize_only_role TO USER <USER_NAME>;
  • USE AI FUNCTIONS はAI関数全体を許可する権限です。
  • USE AI FUNCTION <関数名> は個別AI関数を許可する権限です。
  • SNOWFLAKE.CORTEX_USER または SNOWFLAKE.AI_FUNCTIONS_USER のデータベースロールが必要になる場合があります。
  • 本番では必要な関数だけに絞ります。
  • PUBLIC に広く付与しすぎないようにしてください。

コスト・トークン・ウェアハウスの考え方

  • AI要約関数は入力テキスト量、対象行数、出力長に応じてコストが増えます。
  • AI_COMPLETE は入力トークンと出力トークンの両方に注意します。
  • AI_SUMMARIZE_AGGAI_AGG は複数行をまとめて処理できますが、大量データでは事前検証が必要です。
  • AI関数を呼び出すクエリでは、通常のウェアハウス稼働コストも発生します。
  • 必要以上に大きなウェアハウスを使ってもAI関数自体が速くなるとは限りません。
  • まずは LIMIT や日付条件で対象を絞ります。
  • 要約結果は保存し、同じデータを何度も再要約しないようにします。
  • Cortex AI関数の使用量はUsage Historyで確認します。

料金体系の全体像はSnowflakeの料金体系をやさしく解説、急増時の対処はSnowflakeのクレジット急増の原因調査と削減方法もご覧ください。

使用量を確認するSQL

要約系AI関数の利用状況は、Account Usageの専用ビューで確認できます。まずは列構成を確認してから集計するのがおすすめです。

DESC VIEW SNOWFLAKE.ACCOUNT_USAGE.CORTEX_AI_FUNCTIONS_USAGE_HISTORY;

日別・関数別の消費(要約系関数のみ抽出):

SELECT
  DATE_TRUNC('day', START_TIME) AS usage_date,
  FUNCTION_NAME,
  SUM(CREDITS) AS total_credits,
  COUNT(DISTINCT QUERY_ID) AS query_count
FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_AI_FUNCTIONS_USAGE_HISTORY
WHERE START_TIME >= DATEADD('day', -30, CURRENT_TIMESTAMP())
  AND FUNCTION_NAME IN ('SUMMARIZE', 'AI_SUMMARIZE_AGG', 'AI_AGG', 'AI_COMPLETE')
GROUP BY 1, 2
ORDER BY usage_date DESC, total_credits DESC;

ユーザー別の消費(直近3か月、要約系関数のみ):

SELECT
  DATE_TRUNC('month', h.START_TIME) AS usage_month,
  u.NAME AS user_name,
  u.EMAIL,
  h.FUNCTION_NAME,
  SUM(h.CREDITS) AS total_credits,
  COUNT(DISTINCT h.QUERY_ID) AS query_count
FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_AI_FUNCTIONS_USAGE_HISTORY h
JOIN SNOWFLAKE.ACCOUNT_USAGE.USERS u
  ON h.USER_ID = u.USER_ID
WHERE h.START_TIME >= DATEADD('month', -3, CURRENT_TIMESTAMP())
  AND h.FUNCTION_NAME IN ('SUMMARIZE', 'AI_SUMMARIZE_AGG', 'AI_AGG', 'AI_COMPLETE')
GROUP BY 1, 2, 3, 4
ORDER BY usage_month DESC, total_credits DESC;
  • CORTEX_AI_FUNCTIONS_USAGE_HISTORY はCortex AI関数の使用状況確認に使います。
  • ビューの列名や利用可否はSnowflakeの仕様変更で変わる可能性があります。
  • まずは DESC VIEW で列名を確認してください。
  • 古い記事や環境では CORTEX_FUNCTIONS_USAGE_HISTORY などのビュー名を見かける場合があるため、最新の公式ドキュメントで確認してください。

SUMMARIZEに向いている用途・注意が必要な用途

向いている用途

  • 英語の問い合わせ文の簡易要約
  • カスタマーレビュー一覧の全体要約
  • 問い合わせカテゴリ別の傾向把握
  • アンケート自由記述の要約
  • 通話メモや議事メモの一次整理
  • 日次・週次の問い合わせ傾向レポート
  • 不満点や改善要望の抽出

注意が必要な用途

  • 法務・医療・金融など高リスク文書の最終判断
  • 事実確認が必要なレポートの確定版
  • 日本語の微妙なニュアンスが重要な文書
  • 個人情報や機密情報を含む大量要約
  • AI出力をそのまま顧客へ返す処理
  • コスト見積もりなしの全件要約

よくあるエラーと確認ポイント

症状確認ポイント
権限エラーになるUSE AI FUNCTIONS または個別関数権限、AI_FUNCTIONS_USER / CORTEX_USER を確認
NULLが返る入力が空、長すぎる、未対応言語、リージョン制限を確認
日本語要約が期待通りでないAI_COMPLETE で日本語出力を明示する
要約がざっくりしすぎるAI_AGG で観点を指定する
カテゴリ別に要約できないGROUP BY と集計関数の使い方を確認
コストが増える対象件数、再実行、保存有無、Usage Historyを確認
出力を細かく制御できないSUMMARIZE ではなく AI_COMPLETE を使う

コスト超過を防ぐ仕組みはSnowflake Resource Monitor入門も参考になります。

まとめ

Snowflakeでテキスト要約を行う場合、1つの英語テキストをシンプルに要約するなら SNOWFLAKE.CORTEX.SUMMARIZE、日本語や箇条書きなど形式を指定したいなら AI_COMPLETE、複数行のレビューや問い合わせをまとめたいなら AI_SUMMARIZE_AGG、不満点や改善要望など特定観点で洞察を出したいなら AI_AGG を使い分けるのがおすすめです。実務利用では、まず少量データで検証し、要約結果をテーブルに保存し、Usage Historyでコストを確認しながら運用しましょう。

参考リンク

※リンク先のパスはSnowflake側の構成変更で変わる可能性があります。最新URLは公式ドキュメントのトップから検索してください。

関連記事

この記事をシェアする𝕏B!FacebookLINEPocket