Rubric エバリュエーター (プレビュー)

Important

この記事で "(プレビュー)" と付記されている項目は、現在、パブリック プレビュー段階です。 このプレビューはサービス レベル アグリーメントなしで提供されており、運用環境ではお勧めしません。 特定の機能がサポートされていないか、機能が制限されている可能性があります。 詳細については、「 Microsoft Azure プレビューの追加使用条件」を参照してください。

ルーブリック エバリュエーターは、LLM をジャッジとして使用して、定義したカスタムの加重条件に対してエージェントまたはモデルの応答をスコア付けします。 これにより、その判断を一貫して大規模に適用しながら、ユース ケースにとって "良い" 意味を完全に制御できます。

ルーブリックは、応答を評価する方法を定義する一連の条件です。 各ルーブリックにはスコア付け ディメンションが含まれています。各ディメンションには、測定内容の説明と、相対的な重要度を反映した重みがあります。 LLM ジャッジは、1 回の応答または複数ターンの会話で、該当する各ディメンションを 1 から 5 にスコア付けします。 ルーブリック スコア全体は、これらのスコアの加重平均であり、0 から 1 の範囲に正規化されます。

ルーブリック エバリュエーターをエージェント品質の主要な尺度として使用します。これは、ユース ケースにとって重要な正確な条件を表すことができます。 それらを組み込みのエバリュエーターと組み合わせて、ルーブリックが測定しないリスクをカバーするために、安全性、接地性、およびコンテンツの損害を防ぐことができます。 この記事の残りの部分では、ルーブリックを生成する方法、ルーブリックに含まれるフィールド、LLM ジャッジ モデルを選択する方法、結果を確認する方法について説明します。

ルーブリック エバリュエーターを生成する

ルーブリック エバリュエーターは、次の 2 つの方法で作成できます。

LLM モデルを選択してエージェントのコンテキストからルーブリックを生成することで、ルーブリック エバリュエーターを自動的に作成できます。 次の基本入力のうち少なくとも 1 つを指定します。

  • Foundry エージェント - 既存の Foundry エージェントを選択します。 このサービスは、生成コンテキストとして使用するエージェントの指示 (プロンプト エージェントの場合) またはその説明 (ホステッド エージェントの場合) をプルします。
  • エージェント システム プロンプト - エージェント の意図した動作を定義する手順を貼り付けます。 これは、エージェントが Foundry に登録されていない場合、または登録されたコンテキストがその動作を完全にキャプチャしない場合に使用します。
  • 参照ファイル — エージェントのコンテキストと予想される応答品質を説明するドキュメント、ナレッジ ベースのコンテンツ、またはドメイン ガイドライン。

最良の結果を得るには、上記の基本入力の上にエージェントの運用トレースを追加して、実際の使用法でルーブリックを接地します。

  • トレース — Application Insights の Foundry トレースから収集されたエージェント運用トレース。 トレースは単独では使用できません。は、Foundry エージェント、エージェント システム プロンプト、または参照ファイルと組み合わせて使用できます。

生成された各ルーブリックには、次のフィールドが含まれています。

フィールド Description
id 第一世代のサービスによって割り当てられた、人間が判読できる安定したスラッグ。 条件を編集して新しいバージョンとして保存する場合は、既存の id をエコーして、バージョン間で ID を保持します。 サービスは編集時に ID を再割り当てしません。
description この基準で測定される内容は、明確で特定の品質ディメンションです。
weight 基準の相対的な重要度。 生成パイプラインでは、厳密に 1 つの条件に 8 ~ 10 (最も結果が決定的なディメンション) と 1 から 6 の重みが割り当てられます。 ユーザーの編集は、このヒューリスティックによって制限されません。
always_applicable trueすると、LLM ジャッジは、関連性に関係なく常にこの基準をスコア付けします (適用性評価はスキップされます)。 一般的な品質基準に使用されます。 既定値は false です。

LLM ジャッジ モデルを選択する

すべてのモデルがルーブリックジャッジと同じように動作するわけではありません。 次の表に、ルーブリックの生成とスコアリングでサポートされているチャット モデルを示します。

Model レコメンデーション
gpt-5.5 推奨
gpt-5.4 推奨
gpt-5.4-mini 推奨 — パフォーマンスとコストの最適なバランス
gpt-5.4-nano 推奨
gpt-5.2 推奨
gpt-5.1 推奨
gpt-5 推奨
gpt-5-mini 推奨
gpt-5-nano 推奨
gpt-4.1 許容範囲内
gpt-4o 許容範囲内

ルーブリックを手動で作成する

各ディメンションの iddescription、および weightを定義して、独自のルーブリックを記述します。 Foundry に取り込む別の場所にルーブリックが既に定義されている場合は、この方法を使用します。

Tip

まず、自動生成されたルーブリック エバリュエーターを作成し、手動で調整します。 自動生成により、特定の品質基準に合わせて調整できる強力なベースラインが提供されます。

ルーブリックを確認して調整する

ルーブリックを生成または作成したら、ディメンションを確認して、エージェントの品質に対する期待値と一致することを確認します。 次のようにすることができます。

  • iddescriptionweightを編集する - 各ディメンション レベルの条件をより具体的に言語に絞り込みます。 正確な説明と重みにより、スコアリングの一貫性が向上します。
  • ディメンションを追加または削除する - ドメインに関係する品質ディメンションを挿入するか、適用されないディメンションを削除します。
  • しきい値を調整する — 合格のしきい値を設定して、合格と見なされる全体的なスコアを制御します。 値の範囲は 0.0 から 1.0 で、1.0 は最高スコアです。 より厳密な品質基準のしきい値を上げるか、より緩やかなものに下げます。
  • [常に適用可能に設定] - 条件の [ 常に適用可能] チェックボックスをオンまたはオフにします。 選択すると、LLM は関連性を最初に確認することなく、すべての応答に対してこの基準をスコア付けします。

各ルーブリックの詳細設定では、このルーブリック エバリュエーターの評価レベルとカテゴリを表示することもできます。

許容可能なエージェント応答と許容できないエージェント応答を確実に区別するまで、ルーブリックを反復処理します。 サンプル データセットに対して小さな評価を実行して、大規模に使用する前に、ルーブリック スコアが独自の判断と一致していることを検証します。

ルーブリックの例

次の例は、レストラン予約エージェントのルーブリックを示しています。 各条件は、相対的な重要度を反映する重みを持つ特定の品質ディメンションを対象とします。

[
  {
    "id": "intent_recognition",
    "description": "Correctly identifies the user's reservation intent (book, modify, cancel, inquire) and pursues the appropriate workflow without unnecessary clarification.",
    "weight": 9
  },
  {
    "id": "tool_usage_accuracy",
    "description": "Calls the correct tool with correct parameters. Does not call tools unnecessarily, and does not skip tool calls when they are needed.",
    "weight": 6
  },
  {
    "id": "policy_enforcement",
    "description": "Enforces business rules: dinner service 17:00-22:00, max party size 8, 30-day booking window. Does not create reservations that violate these constraints.",
    "weight": 5
  },
  {
    "id": "information_gathering",
    "description": "Collects all required information (date, time, party size, contact) before attempting to create a reservation. Does not ask for information already provided.",
    "weight": 4
  },
  {
    "id": "communication_clarity",
    "description": "Provides clear, concise responses. Confirms reservation details before finalizing. Uses a professional and helpful tone.",
    "weight": 2
  },
  {
    "id": "general_quality",
    "description": "Other important quality factors not already covered by the listed criteria.",
    "weight": 5,
    "always_applicable": true
  }
]

このルーブリックでは、ユーザーが望むものを正しく識別することが最も結果決定要因であるため、 intent_recognition は最も重み (9) を持ちます。 general_quality条件ではalways_applicable: trueが使用されるため、他の条件が適用されない場合でも、すべての応答に対して評価が行われます。

ルーブリック エバリュエーターを使用して評価を実行する

Rubric エバリュエーターは、汎用エバリュエーターではキャプチャできないドメイン固有または組織固有の品質基準に適しています。 チームの特定の品質基準 (カスタマー サポートのトーン、医療の正確さ、法的コンプライアンスなど) を反映したスコアリングが必要な場合は、ルーブリックを定義します。

LLM ジャッジはルーブリックを読み取り、マップされた入力データを調べ、スコアを割り当て、スコア決定の理由を提供します。 この方法では、カスタム条件の柔軟性と LLM ベースの評価の一貫性を組み合わせます。

評価の実行とデータ ソースの構成の詳細については、「 SDK からの評価の実行」を参照してください。

実行可能な例については、 sample_rubric_evaluator_generation_basic.pyを参照してください。 その他のルーブリック サンプル (すべてのソースの生成、反復編集、完全なライフサイクル、手動作成) については、 評価サンプル README を参照してください。

サンプルの出力

ルーブリック エバリュエーターは、各ディメンションの加重スコア、全体的なスコア、合格/失敗ラベル、および決定を説明する理由を返します。 既定のパスしきい値は 0.5 です。 しきい値以上のスコアは合格と見なされます。

パスの例

この例では、ユーザーが金曜日の午後 7 時 30 分に 4 のテーブルを予約するように求めます。 エージェントは予約の意図を正しく識別し、有効なパラメーターを使用して予約ツールを呼び出し、予約を確認します。

{
  "score": 0.9419354839,
  "label": "pass",
  "reason": "The verdict is driven most by intent_recognition (5), tool_usage_accuracy (5), and policy_enforcement (5). The assistant correctly identified the booking intent, called the reservation tool with valid parameters (Friday 7:30 PM, party of 4), and returned a clear confirmation with the reservation details.",
  "threshold": 0.5,
  "passed": true,
  "properties": {
    "dimension_scores": [
      {
        "id": "intent_recognition",
        "score": 5,
        "applicable": true,
        "weight": 9,
        "reason": "The user's request to book a table is correctly identified, and the assistant pursues the booking workflow without unnecessary clarification."
      },
      {
        "id": "tool_usage_accuracy",
        "score": 5,
        "applicable": true,
        "weight": 6,
        "reason": "The reservation tool is called once with the correct date, time, and party size parameters derived from the user's request."
      },
      {
        "id": "policy_enforcement",
        "score": 5,
        "applicable": true,
        "weight": 5,
        "reason": "The reservation falls within dinner service hours, the party size is within the maximum of 8, and the date is within the 30-day booking window."
      },
      {
        "id": "information_gathering",
        "score": 4,
        "applicable": true,
        "weight": 4,
        "reason": "All required information (date, time, party size, contact) is captured from the request without asking for details already provided."
      },
      {
        "id": "communication_clarity",
        "score": 5,
        "applicable": true,
        "weight": 2,
        "reason": "The confirmation is concise and includes the reservation date, time, and party size in a single clear message."
      },
      {
        "id": "general_quality",
        "score": 4,
        "applicable": true,
        "weight": 5,
        "reason": "Overall execution is strong: the assistant handles the booking end to end with no unnecessary turns or recovery steps."
      }
    ]
  }
}

失敗の例

この例では、ユーザーが土曜日に 12 人分のテーブルを予約するように求めます。 パーティーの最大サイズは 8 ですが、エージェントはポリシー違反にフラグを設定せずに予約に進みます。

{
  "score": 0.3548387097,
  "label": "fail",
  "reason": "The verdict is driven by very low policy_enforcement (1), tool_usage_accuracy (1), and general_quality (1). The user requested a table for 12, which exceeds the maximum party size of 8, but the assistant proceeded to call the reservation tool and confirmed a booking that violates business rules.",
  "threshold": 0.5,
  "passed": false,
  "properties": {
    "dimension_scores": [
      {
        "id": "intent_recognition",
        "score": 3,
        "applicable": true,
        "weight": 9,
        "reason": "The booking intent is identified, but the assistant fails to flag that the requested party size cannot be accommodated under business rules."
      },
      {
        "id": "tool_usage_accuracy",
        "score": 1,
        "applicable": true,
        "weight": 6,
        "reason": "The reservation tool is called with a party size that the business rules prohibit, producing an invalid booking."
      },
      {
        "id": "policy_enforcement",
        "score": 1,
        "applicable": true,
        "weight": 5,
        "reason": "The 8-person maximum party size is not enforced; the assistant should have declined or offered to split the party before attempting to book."
      },
      {
        "id": "information_gathering",
        "score": 2,
        "applicable": true,
        "weight": 4,
        "reason": "The assistant collected the party size and date but did not confirm a specific time, leaving required information incomplete."
      },
      {
        "id": "communication_clarity",
        "score": 2,
        "applicable": true,
        "weight": 2,
        "reason": "The final confirmation message is clear in form, but it asserts a booking that the system shouldn't have allowed, creating a misleading outcome."
      },
      {
        "id": "general_quality",
        "score": 1,
        "applicable": true,
        "weight": 5,
        "reason": "Overall quality is poor: the assistant violates a core business rule without warning the user or recovering, undermining trust in the booking outcome."
      }
    ]
  }
}

各出力項目には、理由を含むディメンションごとのスコアが含まれます。 "applicable": falseマークされたディメンションはスキップされ、全体的なスコアには影響しません。 全体的なスコアは、適用可能なすべてのディメンション スコアの加重平均であり、0 から 1 の範囲に正規化されます。

Note

Rubric エバリュエーターは、LLM-as-judge スコアリングを使用し、評価呼び出しごとにモデル推論コストが発生します。 スコアリングの信頼性は、応答が非常に短い場合に異なる場合があります。 評価全体のスコア付け整合性を向上させるために、具体的で明確なルーブリックの説明を記述します。

ルーブリック エバリュエーターを使用して継続的評価を設定する

ルーブリック エバリュエーターが品質基準を確実に反映したら、 モニター設定で継続的およびスケジュールされた評価用に構成します。 継続的な評価では、新しいエージェント トラフィックに対してルーブリックが自動的に実行されるため、手動実行をトリガーすることなく、運用環境で発生した品質回帰をキャッチできます。

セットアップ手順については、 ダッシュボードの「エージェントの監視」を参照してください。