評価データセットとエバリュエーターを作成する (プレビュー)

Important

エージェント オプティマイザーは現在プレビュー段階です。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能がサポートされていないか、機能が制限されている可能性があります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。

エージェント オプティマイザーは、エバリュエーターによってスコア付けされたデータセット (タスクのコレクション) に対してエージェントを評価します。 両方を CLI から自動的に生成することも、完全な制御のためにデータセットを手動で作成することもできます。

どちらの部分も適切な最適化を行うために不可欠です。データセットは何をテスト するかを 定義し、エバリュエーターは各応答を判断する 方法 を定義します。 弱いエバリュエーターは、不適切な最適化につながるノイズ スコアを生成するため、代表的なタスクと同じくらい強力なエバリュエーターに投資します。

これらの資産の作成は、エージェント オプティマイザーの準備ができた後の最適化ワークフローの 2 番目の手順です。 オプティマイザーは、それらを使用してベースラインとランク付けの候補をスコア付けします。

Prerequisites

評価資産を作成する最も速い方法は、 azd ai agent eval generateを使用することです。 このコマンドは、エージェントを自動検出し、オプティマイザーが必要とするすべてのものを生成します。

azd ai agent eval generate

既定では、次が生成されます。

  • エージェントのドメインに合わせて調整されたタスクの シード データセット
  • 応答をスコア付けするエバリュエーター - 組み込みのエバリュエーター (builtin.task_adherence など) に加えて、エージェントに合わせたカスタム ルーブリック エバリュエーター
  • それらを結び付ける実行可能な eval.yaml

対話型ウィザード、非対話型フラグ、生成された成果物の詳細については、「 評価資産の初期化」を参照してください。

生成後、 azd ai agent optimizeeval.yamlを自動検出します。

azd ai agent optimize

生成されたアセットをカスタマイズするには、「 エバリュエーターのカスタマイズ 」および 「カスタム データセットの作成」を参照してください。 実行オプションを変更するには、 eval.yamlを編集します。 最適化実行の構成を参照してください。

エバリュエーターのカスタマイズ (詳細)

エバリュエーターは、各エージェントの応答をスコア付けします。 オプティマイザーでは、次の 2 種類がサポートされています。

  • などのbuiltin.task_adherence。各タスク レベルの条件を合格または失敗としてスコア付けします。
  • カスタム ルーブリック エバリュエーター。エージェントに合わせて調整された複数の品質ディメンションにわたって応答をスコア付けします。 azd ai agent eval generate は、編集可能な rubric_dimensions.json ファイルを自動的に作成します。

ほとんどのエージェントでは、生成されたルーブリック エバリュエーターは、ドメインに合わせて調整されているため、最も意味のあるスコアを提供します。 生成された rubric_dimensions.json を編集してディメンションを絞り込み、 azd ai agent eval update 実行して変更を新しいバージョンとして登録します。 エバリュエーターの生成、編集、およびバージョン管理の詳細については、「 評価資産の初期化」を参照してください。

エバリュエーターを実行構成に接続するには、「 最適化実行の構成」を参照してください。

カスタム データセットを作成する (詳細)

テスト シナリオを正確に制御する必要がある場合や、運用データを直接使用する必要がある場合は、カスタム データセットを作成します。 推奨される方法は、生成 azd ai agent eval generate シード データセットの上で反復処理するか、ローカル データセットに絞り込むか、Foundry プロジェクトに既に登録されている別のデータセットをポイントすることです。

データセット ソースを選択する

データセットは、次の 2 つのソースのいずれかから取得できます。

  • Foundry データセット — Foundry プロジェクトに既に登録されているデータセット。 eval.yamlnameおよびversionによって参照します。
  • ローカル データセット - プロジェクトで作成して保持する JSONL ファイル。 eval.yamlで、local_uriを使用して参照します。

どちらのソースも、次のセクションで説明するのと同じタスク スキーマを使用します。 eval.yaml配線については、「最適化実行の構成」を参照してください。

データセット スキーマ

データセットでは JSONL (JSON Lines) 形式が使用されます。 各行は、1 つの評価 タスク (個々のシナリオ) を表す 1 つの JSON オブジェクトです。 タスクにはプロンプト(query)があり、任意でタスクレベルの criteria があります。

{"name": "task_1", "query": "Your prompt here"}
{"name": "task_2", "query": "Another prompt", "ground_truth": "Expected answer"}
フィールド 必須 説明
name はい 一意のタスク識別子 (たとえば、 "greeting""math_test")。
query はい エージェントに送信されたメッセージ。
ground_truth いいえ 参照をサポートするエバリュエーターによって使用される予想される回答。
criteria いいえ 任意のタスクレベルの確認。 タスク レベルの条件の追加を参照してください。

ローカル データセットを使用する場合は、最適化を実行する前に JSONL 構文を検証します。

python -c "import json; [json.loads(l) for l in open('eval.jsonl')]"

タスク レベルの条件を追加する

条件は省略可能です。 で構成するeval.yamlは、データセット内のすべてのタスクに適用されます。 特定のタスクがそれらの共有エバリュエーターを超えてチェックする必要がある場合にのみ、タスクごとの criteria を追加します。 存在する場合、タスクの criteria がスコア付けされ、共有エバリュエーターと共に集計され、タスクの全体的なスコアが生成されます。

フィールド 必須 説明
criteria[].name はい 条件の短い名前 (たとえば、 "is_polite")。
criteria[].instruction はい エバリュエーターがチェックする内容。 具体的でテスト可能である。

次のカスタマー サポート データセットは、タスク レベルの条件を持つタスクを示しています。

{"name": "refund_policy", "query": "What is your refund policy?", "criteria": [{"name": "mentions_30_days", "instruction": "Response must mention the 30-day refund window"}, {"name": "polite_tone", "instruction": "Response must be professional and empathetic"}]}
{"name": "order_status", "query": "Where is my order #12345?", "criteria": [{"name": "asks_for_details", "instruction": "Agent should ask for email or order details to look up the order"}, {"name": "no_hallucination", "instruction": "Agent must NOT make up a fake order status"}]}
{"name": "out_of_scope", "query": "Can you help me fix my car?", "criteria": [{"name": "polite_decline", "instruction": "Agent should politely explain this is outside its scope"}, {"name": "redirect", "instruction": "Agent should suggest contacting an appropriate service"}]}

適切なデータセットを作成するためのヒント

エッジ ケースも含める

想定通りのケースだけでなく、すべてのケースもテストする。 次の内容を含めます。

  • スコープ外の要求 — エージェントが拒否またはリダイレクトする必要がある入力
  • あいまいなクエリ - エージェントが明確化を要求する必要があるタスク
  • 敵対的な入力 - エージェントを不正な動作に陥そうとします
  • 複数ステップのタスク - 構造化された推論を必要とする複雑な要求

サイズのガイドライン

データセットのサイズ トレードオフ
3 ~ 5 個のタスク 迅速な反復、限られたシグナル
5 ~ 10 個のタスク 速度と網羅性のバランスが良い
10 ~ 20 個のタスク 包括的な評価、長時間の実行
20 以上のタスク 徹底的だが時間がかかる — 最終的な検証に検討する

データセットが大きいほど対象範囲は広くなりますが、評価に時間がかかります。

有用な場合に地上の真理を提供する

ground_truth フィールドは、エバリュエーターに対して比較する参照回答を提供します。 これは必須ではありません。エバリュエーターは、指示やタスク レベルの基準からの応答を単独で判断することもできます。

{"name": "geography_fact", "query": "What is the largest city in France by population?", "ground_truth": "Paris", "criteria": [{"name": "correct_answer", "instruction": "Response must state that Paris is the largest city in France by population"}]}

実際のユーザーのようなプロンプトを書く

可能であれば、ユーザーからの実際のメッセージを使用します。 実際のプロンプトでは、エージェントが運用環境で直面するボキャブラリとコンテキストがキャプチャされます。これは、現実的なタスク レベルの条件を記述するのにも役立ちます。

条件で具体的にする

あいまいな条件は、一貫性のないスコア付けにつながります。 各条件を特定し、テスト可能にします。

悪い:

{"name": "good_answer", "instruction": "The response should be good"}

よし:

{"name": "mentions_30_days", "instruction": "Response must explicitly mention the 30-day refund window"}

Troubleshooting

問題 原因 修正
dataset not found eval.yaml のパスが間違っています dataset.local_uriの場合は、構成ファイルの場所を基準としたパスを使用します。 Foundry データセットの場合は、 dataset.namedataset.versionを確認します。
invalid JSON on line N 形式が正しくない JSONL 各行が有効な JSON であることを検証します。 末尾のコンマを確認します。
実行ごとにスコアが一致しない あいまいな条件 条件を特定し、テスト可能にします。