Microsoft Foundry SDK を使用して評価結果を取得する

非同期評価実行のポーリング、項目と集計出力の取得、実行の取り消し、一般的な評価エラーの解決。

前提条件

この例では、「SDK クライアントのセットアップ」で構成された SDK クライアントを使用します

完了した実行に関する投票

評価の実行が完了したら、スコア付けされた結果を取得し、ポータルまたはプログラムで確認します。

評価実行は非同期です。 実行状態が完了するまでポーリングを行い、次に結果を取得します。

import time
from pprint import pprint

while True:
    run = openai_client.evals.runs.retrieve(
        run_id=eval_run.id, eval_id=eval_object.id
    )
    if run.status in ("completed", "failed"):
        break
    time.sleep(5)
    print("Waiting for eval run to complete...")

# Retrieve results
output_items = list(
    openai_client.evals.runs.output_items.list(
        run_id=run.id, eval_id=eval_object.id
    )
)
pprint(output_items)
print(f"Report URL: {run.report_url}")

結果を解釈する

1 つのデータ例の場合、すべてのエバリュエーターは次のスキーマを出力します。

  • ラベル: 単体テストの出力に似たバイナリ "pass" または "fail" ラベル。 この結果を使用して、エバリュエーター間の比較を容易にします。
  • スコア: 各エバリュエーターの自然なスケールからのスコア。 一部のエバリュエーターは、きめ細かいルーブリックを使用し、5 ポイント スケール (品質エバリュエーター) または 7 ポイント スケール (コンテンツ 安全エバリュエーター) でスコア付けします。 テキスト類似性エバリュエーターなどの他のユーザーは、F1 スコアを使用します。これは 0 から 1 の間の浮動小数点数です。 非バイナリの "score" は、"threshold" に基づいて "label" フィールドで "pass" または "fail" にバイナリ化されます。
  • しきい値: 非バイナリ スコアは、既定のしきい値に基づいて "成功" または "失敗" にバイナリ化され、ユーザーは SDK エクスペリエンスでオーバーライドできます。
  • 理由: すべての LLM ジャッジ エバリュエーターは、明瞭性を向上させるために、特定のスコアが与えられる理由を説明する推論フィールドも出力します。
  • 詳細: (省略可能) tool_call_accuracyなどの一部のエバリュエーターには、ユーザーがアプリケーションをデバッグするのに役立つ追加情報を含む "詳細" フィールドまたはフラグが存在する場合があります。

アイテムの結果を確認する

{
  "type": "azure_ai_evaluator",
  "name": "Coherence",
  "metric": "coherence",
  "score": 4.0,
  "label": "pass",
  "reason": "The response is well-structured and logically organized, presenting information in a clear and coherent manner.",
  "threshold": 3,
  "passed": true
}

集計結果を確認する

複数のデータ例 (データセット) に対する集計結果の場合、"pass" を持つ例の平均レートは、そのデータセットの合格率を形成します。

{
  "eval_id": "eval_abc123",
  "run_id": "run_xyz789",
  "status": "completed",
  "result_counts": {
    "passed": 85,
    "failed": 15,
    "total": 100
  },
  "per_testing_criteria_results": [
    {
      "name": "coherence",
      "passed": 92,
      "failed": 8,
      "pass_rate": 0.92
    },
    {
      "name": "relevance", 
      "passed": 78,
      "failed": 22,
      "pass_rate": 0.78
    }
  ]
}

実行をキャンセルする

不要になった実行をキャンセルする:

openai_client.evals.runs.cancel(
    run_id=eval_run.id,
    eval_id=eval_object.id,
)

クラウド評価のトラブルシューティング

長時間実行されているジョブ

評価ジョブは、長時間 実行 状態のままになる可能性があります。 この状態は通常、Azure OpenAI モデルのデプロイに十分な容量がないため、サービスが要求を再試行する場合に発生します。

解決方法:

  1. openai_client.evals.runs.cancel(run_id, eval_id=eval_id)を使用して、現在の評価ジョブを取り消します。
  2. Azure ポータルでモデル容量を増やします。
  3. 評価をもう一度実行します。

認証エラー

401 Unauthorizedまたは403 Forbiddenエラーが発生した場合は、次のことを確認します。

  • DefaultAzureCredentialを正しく構成しました。 Azure CLIを使用している場合は、az login を実行します。
  • お使いのアカウントには、 Foundry プロジェクトの Foundry ユーザー ロールがあります。
  • プロジェクト エンドポイントの URL は正しく、アカウント名とプロジェクト名の両方が含まれています。

データ形式のエラー

スキーマまたはデータ マッピング エラーで評価が失敗した場合:

  • JSONL ファイルに 1 行に 1 つの有効な JSON オブジェクトがあることを確認します。
  • data_mappingのフィールド名が JSONL ファイル内のフィールド名と正確に一致することを確認します (大文字と小文字が区別されます)。
  • item_schemaプロパティがデータセット内のフィールドと一致することを確認します。

エージェント応答評価でfile_idを使用する場合の HTTP 400 エラー

エージェント応答評価 (azure_ai_responses) では、 file_contentを介したインライン データのみがサポートされます。 file_idを使用して応答 ID を指定すると、400 Bad Request エラーが返されます。

解像 度:file_contentに切り替え、応答 ID をインラインで指定します。

レート制限エラー

テナント、サブスクリプション、プロジェクトの各レベルで、レート制限の評価実行が作成されます。 429 Too Many Requests応答を受け取った場合:

  • 応答の retry-after ヘッダーで、推奨される待機時間を確認します。
  • レート制限の詳細については、応答本文を確認します。
  • 失敗した要求を再試行するときは、指数バックオフを使用します。

実行中に評価ジョブが 429 エラーで失敗した場合:

  • 評価データセットのサイズを小さくするか、小さなバッチに分割します。
  • Azure portal で、モデル デプロイの 1 分あたりのトークン (TPM) クォータを増やします。

エージェント エバリュエーター ツールのエラー

サポートされていないツールのエラーがエージェント エバリュエーターから返された場合:

  • エージェント エバリュエーターで サポートされているツール を確認します。
  • 回避策として、エバリュエーターが評価できるように、サポートされていないツールをユーザー定義関数ツールとしてラップします。