生成 AI エージェントを評価する

生成 AI モデルを構築して評価したら、そのモデルを使用して、チャットボットなどのエージェントを構築できます。Gen AI Evaluation Service を使用すると、ユースケースのタスクと目標を完了するエージェントの能力を測定できます。

概要

エージェントを評価する方法は次のとおりです。

  • 最終回答の評価: エージェントの最終的な出力(エージェントが目標を達成したかどうか)を評価します。

  • 軌跡評価: エージェントが最終的な回答に至るまでにたどったパス(ツール呼び出しの順序)を評価します。

Gen AI Evaluation Service を使用すると、1 つの Vertex AI SDK クエリでエージェントの実行をトリガーし、軌跡評価と最終回答評価の両方の指標を取得できます。

サポートされているエージェント

Gen AI Evaluation Service は、次のカテゴリのエージェントをサポートしています。

サポートされているエージェント 説明
Reasoning Engine のテンプレートで構築されたエージェント Reasoning Engine(LangChain on Vertex AI)は、エージェントをデプロイして管理できるプラットフォームです。 Google Cloud
Reasoning Engine のカスタマイズ可能なテンプレートを使用して構築された LangChain エージェント LangChain はオープンソース プラットフォームです。
カスタム エージェント関数 カスタム エージェント関数は、エージェントのプロンプトを受け取り、レスポンスと軌跡を辞書で返す柔軟な関数です。

エージェントの評価の指標を定義する

最終回答または軌跡評価の指標を定義します。

最終回答の評価

最終レスポンスの評価は、モデルレスポンスの評価と同じプロセスで行われます。詳細については、評価指標を定義するをご覧ください。

軌道評価

次の指標は、想定される軌道に沿って移動するモデルの能力を評価する際に役立ちます。

完全一致

予測された軌跡が参照軌跡と完全に一致し、ツール呼び出しが完全に同じ順序で行われる場合、trajectory_exact_match 指標はスコア 1 を返します。それ以外の場合は 0 を返します。

指標の入力パラメータ

入力パラメータ 説明
predicted_trajectory エージェントが最終的な回答に到達するために使用したツール呼び出しのリスト。
reference_trajectory エージェントがクエリに対応するために使用するツール。

出力スコア

説明
0 予測された軌跡が参照と一致しません。
1 予測された軌跡が参照と一致している。

順序一致

予測された軌跡に、参照軌跡のすべてのツール呼び出しが同じ順序で含まれていて、追加のツール呼び出しが含まれている場合、trajectory_in_order_match 指標はスコア 1 を返します。それ以外の場合は 0 を返します。

指標の入力パラメータ

入力パラメータ 説明
predicted_trajectory エージェントが最終的なレスポンスに到達するために使用する予測された軌道。
reference_trajectory エージェントがクエリを満たすために予測される軌道。

出力スコア

説明
0 予測された軌道のツール呼び出しが、参照軌道の順序と一致していません。
1 予測された軌跡が参照と一致している。

順序を問わない一致

予測された軌道に参照軌道のすべてのツール呼び出しが含まれているが、順序は重要ではなく、追加のツール呼び出しが含まれている場合、trajectory_any_order_match 指標はスコア 1 を返します。それ以外の場合は 0 を返します。

指標の入力パラメータ

入力パラメータ 説明
predicted_trajectory エージェントが最終的な回答に到達するために使用したツール呼び出しのリスト。
reference_trajectory エージェントがクエリに対応するために使用するツール。

出力スコア

説明
0 予測された軌道に、参照軌道のすべてのツール呼び出しが含まれていない。
1 予測された軌跡が参照と一致している。

適合率

trajectory_precision 指標は、予測された軌跡内のツール呼び出しのうち、参照軌跡に従って実際に関連性があるか正しいものの数を測定します。

精度は、予測された軌跡のアクションのうち、参照軌跡にも存在するアクションの数をカウントして計算します。その数を予測された軌跡のアクションの合計数で割ります。

指標の入力パラメータ

入力パラメータ 説明
predicted_trajectory エージェントが最終的な回答に到達するために使用したツール呼び出しのリスト。
reference_trajectory エージェントがクエリに対応するために使用するツール。

出力スコア

説明
[0,1] の範囲内の浮動小数点数 スコアが高いほど、予測される軌道は正確になります。

リコール

trajectory_recall 指標は、参照軌道の重要なツール呼び出しのうち、予測された軌道で実際にキャプチャされた呼び出しの数を測定します。

再現率は、参照軌跡のアクションのうち、予測された軌跡にも出現するアクションの数をカウントして計算します。その数を参照軌跡のアクションの合計数で割ります。

指標の入力パラメータ

入力パラメータ 説明
predicted_trajectory エージェントが最終的な回答に到達するために使用したツール呼び出しのリスト。
reference_trajectory エージェントがクエリに対応するために使用するツール。

出力スコア

説明
[0,1] の範囲内の浮動小数点数 スコアが高いほど、予測された軌道の再現率が高くなります。

単一ツールの使用

trajectory_single_tool_use 指標は、指標仕様で指定された特定のツールが予測された軌跡で使用されているかどうかを確認します。ツールの呼び出し順序やツールの使用回数はチェックされず、ツールが存在するかどうかのみがチェックされます。

指標の入力パラメータ

入力パラメータ 説明
predicted_trajectory エージェントが最終的な回答に到達するために使用したツール呼び出しのリスト。

出力スコア

説明
0 ツールがない
1 ツールが存在する。

また、デフォルトでは、次の 2 つのエージェント パフォーマンス指標が評価結果に追加されます。EvalTask で指定する必要はありません。

latency

エージェントがレスポンスを返すまでにかかった時間。

説明
浮動小数点数 秒単位で計算されます。

failure

エージェントの呼び出しがエラーになったか成功したかを示すブール値。

出力スコア

説明
1 エラー
0 有効なレスポンスが返された

エージェントの評価用のデータセットを準備する

最終回答または軌跡評価用にデータセットを準備します。

最終レスポンス評価のデータスキーマは、モデルレスポンス評価のスキーマと類似しています。

計算ベースの軌道評価では、データセットに次の情報が含まれている必要があります。

入力タイプ 入力フィールドの内容
predicted_trajectory エージェントが最終的な回答に到達するために使用したツール呼び出しのリスト。
reference_trajectorytrajectory_single_tool_use metric には不要) エージェントがクエリに対応するために使用するツール。

評価データセットの例

次の例は、軌道評価用のデータセットを示しています。trajectory_single_tool_use を除くすべての指標で reference_trajectory が必要です。

reference_trajectory = [
# example 1
[
  {
    "tool_name": "set_device_info",
    "tool_input": {
        "device_id": "device_2",
        "updates": {
            "status": "OFF"
        }
    }
  }
],
# example 2
[
    {
      "tool_name": "get_user_preferences",
      "tool_input": {
          "user_id": "user_y"
      }
  },
  {
      "tool_name": "set_temperature",
      "tool_input": {
          "location": "Living Room",
          "temperature": 23
      }
    },
  ]
]

predicted_trajectory = [
# example 1
[
  {
    "tool_name": "set_device_info",
    "tool_input": {
        "device_id": "device_3",
        "updates": {
            "status": "OFF"
        }
    }
  }
],
# example 2
[
    {
      "tool_name": "get_user_preferences",
      "tool_input": {
          "user_id": "user_z"
      }
    },
    {
      "tool_name": "set_temperature",
      "tool_input": {
          "location": "Living Room",
          "temperature": 23
      }
    },
  ]
]

eval_dataset = pd.DataFrame({
    "predicted_trajectory": predicted_trajectory,
    "reference_trajectory": reference_trajectory,
})

評価データセットをインポートする

データセットは次の形式でインポートできます。

  • Cloud Storage に保存されている JSONL または CSV ファイル

  • BigQuery テーブル

  • Pandas DataFrame

Gen AI Evaluation Service には、エージェントの評価方法を示す公開データセットの例が用意されています。次のコードは、Cloud Storage バケットから一般公開データセットをインポートする方法を示しています。


# dataset name to be imported
dataset = "on-device" # Alternatives: "customer-support", "content-creation"

# copy the tools and dataset file
!gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/{dataset}/tools.py .
!gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/{dataset}/eval_dataset.json .

# load the dataset examples
import json

eval_dataset = json.loads(open('eval_dataset.json').read())

# run the tools file
%run -i tools.py

ここで、dataset は次のいずれかの一般公開データセットです。

  • "on-device": スマートホーム デバイスを操作するオンデバイス Google アシスタント。エージェントは、「寝室のエアコンを午後 11 時から午前 8 時までオンにして、それ以外の時間はオフに設定して」などのクエリに対応します。

  • "customer-support": カスタマー サポート エージェント。エージェントは、「保留中の注文をキャンセルして、オープンなサポート チケットをエスカレーションできますか?」などのクエリに対応します。

  • "content-creation": マーケティング コンテンツ作成エージェント。エージェントは、「キャンペーン X をソーシャル メディア サイト Y で 1 回限りのキャンペーンに変更し、予算を 50% 削減して 2024 年 12 月 25 日のみ実施するようにしてください」などのクエリに対応します。

エージェントの評価を実行する

軌跡評価または最終回答評価の評価を実行します。

エージェントの評価では、次のコードのように、レスポンス評価指標と軌跡評価指標を組み合わせることができます。

single_tool_use_metric = TrajectorySingleToolUse(tool_name='tool_name')

eval_task = EvalTask(
    dataset=EVAL_DATASET,
    metrics=[
        "rouge_l_sum",
        "bleu",
        custom_response_eval_metric,
        "trajectory_exact_match",
        "trajectory_precision",
        single_tool_use_metric
        pointwise_trajectory_eval_metric # llm-based metric
    ],
)
eval_result = eval_task.evaluate(
    runnable=RUNNABLE,
)

指標のカスタマイズ

大規模言語モデルベースの指標は、テンプレート インターフェースを使用して、または最初から作成して、軌道評価用にカスタマイズできます。トラジェクトリの評価にカスタムの計算ベースの指標を定義することもできます。

結果を表示して解釈する

軌跡評価または最終回答評価の場合、評価結果は次のように表示されます。

エージェント評価指標の表

評価結果には次の情報が含まれます。

最終回答の指標

インスタンス レベルの結果

説明
レスポンス エージェントが生成した最終的なレスポンス。
latency_in_seconds レスポンスの生成に要した時間。
失敗 有効なレスポンスが生成されたかどうかを示します。
スコア 指標仕様で指定されたレスポンスに対して計算されたスコア。
explanation 指標仕様で指定されたスコアの説明。

集計結果

説明
平均 すべてのインスタンスの平均スコア。
standard deviation すべてのスコアの標準偏差。

軌道指標

インスタンス レベルの結果

説明
predicted_trajectory エージェントが最終的な回答に到達するために行ったツール呼び出しの順序。
reference_trajectory 想定されるツール呼び出しの順序。
スコア 指標仕様で指定された予測軌跡と参照軌跡に対して計算されたスコア。
latency_in_seconds レスポンスの生成に要した時間。
失敗 有効なレスポンスが生成されたかどうかを示します。

集計結果

説明
平均 すべてのインスタンスの平均スコア。
standard deviation すべてのスコアの標準偏差。

次のステップ

次のエージェント評価ノートブックを試す。