非同期評価実行のポーリング、項目と集計出力の取得、実行の取り消し、一般的な評価エラーの解決。
前提条件
- クラウド評価の前提条件とクライアントのセットアップを完了します。
- 送信されたクラウド評価の評価 ID と実行 ID。
この例では、「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 モデルのデプロイに十分な容量がないため、サービスが要求を再試行する場合に発生します。
解決方法:
-
openai_client.evals.runs.cancel(run_id, eval_id=eval_id)を使用して、現在の評価ジョブを取り消します。 - Azure ポータルでモデル容量を増やします。
- 評価をもう一度実行します。
認証エラー
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) クォータを増やします。
エージェント エバリュエーター ツールのエラー
サポートされていないツールのエラーがエージェント エバリュエーターから返された場合:
- エージェント エバリュエーターで サポートされているツール を確認します。
- 回避策として、エバリュエーターが評価できるように、サポートされていないツールをユーザー定義関数ツールとしてラップします。