エージェントを開発したら、Gen AI Evaluation Service を使用して、特定のユースケースのタスクと目標を完了するエージェントの能力を評価できます。
評価指標を定義する
まず、指標の空のリスト(metrics = []
)を作成し、関連する指標を追加します。追加の指標を含めるには:
最終回答
最終回答評価は、モデルベースの評価と同じプロセスで行われます。詳細については、評価指標を定義するをご覧ください。
完全一致
metrics.append("trajectory_exact_match")
予測軌跡が参照軌跡と完全に一致し、まったく同じツール呼び出しがまったく同じ順序で行われている場合、trajectory_exact_match
指標はスコア 1
を返します。それ以外の場合は 0
を返します。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用したツール呼び出しのリスト。reference_trajectory
: エージェントがクエリを満たすうえで期待されるツールの使用。
順序一致
metrics.append("trajectory_in_order_match")
余分なツール呼び出しが含まれているかを問わず、予測軌跡に参照軌跡のすべてのツール呼び出しが同じ順序で含まれている場合、trajectory_in_order_match
指標はスコア 1
を返します。それ以外の場合は 0
を返します。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用した予測軌跡。reference_trajectory
: エージェントがクエリを満たすうえで期待される予測軌跡。
順序を問わない一致
metrics.append("trajectory_any_order_match")
順序は問わず、余分なツール呼び出しが含まれているかも問わず、予測軌跡に参照軌跡のツール呼び出しがすべて含まれている場合、trajectory_any_order_match
指標はスコア 1
を返します。それ以外の場合は 0
を返します。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用したツール呼び出しのリスト。reference_trajectory
: エージェントがクエリを満たすうえで期待されるツールの使用。
適合率
metrics.append("trajectory_precision")
trajectory_precision
指標は、予測軌跡のツール呼び出しのうち、参照軌跡に従って実際に関連性があるか正しいものの数を測定します。[0, 1]
の範囲内の float
値です。スコアが高いほど、予測軌跡は正確です。
適合率の計算では、まず、予測軌跡のアクションのうち、参照軌跡にも存在するアクションの数をカウントします。その数を予測軌跡のアクションの合計数で割ります。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用したツール呼び出しのリスト。reference_trajectory
: エージェントがクエリを満たすうえで期待されるツールの使用。
再現率
metrics.append("trajectory_recall")
trajectory_recall
指標は、参照軌跡の重要なツール呼び出しのうち、予測軌跡で実際に捕捉された呼び出しの数を測定します。[0, 1]
の範囲内の float
値です。スコアが高いほど、予測軌跡の再現率が高くなります。
再現率の計算では、まず、参照軌跡のアクションのうち、予測軌跡にも存在するアクションの数をカウントします。その数を参照軌跡のアクションの合計数で割ります。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用したツール呼び出しのリスト。reference_trajectory
: エージェントがクエリを満たすうえで期待されるツールの使用。
単一ツールの使用
from vertexai.preview.evaluation import metrics
metrics.append(metrics.TrajectorySingleToolUse(tool_name='tool_name'))
trajectory_single_tool_use
指標は、指標仕様で指定された特定のツールが予測軌跡で使用されているかどうかを確認します。ツール呼び出しの順序やツールの使用回数はチェックされず、ツールが存在するかどうかのみがチェックされます。ツールが存在しない場合、値は 0
になります。それ以外の場合は 1
になります。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用したツール呼び出しのリスト。
カスタム
カスタム指標は次のように定義できます。
from vertexai.preview.evaluation import metrics
def word_count(instance):
response = instance["response"]
score = len(response.split(" "))
return {"word_count": score}
metrics.append(
metrics.CustomMetric(name="word_count", metric_function=word_count)
)
次の 2 つのパフォーマンス指標は、常に結果に含まれます。EvalTask
でこれらの指標を指定する必要はありません。
latency
(float
): エージェントが返信するまでにかかった時間(秒単位)。failure
(bool
): エージェントの呼び出しが成功した場合は0
、それ以外の場合は1
。
評価データセットを準備する
最終回答評価または軌跡評価用にデータセットを準備するには:
最終回答
最終回答評価のデータスキーマは、モデル レスポンス評価のスキーマと類似しています。
完全一致
評価データセットには、次の入力が必要です。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用したツール呼び出しのリスト。reference_trajectory
: エージェントがクエリを満たすうえで期待されるツールの使用。
順序一致
評価データセットには、次の入力が必要です。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用した予測軌跡。reference_trajectory
: エージェントがクエリを満たすうえで期待される予測軌跡。
順序を問わない一致
評価データセットには、次の入力が必要です。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用したツール呼び出しのリスト。reference_trajectory
: エージェントがクエリを満たすうえで期待されるツールの使用。
適合率
評価データセットには、次の入力が必要です。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用したツール呼び出しのリスト。reference_trajectory
: エージェントがクエリを満たすうえで期待されるツールの使用。
再現率
評価データセットには、次の入力が必要です。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用したツール呼び出しのリスト。reference_trajectory
: エージェントがクエリを満たすうえで期待されるツールの使用。
単一ツールの使用
評価データセットには、次の入力が必要です。
入力パラメータ:
predicted_trajectory
: エージェントが最終回答に到達するために使用したツール呼び出しのリスト。
以下は、評価データセットの例です。
import pandas as pd
eval_dataset = pd.DataFrame({
"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},
},
]
],
"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},
},
],
],
})
サンプル データセット
エージェントを評価する方法を示するために、次のサンプル データセットを用意しました。
"on-device"
: オンデバイスの Google Home アシスタントの評価データセット。エージェントは、「寝室のエアコンを午後 11 時から午前 8 時までオンにし、それ以外の時間はオフに設定して」などのクエリに対応します。"customer-support"
: カスタマー サポート エージェントの評価データセット。エージェントは、「保留中の注文をキャンセルして、未解決のサポート チケットをエスカレーションできますか?」などのクエリに対応します。"content-creation"
: マーケティング コンテンツ作成エージェントの評価データセット。エージェントは、「キャンペーン X をソーシャル メディア サイト Y で 1 回限りのキャンペーンに変更し、予算を 50% 削減して 2024 年 12 月 25 日のみ実施するようにしてください」などのクエリに対応します。
サンプル データセットをインポートするには:
評価データセットをダウンロードします。
デバイス内
gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/on-device/eval_dataset.json .
カスタマー サポート
gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/customer-support/eval_dataset.json .
コンテンツ作成
gcloud storage cp gs://cloud-ai-demo-datasets/agent-eval-datasets/content-creation/eval_dataset.json .
データセットの例を読み込む
import json eval_dataset = json.loads(open('eval_dataset.json').read())
評価結果を生成する
評価結果を生成するには、次のコードを実行します。
from vertexai.preview.evaluation import EvalTask
eval_task = EvalTask(dataset=eval_dataset, metrics=metrics)
eval_result = eval_task.evaluate(runnable=agent)
結果を表示して解釈する
評価結果は次のように表示されます。
評価結果には次の情報が含まれます。
最終回答の指標
行単位の指標:
response
: エージェントが生成した最終回答。latency_in_seconds
: レスポンスの生成に要した時間(秒)。failure
: 有効な回答が生成されたかどうかを示します。score
: 指標仕様で指定された回答に対して計算されたスコア。explanation
: 指標仕様で指定されたスコアの説明。
サマリー指標:
mean
: すべてのインスタンスの平均スコア。standard deviation
: すべてのスコアの標準偏差。
軌跡の指標
行単位の指標:
predicted_trajectory
: エージェントが最終回答に到達するために行ったツール呼び出しの順序。reference_trajectory
: 期待されるツール呼び出しの順序。score
: 予測軌跡と指標仕様で指定された参照軌跡に対して計算されたスコア。latency_in_seconds
: レスポンスの生成に要した時間(秒)。failure
: 有効な回答が生成されたかどうかを示します。
サマリー指標:
mean
: すべてのインスタンスの平均スコア。standard deviation
: すべてのスコアの標準偏差。
次のステップ
次のノートブックを試す。