評価データセットを準備する

このページでは、Gen AI Evaluation Service 用にデータセットを準備する方法について説明します。

概要

Gen AI Evaluation Service は、一般的なデータ形式を自動的に検出して処理します。つまり、手動で変換を行う必要がなく、データをそのまま使用できる場合が多いということです。

データセットで指定する必要があるフィールドは、目標によって異なります。

目標 必要なデータ SDK ワークフロー
新しい回答を生成して評価する prompt run_inference()evaluate()
既存の回答を評価する promptresponse evaluate()

client.evals.evaluate() を実行すると、Gen AI Evaluation Service はデータセット内の次の一般的なフィールドを自動的に検索します。

  • prompt:(必須)評価するモデルへの入力。最適な結果を得るには、本番環境でモデルが処理する入力タイプを表すプロンプトの例を提供する必要があります。

  • response:(必須)評価対象のモデルまたはアプリケーションによって生成された出力。

  • reference:(省略可)モデルのレスポンスと比較できるグラウンド トゥルースまたは「正解」。このフィールドは、bleurouge などの計算ベースの指標で必要になることがよくあります。

  • conversation_history:(省略可)複数ターンの会話における前のターンのリスト。Gen AI Evaluation Service は、サポートされている形式からこのフィールドを自動的に抽出します。詳細については、複数ターンの会話を処理するをご覧ください。

サポートされているデータ形式

Gen AI Evaluation Service は、次の形式をサポートしています。

Pandas DataFrame

簡単な評価には、pandas.DataFrame を使用できます。Gen AI Evaluation Service は、promptresponsereference などの一般的な列名を探します。この形式には完全な下位互換性があります。

import pandas as pd

# Example DataFrame with prompts and ground truth references
prompts_df = pd.DataFrame({
    "prompt": [
        "What is the capital of France?",
        "Who wrote 'Hamlet'?",
    ],
    "reference": [
        "Paris",
        "William Shakespeare",
    ]
})

# You can use this DataFrame directly with run_inference or evaluate
eval_dataset = client.evals.run_inference(model="gemini-2.5-flash", src=prompts_df)
eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()

Gemini バッチ予測の形式

通常、Cloud Storage に保存されている JSONL ファイルである Vertex AI バッチ予測ジョブの出力を直接使用できます。各行にはリクエスト オブジェクトとレスポンス オブジェクトが含まれています。Gen AI Evaluation Service は、この構造を自動的に解析して、他の Vertex AI サービスとの統合を提供します。

JSONl ファイルの 1 行の例を次に示します。

{"request": {"contents": [{"role": "user", "parts": [{"text": "Why is the sky blue?"}]}]}, "response": {"candidates": [{"content": {"role": "model", "parts": [{"text": "The sky appears blue to the human eye as a result of a phenomenon known as Rayleigh scattering."}]}}]}}

バッチジョブから事前に生成されたレスポンスを直接評価できます。

# Cloud Storage path to your batch prediction output file
batch_job_output_uri = "gs://path/to/your/batch_output.jsonl"

# Evaluate the pre-generated responses directly
eval_result = client.evals.evaluate(
    dataset=batch_job_output_uri,
    metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()

OpenAI Chat Completion 形式

OpenAI や Anthropic などのサードパーティ モデルを評価または比較する場合、Gen AI Evaluation Service は OpenAI Chat Completion 形式をサポートしています。各行が OpenAI API リクエストのような構造の JSON オブジェクトであるデータセットを指定できます。Gen AI Evaluation Service は、この形式を自動的に検出します。

この形式の 1 行の例を次に示します。

{"request": {"messages": [{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "What's the capital of France?"}], "model": "gpt-4o"}}

このデータを使用して、サードパーティ モデルからレスポンスを生成し、レスポンスを評価できます。

# Ensure your third-party API key is set
# e.g., os.environ['OPENAI_API_KEY'] = 'Your API Key'

openai_request_uri = "gs://path/to/your/openai_requests.jsonl"

# Generate responses using a LiteLLM-supported model string
openai_responses = client.evals.run_inference(
    model="gpt-4o",  # LiteLLM compatible model string
    src=openai_request_uri,
)

# The resulting openai_responses object can then be evaluated
eval_result = client.evals.evaluate(
    dataset=openai_responses,
    metrics=[types.PrebuiltMetric.GENERAL_QUALITY]
)
eval_result.show()

マルチターンの会話を処理する

Gen AI Evaluation Service は、サポートされている形式のマルチターンの会話データを自動的に解析します。入力データに交換の履歴(Gemini 形式の request.contents フィールド内、または OpenAI 形式の request.messages など)が含まれている場合、Gen AI 評価サービスは以前のターンを識別し、conversation_history として処理します。

つまり、評価指標は会話履歴を使用してモデルのレスポンスのコンテキストを理解できるため、現在のプロンプトを以前の会話から手動で分離する必要はありません。

Gemini 形式のマルチターン会話の次の例を検討します。

{
  "request": {
    "contents": [
      {"role": "user", "parts": [{"text": "I'm planning a trip to Paris."}]},
      {"role": "model", "parts": [{"text": "That sounds wonderful! What time of year are you going?"}]},
      {"role": "user", "parts": [{"text": "I'm thinking next spring. What are some must-see sights?"}]}
    ]
  },
  "response": {
    "candidates": [
      {"content": {"role": "model", "parts": [{"text": "For spring in Paris, you should definitely visit the Eiffel Tower, the Louvre Museum, and wander through Montmartre."}]}}
    ]
  }
}

マルチターンの会話は、次のように自動的に解析されます。

  • prompt: 最後のユーザー メッセージが現在のプロンプト({"role": "user", "parts": [{"text": "I'm thinking next spring. What are some must-see sights?"}]})として識別されます。

  • conversation_history: 前のメッセージが自動的に抽出され、会話履歴([{"role": "user", "parts": [{"text": "I'm planning a trip to Paris."}]}, {"role": "model", "parts": [{"text": "That sounds wonderful! What time of year are you going?"}]}])として使用できるようになります。

  • response: モデルの返信は response フィールド({"role": "model", "parts": [{"text": "For spring in Paris..."}]})から取得されます。

次のステップ