Cortex Agentの評価

Cortex Agentの評価により、エージェントの動作とパフォーマンスをモニターできます。グラウンドトゥルースと参照なしの評価メトリックの両方に対してエージェントを評価します。評価中はエージェントのアクティビティがトレースされモニターされるため、プロセスの各ステップが最終目標に向かって進んでいることを確認できます。

Snowflakeは、エージェントを評価するために次のメトリックを提供します。

  • 回答の正しさ -- 準備されたクエリに対するエージェントからの回答が、期待される回答とどの程度一致しているか。このメトリックは、Cortex Agentの基盤となるデータセットが静的である場合に最も役に立ちます。

  • 論理整合性 -- エージェントの指示、計画、ツール呼び出しにおける一貫性を測定します。このメトリックは*参照なし*です。つまり、評価のためにデータセットに情報を準備する必要はありません。

Snowflakeでは、LLM判定プロセスを使用して、エージェントのドメインやユースケースに重要なコンテキストを測定するカスタム評価メトリックを作成することもできます。カスタムメトリックはLLMプロンプトとスコアリング手法を使用します。カスタムメトリックは評価判定システムに渡されてスコアが生成されます。

参照なしの評価に使用されるLLM判定システムなど、Snowflakeでエージェントの評価がどのように実施されるかについて詳しくは、Snowflakeエンジニアリングブログの`What’s Your Agent’s GPA?A Framework for Evaluating AI Agent Reliability <https://www.snowflake.com/en/engineering-blog/ai-agent-evaluation-gpa-framework/>`__を参照してください。プログラムでエージェント評価を実行する例については、`Getting Started with Cortex Agent Evaluations<https://www.snowflake.com/en/developers/guides/getting-started-with-cortex-agent-evaluations/>`__のガイドを参照してください。

アクセス制御の要件

Cortex Agentの評価を実行するには、以下を持つロールが必要です。

  • DATABASE ROLE SNOWFLAKE.CORTEX_USERロール

  • EXECUTE TASK ON ACCOUNT権限

  • エージェントを含むデータベースに対するUSAGE権限

  • エージェントを含むスキーマに対する次の権限:

    • USAGE

    • CREATE FILE FORMAT ON SCHEMA

    • CREATE TASK

    • EXECUTE TASK

  • 評価データを含むデータベースに対するUSAGE権限

  • 評価データを含むスキーマに対する以下の権限:

    • USAGE

    • EXECUTE TASK

    • 入力テーブルからデータセットを作成する場合は、CREATE DATASET ON SCHEMA

  • エージェントに対するUSAGEまたはOWNERSHIP権限

  • エージェントに対するMONITORまたはOWNERSHIP権限

  • エージェント評価構成を使用する場合は、構成ファイルを含むステージに対するREAD権限

評価対象のエージェントがツールを使用する場合、ご自身のロールがそれらすべてにもアクセスできる必要があります。

さらに、|sf-web-interface|で評価を操作する場合、評価の実行または検査に使用するロールには、デフォルトウェアハウスに対するUSAGE権限が必要です。

評価データセットの準備

Cortex Agentの評価を開始する前に、評価入力を含むテーブルを準備します。このテーブルは、評価実行時に照合されるデータセットの作成に使用されます。Snowflakeのデータセットについて詳しくは、:doc:`/developer-guide/snowflake-ml/dataset`を参照してください。

Cortexコード

評価用データセットの作成を:doc:`/user-guide/cortex-code/cortex-code`に支援してもらうには、Cortex Code ``cortex-agent``スキルの``dataset-curation``サブスキルを使用します。Cortex Codeスキルについて詳しくは、:ref:`Cortex Code CLI - Skills<label-extensibility_skills>`を参照してください。

データセットの形式

評価用データセットの作成に使用されるテーブルには、クエリを表すVARCHAR型の入力クエリ列と、期待されるエージェントの動作の説明を含むVARIANT型の出力列があります。この単一の出力列は、LLM判定機能によってグラウンドトゥルースとして使用されます。

出力列の値には、``ground_truth_output``という1つのキーがあります。このキーの値は、回答の正確性の評価で使用されます。LLM判定機能はグラウンドトゥルースをプロンプトに含めることで、エージェントの出力を評価します。

Tip

グラウンドトゥルースがLLMプロンプトに含まれているという事実を活用し、応答の完全一致やセマンティック一致に加えて、自然言語を使用して応答の「タイプ」を記述します。たとえば、``Output is in the following JSON format ...``というグラウンドトゥルースの後に、構造の説明またはJSONの例自体を含む文字列を提供できます。完全なカスタムプロンプトに基づいて出力をより厳密に検査する必要がある場合は、カスタムメトリックを作成します。

JSONデータセットをSnowflakeテーブルに取り込むには、PARSE_JSON SQL関数を使用します。次の例では、評価データセットに使用する新しいテーブル``agent_evaluation_data``を作成し、グラウンドトゥルースが``The temperature was 14 degrees Celsius in San Francisco on August 2nd, 2019.``である入力クエリ``What was the temperature in San Francisco on August 2nd 2019?``の行を挿入します。

CREATE OR REPLACE TABLE agent_evaluation_data (
    input_query VARCHAR
);

INSERT INTO agent_evaluation_data
  SELECT
    'What was the temperature in San Francisco on August 2nd 2019?',
    PARSE_JSON('
      {
        "ground_truth_output": "The temperature was 14 degrees Celsius in San Francisco on August 2nd, 2019.",
      }
    ');

重要

/sql-reference/functions/object_construct`関数と:doc:/sql-reference/functions/array_construct`関数は、非VARIANT結果を返します。/sql-reference/functions/parse_json`のように生の入力からVAIRANTを生成する関数を使用するか、:doc:/sql-reference/functions/to_variant`を呼び出して値の型を保証します。

``ground_truth``列で提供したデータのうち、選択したメトリックで使用されないものは無視されます。参照なしのメトリックのみで評価実行を行う場合は、出力列を空のままにすることができます。

最初の評価を実行するときに、既存のテーブルから新しいデータセットを作成することを選択できます。

エージェントの評価の開始

Cortexコード

:doc:`/user-guide/cortex-code/cortex-code`に評価を実行させるには、Cortex Code ``cortex-agent``スキルの``evaluate-cortex-agent``サブスキルを使用します。Cortex Codeスキルについて詳しくは、:ref:`Cortex Code CLI - Skills<label-extensibility_skills>`を参照してください。

Snowsight

注釈

エージェント評価は、デフォルトのロールではなく、|sf-web-interface|で現在選択されているロールとして実行されます。評価を開始する前に、適切な権限を持つロールがアクティブであることを確認してください。

Cortex Agentの評価を開始するには、次の手順を実行します。

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで AI & ML » Agents を選択します。

  3. 評価を実施するエージェントを選択します。

  4. Evaluations タブを選択します。

  5. New evaluation run を選択します。

    :ui:`New evaluation run`モーダルが開きます。

  6. :ui:`Name`フィールドに、評価の名前を指定します。この名前は、評価されるエージェントに対して一意である必要があります。

  7. オプション::ui:`Description`フィールドに、評価に関するコメントを指定します。

  8. Next を選択します。

    これにより、:ui:`Select dataset`モーダルに進みます。

  9. エージェントの評価に使用するデータセットを選択します。Existing dataset または Create new dataset を選択できます。

    既存のデータセットを使用するには:

    1. :ui:`Database and schema`リストから、データセットを含むデータベースとスキーマを選択します。

    2. :ui:`Select dataset`リストから、データセットを選択します。

    新しいデータセットを作成するには:

    1. :ui:`Source table - Database and schema`リストから、データセットにインポートするテーブルを含むデータベースとスキーマを選択します。

    2. :ui:`Select source table`リストから、ソーステーブルを選択します。

    3. :ui:`New dataset location - Database and schema`リストから、新しいデータセットを配置するデータベースとスキーマを選択します。

    4. :ui:`Dataset name`フィールドに、データセット名を入力します。この名前は、選択したスキーマ内のスキーマレベルのオブジェクトの中で一意である必要があります。

  10. Next を選択します。

    これにより、:ui:`Select metrics`モーダルに進みます。

  11. :ui:`Input query`リストから、入力クエリを含むデータセットの列を選択します。

  12. 各:ui:`System metrics`について、評価に含めたいメトリックのトグルをアクティブに変更します。評価のグラウンドトゥルースを含むデータセットの列を選択します。

  13. (オプション)カスタム評価を行うには、:ui:`Custom metrics`をオンに切り替えます。

    1. カスタム評価構成が保存されているステージを含むデータベースとスキーマを選択します。

    2. カスタム評価構成が保存されているステージを選択します。

    3. カスタム評価用のYAML構成ファイルを選択します。

      注釈

      |sf-web-interface|では、カスタム評価定義のみがYAML構成からロードされます。YAMLファイルの残りの部分は引き続き有効である必要があります。評価YAMLの仕様については、:ref:`label-cortex_agent_evaluation_yaml_spec`を参照してください。

    4. 各カスタムメトリックについて、評価に含める場合はトグルをアクティブに変更します。この評価のグラウンドトゥルースを含むデータセットの列を選択します。

  14. :ui:`Create`を選択して評価を作成し、評価プロセスを開始します。

いつでも、:ui:`Cancel`を選択して評価の作成をキャンセルしたり、:ui:`Prev`を選択して前のモーダルに戻ったりすることができます。

SQL

SQLを使用して評価を開始または評価に関する情報を取得するには、:doc:`/sql-reference/functions/execute_ai_evaluation`関数を使用します。この関数には次の必須引数があります。

  • evaluation_job:'START'または'STATUS'の文字列値。

  • run_parameters:キー``run_name``を含み、値が実行の名前であるSQL OBJECT

  • config_file_path: 実行構成のYAMLファイルを指すステージファイルパス。このパスを署名付きURLにすることはできません。評価YAMLの仕様については、:ref:`label-cortex_agent_evaluation_yaml_spec`を参照してください。

評価を開始するには、``evaluation_job``の値'START'を使用します。次の例では、``@eval_db.eval_schema.metrics/agent_evaluation_config.yaml``のエージェント評価構成を使用して、``run-1``という実行を開始します。

CALL EXECUTE_AI_EVALUATION(
  'START',
  OBJECT_CONSTRUCT('run_name', 'run-1'),
  '@eval_db.eval_schema.metrics/agent_evaluation_config.yaml'
);

実行の開始後、``evaluation_job``の値'STATUS'を使用してその進行状況をクエリできます。この呼び出しは、:ref:`AI Observability Runs <label-ai_observability_runs>`に使用される形式のテーブルを返します。次の例では、前の例で開始したエージェント評価のステータスをクエリします。

CALL EXECUTE_AI_EVALUATION(
  'STATUS',
  OBJECT_CONSTRUCT('run_name', 'run-1'),
  '@eval_db.eval_schema.metrics/agent_evaluation_config.yaml'
);

Tip

:doc:`タスク</user-guide/tasks-intro>`からEXECUTE_AI_EVALUATION関数を呼び出して、定期的に評価を実行したり、評価のステータスを確認したりできます。

評価結果の検査

評価結果には、要求されたメトリックに関する情報、エージェントの推論スレッドの詳細、およびスレッド内で実行された各トレースのLLM計画ステージに関する情報が含まれます。

Cortexコード

Cortex Codeは、``cortex-agent``スキルの2つのサブスキルを提供します。評価を検査し、構成やデータ内の問題を見つけるには、``investigate-cortex-agent-evals``サブスキルを使用します。完了した評価から結果を取得し、エージェントのパフォーマンスを向上させるには、``optimize-cortex-agent``サブスキルを使用します。

Snowsight

|sf-web-interface|のエージェントの:ui:`Evaluations`タブには、各評価実行の概要とその集計結果が表示されます。

|sf-web-interface|で評価結果を表示するには:

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで AI & ML » Agents を選択します。

  3. 評価を実施するエージェントを選択します。

  4. Evaluations タブを選択します。

評価実行リスト

各実行の実行情報の概要には、以下が含まれます。

  • RUN NAME -- 評価実行の名前。

  • # OF RECORDS -- 実行の一部として実行および回答されたクエリの数。

  • STATUS -- 評価実行のステータス。次のいずれかです。

    • 成功インジケーター -- すべての入力が評価され、結果が利用可能です。

    • スピナーが表示されます -- 実行が進行中で、利用できる情報はまだありません。

    • 警告インジケーター -- ある時点で実行にエラーが発生しました。この実行では、一部またはすべてのメトリックを利用できない場合があります。

  • DATASET -- 評価に使用されるデータセットの名前。

  • AVG DURATION -- 実行の入力クエリの実行にかかった平均時間。

  • LOGICAL CONSISTENCY -- 要求された場合、その実行における論理整合性評価のすべての入力の平均。

  • DESCRIPTION – 評価実行の説明。

  • CREATED -- 実行が作成および開始された時刻。

この実行に対して評価された各カスタムメトリックは、評価メトリックの``name``値によって定義される独自の列も受け取ります。カスタムメトリックについて詳しくは、:ref:`label-agent_evaluation_custom_metric`を参照してください。

評価実行の概要

|sf-web-interface|で個々の実行を選択すると、実行概要が表示されます。この概要には、実行中に評価された各メトリックの平均の概要と、各入力実行の概要が含まれます。各入力実行の概要には、次が含まれます。

  • STATUS -- 評価実行のステータス。次のいずれかです。

    • 成功インジケーター -- すべての入力が評価され、結果が利用可能です。

    • スピナーが表示されます -- 実行が進行中で、利用できる情報はまだありません。

    • 警告インジケーター -- ある時点で実行にエラーが発生しました。この実行では、一部またはすべてのメトリックを利用できない場合があります。

  • INPUT -- 評価に使用された入力クエリ。

  • OUTPUT -- エージェントによって生成された出力。

  • DURATION -- 入力を処理して出力を生成するのにかかった時間。

  • LOGICAL CONSISTENCY -- 要求された場合、入力の論理整合性評価。

  • EVALUATED -- 入力が処理された時刻。

この実行に対して評価された各カスタムメトリックは、評価メトリックの``name``値によって定義される独自の列も受け取ります。カスタムメトリックについて詳しくは、:ref:`label-agent_evaluation_custom_metric`を参照してください。

記録の詳細

|sf-web-interface|で個別の入力を選択すると、Record details`ビューが表示されます。このビューには、:ui:`Evaluation resultsThread details、および:ui:`Trace details`の3つのペインが含まれています。

評価結果

評価結果はここに詳細が表示されます。各メトリックには入力全体の平均を示す独自の表示ボックスがあり、これを選択すると、詳細情報を含むポップオーバーを表示できます。このポップオーバーには、高精度(80%以上の精度)で実行された実行の数、中程度の精度(30%以上の精度ではあるが高精度ではない)で実行された実行の数、および失敗した実行の数の内訳が含まれます。

スレッドの詳細

各エージェントスレッドの実行中にログに記録された情報。これには、デフォルトで計画と応答の生成、およびそのスレッド中にエージェントが呼び出した各ツールのスレッドトレースが含まれます。

トレースの詳細

各トレースペインには、エージェント実行のそのステージに関連する入力、処理、および出力の情報が含まれます。この情報は、:ref:`エージェントのモニタリング<label-cortex_agent_log_info>`によって提供されるものと同じです。

SQL

生の評価詳細を取得するには、:doc:`/sql-reference/functions/get_ai_evaluation_data-snowflake-local`関数を使用します。この関数には次の必須引数があります。

  • database:エージェントを含むデータベース。

  • schema:エージェントを含むスキーマ。

  • agent_name:エージェントの名前。

  • agent_type:文字列定数'CORTEX AGENT'。この値では大文字と小文字が区別されません。

  • run_name:取得する評価実行の名前。

この関数は、:ref:`label-cortex_agent_evaluations_results_format`で説明されているイベントデータのテーブルを返します。次の例は、スキーマ``eval_db.eval_schema``に格納されている``evaluated_agent``という名前のエージェントについて、``run-1``という実行の完全な評価詳細を表示します。

SELECT * FROM TABLE(SNOWFLAKE.LOCAL.GET_AI_EVALUATION_DATA(
  'eval_db',
  'eval_schema',
  'evaluated_agent',
  'CORTEX AGENT',
  'run-1')
);

単一記録のクエリトレース

評価トレースから単一記録にアクセスするには、:doc:`/sql-reference/functions/get_ai_record_trace-snowflake-local`関数を使用します。この関数には次の必須引数があります。

  • database:エージェントを含むデータベース。

  • schema:エージェントを含むスキーマ。

  • agent_name:エージェントの名前。

  • agent_type:文字列定数'CORTEX AGENT'。この値では大文字と小文字が区別されません。

  • record_id:フィルター対象の記録ID。

この関数は、:ref:`label-cortex_agent_evaluations_results_format`で説明されているイベントデータのテーブルを返します。次の例では、``eval_db.eval_schema``スキーマに格納されている``evaluated_agent``という名前のエージェントについて、記録``9346efc3-5dd6-4038-9b1a-72ca3d3b768c``のトレースを表示します。

SELECT * FROM TABLE(SNOWFLAKE.LOCAL.GET_AI_RECORD_TRACE(
  'eval_db',
  'eval_schema',
  'evaluated_agent',
  'CORTEX AGENT',
  '9346efc3-5dd6-4038-9b1a-72ca3d3b768c'
));

実行のクエリ評価エラーと警告

評価実行中に発生した警告やエラーのログにアクセスするには、:doc:`/sql-reference/functions/get_ai_observability_logs-snowflake-local`関数を使用します。この関数には次の必須引数があります。

  • database:エージェントを含むデータベース。

  • schema:エージェントを含むスキーマ。

  • agent_name:エージェントの名前。

  • agent_type:文字列定数'CORTEX AGENT'。この値では大文字と小文字が区別されません。

この関数は、:ref:`label-cortex_agent_evaluations_results_format`で説明されているイベントデータのテーブルを返します。次の例では、``eval_db.eval_schema``スキーマに格納されている``evaluated_agent``という名前のエージェントについて、``run-1``という名前の実行のエラーと警告をチェックします。

SELECT * FROM TABLE(SNOWFLAKE.LOCAL.GET_AI_OBSERVABILITY_LOGS(
  'eval_db',
  'eval_schema',
  'evaluated_agent',
  'CORTEX AGENT')
)
  WHERE TRUE
  AND (record:"severity_text"='ERROR' or record:"severity_text"='WARN')
  AND record_attributes:"snow.ai.observability.run.name"='run-1';

注釈

``record``および``record_attributes``のフィールドは変更される可能性がありますが、``record:"severity_text"``および``record_attributes:"snow.ai.observability.run.name"``のフィールドはAIの可観測性ログに存在することが保証されます。

エージェント評価のYAML仕様

カスタムメトリックの定義を含め、エージェント評価を構成するためのYAMLファイルを定義するには、次の3つの最上位キーがあります。

  • (オプション)``dataset``:評価用のデータセットの作成方法の定義。|sf-web-interface|で評価を開始するためにYAML仕様を使用する場合、または既存のデータセットを使用する場合、この値はオプションです。

  • evaluation:評価対象のエージェントの設定。

  • metrics:カスタムメトリックの定義を含む、評価実行中に記録されるメトリック。

データセット定義

``dataset``値は、既存のテーブルデータからの新しいデータセットを定義し、入力クエリとグランドトゥルースの列をマッピングします。``ground_truth``列に必要な構造については、:ref:`label-agent_evaluation_dataset_format`を参照してください。``dataset``値のキーは次のとおりです。

  • dataset_type:文字列定数"CORTEX AGENT"。この値では大文字と小文字が区別されません。

  • table_name:データセットのコンテンツに使用するテーブルの完全修飾名。

  • dataset_name:作成されるデータセットの名前。

  • column_mapping:必須の評価入力列``query_text``および出力列``ground_truth``の、データセットの作成元となるテーブルの列へのマッピング。

生成されたデータセットは、構築元のテーブルと同じデータベースおよびスキーマに格納されます。

次のデータセット定義の例は、``user_question``を入力として使用し、``expected_outcome``でグランドトゥルースを定義して、``evals_db.evals_schema.evaluation_data``テーブルから作成された``evaluation_input``という名前のデータセットを示しています。

dataset:
 dataset_type: "CORTEX AGENT"
 table_name: "evals_db.evals_schema.evaluation_data"
 dataset_name: "evaluation_input"
 column_mapping:
   query_text: "user_question"
   ground_truth: "expected_outcome"

エージェント構成

``evaluation``値は、評価実行時に照合されるエージェントの構成を設定します。``evaluation``値のキーは次のとおりです。

  • agent_params:評価の対象となるエージェントを記述するディクショナリ。この値は次のキーを使用します。

    • agent_name:評価するエージェントの名前。

    • agent_type:文字列定数"CORTEX AGENT"。この値では大文字と小文字が区別されません。

  • (オプション)``run_params``:この評価実行を識別するためのメタデータ。この値は次のキーを使用します。

    • (オプション)``label``:この評価のラベル。

    • (オプション)``description``:評価の詳細な説明。

  • source_metadata:評価に使用されるデータセットを記述するディクショナリ。この値は次のキーを使用します。

    • type:文字列定数"DATASET"。この値では大文字と小文字が区別されません。

    • dataset_name:使用するデータセットの名前。

次のエージェント構成例では、データセット``evaluation_input``を使用して、``Basic evaluation``ラベルを持つ``evaluated_agent``という名前のエージェントを実行します。

evaluation:
 agent_params:
   agent_name: "evaluated_agent"
   agent_type: "CORTEX AGENT"
  run_params:
   label: "Basic evaluation"
  source_metadata:
   type: "DATASET"
   dataset_name: "evaluation_input"

メトリックの選択

``metrics``値は、独自のカスタムメトリック定義を含む、評価するメトリックのシーケンスです。定義済みのメトリックの許容値は次のとおりです。

  • answer_correctness:グランドトゥルースの出力と照らし合わせてエージェントの応答の正しさを測定します。

  • logical_consistency:エージェントの指示、計画、ツール呼び出しの一貫性を測定します。このメトリックは*参照なし*のため、データセットを使用しません。

カスタムメトリックの定義

識別子、プロンプト、スコア範囲を指定することで、独自のカスタムメトリックを定義できます。指定したプロンプトは、カスタム評価を実行するために、実行トレースとともにLLM判定機能に渡されます。カスタムメトリックには、次のキーと値の必須ペアがあります。

  • name:メトリックの名前。

  • score_ranges:低品質、中品質、および高品質のスコア範囲を定義するマッピング。このマッピングは次のキーを使用します。

    • min_score:低品質の結果を識別するために使用されるスコア範囲。下限(下限値を含む)から上限(上限値を含まない)までの2要素シーケンスです。

    • median_score:中程度の結果を識別するために使用されるスコア範囲。下限(下限値を含む)から上限(上限値を含む)までの2要素シーケンスです。

    • max_score:高品質の結果を識別するために使用されるスコア範囲。下限(下限値を含まない)から上限(上限値を含む)までの2要素シーケンスです。

  • prompt:エージェント実行のトレースデータとともにLLM判定機能に渡すプロンプトテンプレート。

    重要

    このテンプレートには、``score_ranges``に提供された範囲で表される数値を生成するスコアリングメカニズムが含まれている必要があります。

カスタムメトリックのプロンプトは、評価実行中にエージェントによって生成されたトレースデータを参照できます。Snowflakeはトレース全体を入力としてLLM判定機能に渡しますが、GET_AI_RECORD_TRACE列のデータを直接参照する置換文字列を使用することで、特定の情報を強調できます。次の置換文字列を使用できます。

置換文字列

GET_AI_RECORD_TRACE 列

{{input}}

INPUT

{{output}}

OUTPUT

{{ground_truth}}

GROUND_TRUTH

{{tool_info}}

TOOL

{{start_timestamp}}

START_TIMESTAMP

{{duration}}

DURATION_MS

{{span_id}}

SPAN_ID

{{span_type}}

SPAN_TYPE

{{span_name}}

SPAN_NAME

{{llm_model}}

LLM_MODEL

{{error}}

ERROR

{{status}}

STATUS

メトリック構成の例

次の例では、回答の正しさと論理整合性のチェックを有効にするメトリック構成を定義し、さらに、グランドトゥルースとエージェントの出力の比較に基づいて1~10のスコアを返すカスタム``relevance``メトリックも定義しています。

metrics:
  # Built-in metrics
  - "answer_correctness"
  - "logical_consistency"
  # Custom metric with prompt
  - name: "relevance"
    score_ranges:
      min_score: [1, 3]
      median_score: [4, 6]
      max_score: [7, 10]
    prompt: |
      Evaluate the relevance of the agent's response to the user's query.
      Rate from 1-10 where:
      1 = Completely irrelevant
      4 = Somewhat irrelevant
      6 = Neutral
      8 = Mostly relevant
      10 = Highly relevant and on-topic

      You can compare the {{output}} with the {{ground_truth}} to help you understand if the contents are relevant or not

      Consider:
      - Does the response address the user's question?
      - Is the information provided appropriate to the context?
      - Are there any tangential or off-topic elements?

完全な構成の例

前述の例のセクションすべてを組み合わせると、次のように完全なエージェント評価構成になります。

# Optional: Create dataset before running evaluation
dataset:
  dataset_type: "CORTEX AGENT"
  table_name: "EVALS_DB.EVALS_SCHEMA.EVALUATION_DATA"
  dataset_name: "EVALUATION_INPUT"
  column_mapping:
    query_text: "user_question"
    ground_truth: "expected_outcome"

# Evaluation task configuration
evaluation:
 agent_params:
   agent_name: "evaluated_agent"
   agent_type: "CORTEX AGENT"
  run_params:
   label: "Basic evaluation"
  source_metadata:
   type: "DATASET"
   dataset_name: "EVALUATION_INPUT"

  # Built-in metrics (simple strings)
  - "answer_correctness"
  - "logical_consistency"

  # Custom metric definition
  - name: "relevance"
    score_ranges:
      min_score: [1, 3]
      median_score: [4, 6]
      max_score: [7, 10]
    prompt: |
      Evaluate the relevance of the agent's response to the user's query.
      Rate from 1-10 where:
      1 = Completely irrelevant
      4 = Somewhat irrelevant
      6 = Neutral
      8 = Mostly relevant
      10 = Highly relevant and on-topic

      You can compare the {{output}} with the {{ground_truth}} to help you understand if the contents are relevant or not

      Consider:
      - Does the response address the user's question?
      - Is the information provided appropriate to the context?
      - Are there any tangential or off-topic elements?

ステージへの構成のアップロード

エージェント評価構成は、Snowflakeが解析できるように特定のファイル形式である必要があります。次のスニペットは、``evals_db.evals_schema``スキーマに必要な``yaml_file_format``を作成し、エージェント構成のアップロード先となるステージ``evaluation_config``を作成する方法を示しています。

CREATE OR REPLACE FILE FORMAT evals_db.evals_schema.yaml_file_format
  TYPE = 'CSV'
  FIELD_DELIMITER = NONE
  RECORD_DELIMITER = '\n'
  SKIP_HEADER = 0
  FIELD_OPTIONALLY_ENCLOSED_BY = NONE
  ESCAPE_UNENCLOSED_FIELD = NONE;

CREATE OR REPLACE STAGE evals_db.evals_schema.evaluation_config
  FILE_FORMAT = evals_db.evals_schema.yaml_file_format;

ナビゲーションメニューで:ui:Ingestion » Add Data`の順に選択し、:ui:`Load files into a Stage`を選択して、|sf-web-interface|から作成されたステージに構成をアップロードします。SQL :doc:/sql-reference/sql/put`コマンドを使用して、ローカルのYAMLファイルをアップロードすることもできます。次の例は、ローカルファイル``/Users/dev/evaluation_config.yaml``をステージ``evals_db.evals_schema.evaluation_config``にコピーする方法を示しています。

PUT file:///Users/dev/evaluation_config.yaml @evals_db.evals_schema.evaluation_config
  AUTO_COMPRESS='false'
  OVERWRITE=TRUE;

:doc:`ワークスペース</user-guide/ui-snowsight/workspaces>`でYAMLを作成した場合は、アクティブなワークスペースからステージにYAMLをコピーできます。次の例では、ファイル``evaluation_config.yaml``をワークスペースからステージ``evals_db.evals_schema.evaluation_config``にコピーします。

COPY FILES INTO @evals_db.evals_schema.evaluation_config
  FROM 'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live'
  FILES=('custom_metric_config.yaml');

Tip

Snowflakeは、YAMLファイルを非圧縮のままにしておくことをお勧めします。

評価結果のテーブル形式

Cortex Agentの評価に関する情報を返す関数はすべて、以下の列で構成されるテーブルを生成します。

データ型

説明

RECORD_ID

VARCHAR

この評価記録に対してSnowflakeによって割り当てられた一意の識別子。

INPUT_ID

VARCHAR

この評価入力に対してSnowflakeによって割り当てられた一意の識別子。

REQUEST_ID

VARCHAR

このリクエストに対してSnowflakeによって割り当てられた一意の識別子。

TIMESTAMP

TIMESTAMP_TZ

リクエストが実行された時間(UTC)。

DURATION_MS

INT

エージェントが応答を返すまでにかかった時間(ミリ秒単位)。

INPUT

VARCHAR

この評価記録の入力として使用されたクエリ文字列。

OUTPUT

VARCHAR

この評価記録に対してCortex Agentが返した応答。

ERROR

VARCHAR

リクエスト中に発生したエラーに関する情報。

GROUND_TRUTH

VARCHAR

この記録のCortex Agentの出力を評価するために使用されるグランドトゥルースの情報。

METRIC_NAME

VARCHAR

この記録で評価されたメトリックの名前。

EVAL_AGG_SCORE

NUMBER

この記録に割り当てられた評価スコア。

METRIC_TYPE

VARCHAR

評価対象のメトリックの型。組み込みメトリックの場合、値は``system``。カスタムメトリックの場合、値は``custom``。

METRIC_STATUS

VARIANT

この記録のエージェントのHTTP応答に関する情報を含むマップ。以下のキーがある。

  • status:応答のHTTPステータスコード。

  • message:ステータス応答で送信されたHTTPメッセージ。

METRIC_CALLS

ARRAY

計算されたメトリックに関する情報を含むVARIANT値の配列。各配列エントリには、メトリックの基準、メトリックスコアの説明、メタデータが含まれる。各エントリのキーは以下のとおり。

  • criteria:LLMジャッジが応答の正確性を評価するために使用する基準。

  • explanation:スコアが割り当てられた理由の説明。

  • full_metadata:このメトリックのLLMジャッジによる処理に関するメタデータと情報を含むVARIANT値。このマップのキーは以下のとおり。

    • completion_tokens:このメトリック評価呼び出しのためにLLMによって生成された出力トークン数。

    • guard_tokens:このメトリック評価呼び出しのためにCortex Guardが消費したトークン数。

    • normalized_score:元の評価スコアを範囲[0.0, 1.0]に正規化し、小数点以下2桁に四捨五入した値。

    • original_score:このメトリック評価で記録に割り当てられた元のスコア。

    • prompt_tokens:LLMジャッジに提供されたプロンプトによって消費されたトークン数。

    • total_tokens:この計算でLLMジャッジによって使用されたトークン総数。

TOTAL_INPUT_TOKENS

INT

入力クエリの処理に使用されたトークン総数。

TOTAL_OUTPUT_TOKENS

INT

Cortex Agentによって生成された出力トークンの総数。

LLM_CALL_COUNT

INT

エージェントと評価ジャッジのいずれかによってLLMが呼び出された回数の合計。

モデルの可用性

エージェント評価は現在、クロスリージョン推論を使用した``claude-4-sonnet``モデルおよび``claude-3-5-sonnet``モデルのみをサポートしています。Snowflakeは、アカウントの設定に基づいて、これらのモデルから自動的に選択します。

モデル

クロスクラウド(任意のリージョン)

AWS に US

AWS US 商業組織

AWS に EU

AWS に APJ

claude-4-sonnet

claude-3.5-sonnet

既知の制限

Cortex Agentの評価には以下の制限があります。

  • エージェントの応答時間とスループット:評価中に処理できる入力の数は、エージェントの応答時間とトレース詳細の量によって制限されます。評価でタイムアウトや長い遅延が発生した場合は、評価データを分割してください。たとえば、多くの異なるツールを呼び出すことが保証されているクエリがある場合は、共通のツール呼び出しでデータを分割できます。カスタム評価でタイムアウトが発生する場合は、プロンプトを修正または短縮してください。また、カスタム評価を分割して、エージェントの出力の特定の要素1つにのみ焦点を当てることを検討することもできます。

  • グラウンドトゥルースの陳腐化:入力クエリの表現によっては、結果が時間の経過とともにドリフトし、評価結果の正確性が低下する可能性があります。特に、入力クエリは特定の絶対的な日時に範囲を設定することをお勧めします。例として、入力クエリ``What was our revenue?``と``What was our revenue for the first quarter?``はどちらもドリフトが発生しますが、クエリ``What was our revenue between January and March of 2025?``は、評価データで一貫して参照できる特定の時間枠に範囲が設定されます。

コストの考慮事項

エージェント評価は、Cortex Agentを実行して評価用の出力を作成し、LLM判定機能を実行して評価メトリックを計算します。グラウンドトゥルースのクエリに対してエージェントを実行するたびに課金されます。評価のLLM判定機能は:doc:`/sql-reference/functions/ai_complete`関数によって実行され、Snowflakeが判定のために選択したモデルに基づいて料金が発生します。さらに、次の料金が請求されます。

  • 評価実行の管理に使用されるタスクのウェアハウス料金

  • 評価指標の計算に使用されるクエリのウェアハウス料金

  • データセットと評価結果を保存するためのストレージ料金

  • |sf-web-interface|で表示された評価結果を取得するためのウェアハウス料金

コストの見積もりについて詳しくは、:doc:`/user-guide/cost-understanding-overall`を参照してください。コストの詳細情報については、`Snowflake Service Consumption Table`_を参照してください。