Snowflake の Cortex Agent Evaluations を Snowsight 経由で試してみた
はじめに
2026年3月のアップデートで、Cortex Agent の動作・パフォーマンスを評価する Cortex Agent Evaluations が一般提供となりました。
本機能の概要や一連の手順については、@masato_takadaさんの以下の記事で詳しく解説されています。
本記事では Snowsight から GUI で評価を実行する方法を中心に試してみた内容をまとめてみます。
アップデートの概要
本機能については以下に記載があります。
ground truth(期待値)を通じて、エージェントの動作・パフォーマンスを定量的に評価・監視できる機能です。Cortex Agent を本番利用する際は、エージェントの回答品質や動作の一貫性をどのように評価するかは重要な課題ですが、このための評価指標を提供しています。
具体的には、以下の評価指標があります。
- Answer Correctness
- エージェントの回答が、あらかじめ用意した期待値(ground truth)とどの程度一致しているかを測定
- 参照するデータセットが静的な場合(変動しない環境)で特に有効
- Logical Coherence
- エージェントの指示・計画・ツール呼び出し間の一貫性を測定
- 参照データ不要(reference-free)なため、事前のデータセット準備なしで実行可能
- カスタムメトリクス
- 上記の他、組織のニーズに合わせた独自の評価基準を定義できる
- 評価用プロンプトとスコアリング方法を指定して使用する
評価の判定には claude-4-sonnet または claude-3.5-sonnet が使用されます。
なお、入力数が多い場合はエージェントのレスポンスタイムやトレース量の制約から、評価データを分割して実行することが推奨されています。また、回答正確性の評価に使用する ground truth は時間経過とともに陳腐化する可能性があるため、質問内に期間を明示する(例:「2025年1月〜3月の〇〇を教えて」)ことが推奨されています。
試してみる
ここでは、主にアクセス制御設定~評価用のデータセット作成、Snowsightでの評価の実行を中心に試してみます。
前提条件
検証環境
以下の環境を使用しています。
- スキーマ構成 ※一部抜粋
AGENTSスキーマ:エージェントの作成先EVALSスキーマ:評価データセットの作成先
- アクセス制御
- 専用の評価実行用ロールを使用
評価対象となるエージェントや関連するオブジェクト(セマンティックビュー、Cortex Search サービス など)は作成済みとします。
エージェントの概要
ここでは、顧客の使用量/消費量を自然言語で問い合わせできるエージェントを例として使用します。
評価対象のエージェントは、以下の2つのツールを使用できます。
- Cortex Analyst ツール:顧客の消費量に関する質問を SQL に変換して分析するツール
- Cortex Search ツール:ユーザーが入力した顧客名に近い正式名称(物理名)を曖昧検索するツール
ポイントとしては、特定の顧客について分析する際、ユーザーは通称や略称など一般的な呼び方で問い合わせますが、SQL の WHERE 句には DB 上の正式な物理名を指定する必要があります。そこで、Cortex Search ツールでまず物理名を特定してから Cortex Analyst ツールで SQL を生成する、という 2 段階の処理を orchestration で指示しています。
今回の評価では、回答の正確性に加えて、このオーケストレーションの指示通りに Cortex Search → Cortex Analyst の順でツールが呼ばれているかという観点も確認してみます。
具体的には、Cortex Agent の DDL で以下の設定をしています。
orchestration: |
特定の顧客名に関する問い合わせの場合は、以下の手順で処理すること:
1. まず CustomerNameSearch ツールを使用して、ユーザーが入力した顧客名に最も近い正式な顧客名(物理名)を検索する
2. 検索結果を確認し:
- 結果が1件で明確に一致する場合は、その顧客名を使用して処理を続行
- 結果が複数件ある場合や類似の顧客名が存在する場合は、ユーザーに候補を提示して確認を求める
- 結果が0件の場合は、その旨をユーザーに伝え、別の顧客名での検索を提案する
3. ユーザーが確認した顧客名を使用して、<AnalystTool> ツールでSQLクエリを実行する。
顧客名を指定しない一般的な問い合わせ(顧客一覧、全体集計など)の場合は、直接 <AnalystTool> を使用すること。
アクセス制御
評価実行に必要な権限を評価用ロールに付与します。
評価ロールはエージェントを実際に実行するため、エージェント自身が使用するウェアハウスや参照先スキーマへのアクセス権限も必要です。
USE ROLE SECURITYADMIN;
-- AGENTS スキーマ:エージェントの実行・評価に加え、評価時に内部で作成されるタスク・ファイルフォーマットの権限が必要
GRANT USAGE ON SCHEMA <DB>.AGENTS TO ROLE <評価用ロール>;
GRANT USAGE ON ALL AGENTS IN SCHEMA <DB>.AGENTS TO ROLE <評価用ロール>;
GRANT MONITOR ON ALL AGENTS IN SCHEMA <DB>.AGENTS TO ROLE <評価用ロール>;
GRANT CREATE TASK ON SCHEMA <DB>.AGENTS TO ROLE <評価用ロール>;
GRANT CREATE FILE FORMAT ON SCHEMA <DB>.AGENTS TO ROLE <評価用ロール>;
-- EVALS スキーマ:評価データセット・結果の格納先。データセットとファイルフォーマットの作成権限が必要
GRANT USAGE ON SCHEMA <DB>.EVALS TO ROLE <評価用ロール>;
GRANT CREATE TABLE ON SCHEMA <DB>.EVALS TO ROLE <評価用ロール>;
GRANT CREATE DATASET ON SCHEMA <DB>.EVALS TO ROLE <評価用ロール>;
GRANT CREATE FILE FORMAT ON SCHEMA <DB>.EVALS TO ROLE <評価用ロール>;
-- エージェントが参照するスキーマへのアクセス権限(評価時にエージェントを実行するため必要)
GRANT USAGE ON SCHEMA <DB>.SEMANTIC TO ROLE <評価用ロール>;
GRANT REFERENCES, SELECT ON ALL SEMANTIC VIEWS IN SCHEMA <DB>.SEMANTIC TO ROLE <評価用ロール>;
GRANT USAGE ON SCHEMA <DB>.SEARCH TO ROLE <評価用ロール>;
GRANT USAGE ON ALL CORTEX SEARCH SERVICES IN SCHEMA <DB>.SEARCH TO ROLE <評価用ロール>;
-- エージェントが使用するウェアハウスへのアクセス権限
GRANT USAGE ON WAREHOUSE <ウェアハウス> TO ROLE <評価用ロール>;
-- 評価タスク実行(アカウントレベル)
GRANT EXECUTE TASK ON ACCOUNT TO ROLE <評価用ロール>;
-- 評価ログ参照(GET_AI_OBSERVABILITY_LOGS 使用に必要)
USE ROLE ACCOUNTADMIN;
GRANT APPLICATION ROLE SNOWFLAKE.AI_OBSERVABILITY_EVENTS_LOOKUP TO ROLE <評価用ロール>;
評価データセットの準備
評価には、入力クエリと期待される回答(ground truth)を含むテーブルを用意します。テーブルのカラム要件は以下の通りです。
| カラム | 型 | 内容 |
|---|---|---|
| 質問カラム | STRING / VARCHAR |
エージェントへの入力クエリ |
| 期待回答カラム | VARIANT |
{"ground_truth_output": "..."} 形式の JSON |
なお、ground_truth_output の値には PARSE_JSON を使用します(OBJECT_CONSTRUCT は出力がバリアントでないため型変換が必要)。
ここでは、以下の内容で評価データセットを用意しました。
USE ROLE <評価用ロール>;
USE DATABASE <DB>;
USE SCHEMA EVALS;
CREATE OR REPLACE TABLE AGENT_EVAL_DATA (
vq_id STRING COMMENT 'Verified Query ID(例: vq01)',
input_query STRING COMMENT 'エージェントへの質問',
ground_truth VARIANT COMMENT '期待回答 {"ground_truth_output": "..."}',
notes STRING COMMENT '備考'
);
INSERT INTO AGENT_EVAL_DATA
SELECT
'vq01',
'XXX Corporation の2025年12月のアカウント別のクレジット消費量の合計を教えて',
PARSE_JSON($${"ground_truth_output": "XXX Corporation の2025年12月のアカウント別クレジット消費量は以下の通りです。\n| USAGE_MONTH | ACCOUNT_LOCATOR | USAGE_CREDIT | SUB_TOTAL |\n| 2025-12 | XXXXXXX | xxxxxx | xxxxxx |"}$$),
NULL;
ground truth に相対的な日付表現(「今月」など)を使うと実行日によって期待値がずれるため、絶対日付で固定するようにします。
テーブルを作成したら、Cortex Agent Evaluations のデータセットとして登録します。この手順は SQL から行いましたが、Snowsight 経由でも作成可能です。
CALL SYSTEM$CREATE_EVALUATION_DATASET(
'Cortex Agent',
'<DB>.EVALS.AGENT_EVAL_DATA', -- ソーステーブル
'<DB>.EVALS.<AGENT>_EVAL_DS', -- 登録するデータセット名
OBJECT_CONSTRUCT(
'query_text', 'INPUT_QUERY', -- 質問カラムのマッピング
'expected_tools', 'GROUND_TRUTH' -- 期待回答カラムのマッピング
)
);
Snowsight で評価の作成
Snowsight から「AI & ML > Agents > 対象エージェント> Evaluations タブ」を開き「Create evaluation run」をクリックします。

評価の名前や説明を指定します。

続いて、先ほど SYSTEM$CREATE_EVALUATION_DATASET で登録したデータセットを指定します。

権限が不足している場合、下図のように表示されました。

問題がなければ、使用する評価指標の選択や、評価データセットのカラムとの関連付けを行います。

「Create」をクリックすると評価が開始されます。完了まで数分ほどかかります。

完了すると、下図のように評価結果が表示されます。

詳細を確認してみます。はじめはウェアハウスへの使用権限が不足していたため、エージェントが回答を生成できず、結果として「正確ではない」という判定となっていました。

前提条件で記載したウェアハウスへの使用権限を付与した上で再度評価を実行すると、今度は正常に回答が生成され評価が完了しました。

一覧では評価ランごとに AC(Answer Correctness)と LC(Logical Consistency)のスコアが表示されます。スコアは 0〜1 の範囲で、1 が最高(完全一致)となります。1回目の実行(vq-eval-01)はウェアハウス権限不足で回答を生成できなかったため AC が 0.00 となっていましたが、権限を修正した2回目(vq-eval-01-02)は AC・LC ともに 1.00 となっていることが確認できます。
評価結果の確認
各評価ランの詳細画面では、LLM がどのような基準でスコアを判定したかを確認できます。

- Answer Correctness(1.00):ground truth に基づき、期待した使用月・アカウント・クレジット量・小計が回答に含まれているかを評価しています。コアとなるデータが一致していれば追加の文脈情報があっても許容される、といった基準が LLM によって生成されていることが確認できます
- Logical Consistency(1.00):orchestration の指示通りに、顧客名の問い合わせに対して Cortex Search ツールを先に呼び出してから Cortex Analyst ツールで SQL を実行するという順序が守られているか、また情報の捏造がないかも評価されていました
さいごに
Cortex Agent Evaluations を試してみました。エージェントの回答や振る舞いについて定量的に評価できるため、エージェントの本格導入時はぜひとも使っていきたい機能と思いました。
こちらの内容がどなたかの参考になれば幸いです。







