はじめに
Snowflake Cortex AI関数を全部試してみた — SQLだけでここまでできるAI処理(以降、1本目のブログと呼称)でCortex AI関数を検証した際、同じJSON分析クエリを2つのモデルで実行してコストを比較しました。
結果は次のとおりでした。
| 比較項目 | snowflake-arctic | llama4-maverick |
|---|---|---|
| クレジット消費 | $0.000952 | $0.000154 |
同じクエリ、同じデータなのに、モデルが違うだけでクレジット消費に約6倍の差が出ました。5行のサンプルデータでこの差ですから、本番環境で数万〜数百万行のデータに流した場合のインパクトは無視できません。
Cortex AIはサーバレスで手軽に使える反面、従量課金です。「SQLの中でAIが動く」便利さや、「自然言語で分析できる」基盤を本番で運用するには、コスト管理の仕組みが欠かせません。
本記事では、Cortex AIのコストを「見積もる → 確認する → 監視する → 制御する」の4ステップで管理する方法を紹介します。
Cortex AIのコスト構造を理解する
コストの基本
Cortex AI関連機能のコストは、トークン消費量に基づくクレジットとして計上されます。アカウント全体のAIサービスコストは、以下のクエリで確認できます。
SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.METERING_DAILY_HISTORY
WHERE SERVICE_TYPE = 'AI_SERVICES';
ただしこのビューはアカウント単位の集計で、どの機能がどれだけコストを使ったかの内訳はわかりません。機能別の詳細を確認するには、それぞれ専用のUSAGE_HISTORYビューを使います。
機能別のコスト確認先一覧
Cortex AI関連のコストは機能ごとに異なるビューに記録されます。以下に主要な対応関係を整理しました。
| 機能 | コスト対象 | 確認先ビュー | ユーザー別集計 |
|---|---|---|---|
| Cortex AI関数 | AI関数の実行(LLM推論) | CORTEX_AISQL_USAGE_HISTORY | 可能(USER_ID) |
| Cortex Analyst | Cortex Analyst REST APIの利用 | CORTEX_ANALYST_USAGE_HISTORY | 可能(USERNAME) |
| Cortex Search | Embeddingトークン+Servingコンピュート | CORTEX_SEARCH_DAILY_USAGE_HISTORY | 不可 |
| Cortex Agents | エージェントのオーケストレーション | CORTEX_AGENT_USAGE_HISTORY | 可能(USER_NAME) |
| Snowflake Intelligence | Snowflake Intelligenceの利用 | SNOWFLAKE_INTELLIGENCE_USAGE_HISTORY | 可能(USER_NAME) |
| ドキュメント処理 | AI_PARSE_DOCUMENT等の実行 | CORTEX_DOCUMENT_PROCESSING_USAGE_HISTORY | 不可 |
| ファインチューニング | モデルの微調整 | CORTEX_FINE_TUNING_USAGE_HISTORY | — |
注目すべきは「ユーザー別集計」の列です。Cortex AI関数やCortex Analystはユーザー単位でコストを追跡できますが、Cortex Searchやドキュメント処理はユーザー単位の追跡ができません。誰がどれだけ使っているかをチーム内で把握したい場合は、この制約を意識しておく必要があります。
ステップ1:事前にコストを見積もる
AI_COUNT_TOKENS関数
本番データに対してAI関数を実行する前に、AI_COUNT_TOKENS関数でトークン消費量を見積もることができます。この関数は実際にLLMを呼び出さずにトークン数だけを計算するため、コストをかけずに事前確認ができます。
-- 1行分のトークン数をモデル別に比較
SELECT
AI_COUNT_TOKENS('AI_COMPLETE', 'snowflake-arctic', 'プロンプト文...') AS tokens_arctic,
AI_COUNT_TOKENS('AI_COMPLETE', 'llama4-maverick', 'プロンプト文...') AS tokens_llama;
テーブル全体の見積もり
テーブル全行に対する合計トークン数を事前に確認することで、実行前にコスト感をつかめます。
SELECT
'snowflake-arctic' AS model,
SUM(AI_COUNT_TOKENS('AI_COMPLETE', 'snowflake-arctic',
CONCAT('プロンプト: ', text_column))) AS total_tokens
FROM target_table
UNION ALL
SELECT
'llama4-maverick' AS model,
SUM(AI_COUNT_TOKENS('AI_COMPLETE', 'llama4-maverick',
CONCAT('プロンプト: ', text_column))) AS total_tokens
FROM target_table;
1本目のブログの検証では、同じ5行のデータに対してsnowflake-arcticが692トークン、llama4-maverickが438トークンと約1.6倍の差がありました。モデルによってトークナイザが異なるため、同じ日本語テキストでも消費量が変わります。モデル選択はコストに直結するため、精度・速度だけでなくトークン効率も含めて判断することをおすすめします。
AI_COUNT_TOKENSの制約
便利な関数ですが、以下の制約があります。
- AI_COMPLETEでClaudeモデルやOpenAIモデルには対応していない
- AI_PARSE_DOCUMENTやAI_EXTRACTなどトークンベースでない関数には対応していない
- テキストベースの計算のため、AI_COMPLETEのマルチモーダル入力(画像)には対応していない
ステップ2:実行後のコストを確認する
CORTEX_AISQL_USAGE_HISTORYの使い方
AI関数の実行後、実際に消費したクレジットはCORTEX_AISQL_USAGE_HISTORYビューで確認できます。
SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_AISQL_USAGE_HISTORY
LIMIT 5;
主要なカラムは以下の通りです。
| カラム名 | 内容 |
|---|---|
| USAGE_TIME | 利用時刻 |
| MODEL_NAME | 使用モデル名 |
| FUNCTION_NAME | 使用関数名 |
| TOKEN_CREDITS | 消費クレジット |
| TOKENS | 合計トークン数 |
| TOKEN_CREDITS_GRANULAR | input/outputの内訳(JSON) |
| TOKENS_GRANULAR | input/outputトークン数の内訳(JSON) |
| QUERY_ID | 実行クエリのID |
QUERY_IDで特定クエリのコストを追跡
1本目のブログの検証では、QUERY_IDを使って特定のクエリのコストをピンポイントで確認しました。
SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_AISQL_USAGE_HISTORY
LIMIT 5;
TOKEN_CREDITS_GRANULARカラムには、inputとoutputのクレジットが分かれてJSON形式で格納されています。1本目の検証結果では、以下のような内訳でした。
| モデル | input | output | 合計 |
|---|---|---|---|
| snowflake-arctic | 0.000581 | 0.000370 | 0.000952 |
| llama4-maverick | 0.000053 | 0.000102 | 0.000154 |
inputとoutputの両方でコスト差があることがわかります。モデルによってトークン単価が異なるため、同じトークン数でもクレジット消費が異なる点に注意が必要です。
注意点
ACCOUNT_USAGEビューには反映までのラグがあります(最大数時間)。実行直後に確認しても結果が表示されない場合は、時間を置いて再実行してください。
ステップ3:継続的に監視する
監視ダッシュボード
日常的なコスト監視には、Snowflake公式が提供しているStreamlitベースの監視ダッシュボードが便利です。
Snowflake-Labs/snowflake-demo-streamlit
このダッシュボードでは、LLM推論のクレジット消費(モデル別・ウェアハウス別)、Cortex Analystのリクエスト数とクレジット、Cortex Searchのサービス別クレジットなどを一元的に可視化できます。Streamlit in Snowflakeとしてデプロイすれば、チーム全体でコスト状況を共有できます。
Cortex Agentsのトレース確認
Cortex Agentsを利用している場合は、AI_OBSERVABILITY_EVENTSテーブルからエージェントの動作トレースやユーザーフィードバックを取得できます。
-- ユーザーフィードバックの取得
SELECT *
FROM SNOWFLAKE.LOCAL.AI_OBSERVABILITY_EVENTS
WHERE RECORD:"name" = 'CORTEX_AGENT_FEEDBACK';
VALUE列の中にフィードバック情報(positive/negativeなど)が格納されています。また、Snowsight上のトレース画面では、エージェントの各ステップ(LLM Planning → Cortex Analyst → Chart Generationなど)の所要時間やトークン消費を視覚的に確認できます。コストだけでなく、どのステップにボトルネックがあるかを特定するのにも役立ちます。
ステップ4:アラートで制御する
事前見積もりと事後確認だけでは、予期しないコスト急増に対応できません。SnowflakeのALERT機能を使えば、一定のしきい値を超えた場合に自動で通知を受け取れます。
以下は、特定のモデルと関数の組み合わせで1時間あたり50クレジットを超えた場合にメール通知するアラートの例です。
CREATE OR REPLACE ALERT my_cortex_cost_alert
SCHEDULE = '1 hour'
IF( EXISTS(
SELECT SUM(token_credits) AS credits
FROM SNOWFLAKE.ACCOUNT_USAGE.CORTEX_AISQL_USAGE_HISTORY
WHERE function_name = 'COMPLETE'
AND model_name = 'llama4-maverick'
AND usage_time >= DATEADD(hour, -1, CURRENT_TIMESTAMP())
HAVING credits > 50
))
THEN CALL SYSTEM$SEND_EMAIL(...);
アラート設定のポイントとしては、まずは緩めのしきい値から始めて、実際の利用パターンが見えてきたら徐々に絞っていくアプローチがおすすめです。モデル×関数の組み合わせごとにアラートを分けると、どの用途でコストが膨らんでいるかを特定しやすくなります。
まとめ
Cortex AIのコスト管理は、4つのステップで整理できます。
ステップ1:見積もる。AI_COUNT_TOKENS関数で、本番データに流す前にモデル別のトークン消費量を事前確認する。
ステップ2:確認する。実行後にCORTEX_AISQL_USAGE_HISTORYなどの機能別ビューで、実際のクレジット消費をQUERY_ID単位で追跡する。
ステップ3:監視する。Streamlitダッシュボードやトレース機能で、日常的にコスト状況とエージェントの動作を可視化する。
ステップ4:制御する。ALERT機能で、しきい値超過時に自動通知を設定し、予期しないコスト急増を防ぐ。
Cortex AI関数もCortex Analystも、使い始めるのは簡単です。だからこそ、運用に移行する前にコスト管理の仕組みを整えておくことが重要です。本記事の4ステップを導入の初期段階から意識しておけば、コストを把握しながら安心してCortex AIを活用できるはずです。
本シリーズでは、1本目のブログでCortex AI関数の基本と使い勝手、2本目のブログでCortex Analystによる自然言語分析基盤の構築、そして本記事でコスト管理・監視の実践方法を紹介しました。「試す → 活用する → 運用する」という3つのステップを通じて、Snowflake Cortex AIの全体像を掴んでいただけたのではないかと思います。