次の方法で共有


Azure AI Studio で評価フローを開発する

重要

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

評価フローは特別な種類のフローであり、実行の出力が特定の条件および目標とどの程度よく一致しているかを評価します。

プロンプト フローでは、タスクと目標に合わせて独自の評価フローをカスタマイズまたは作成した後、それを使って他のフローを評価することができます。 このドキュメントでは、次の内容について説明します。

  • 評価方法を開発する方法。
  • プロンプト フロー評価の入力、出力、ログ メトリックについて理解します。

評価方法の開発を始める

独自の評価方法を開発するには、次の 2 つの方法があります。

  • 組み込みの評価フローをカスタマイズする: 組み込みの評価フローを変更します。

    1. [ツール] で、[プロンプト フロー] を選択します。
    2. [作成] を選択して、フロー作成ウィザードを開きます。
    3. フロー ギャラリーの [ギャラリーの探索][評価フロー] を選択して、その種類でフィルター処理します。 サンプルを選択し、[クローン] を選択してカスタマイズを行います。
  • 新しい評価フローを最初から作成する: 新しい評価方法を一から開発します。

    1. [ツール] で、[プロンプト フロー] を選択します。
    2. [作成] を選択して、フロー作成ウィザードを開きます。
    3. [評価フロー] ボックスの [種類別に作成] の下にあるフロー ギャラリーで、[作成] を選択すると、評価フローのテンプレートが表示されます。

プロンプト フローでの評価について理解する

プロンプト フローでは、フローは入力を処理して出力を生成するノードのシーケンスです。 評価フローも、必要な入力を受け取って、対応する出力を生成します。

評価方法の特殊な機能は次のとおりです。

  • 通常はテスト対象の実行の後に実行され、その実行から出力を受け取ります。
  • テスト対象の実行からの出力とは別に任意で、対応するグランド トゥルースを含む可能性がある別のデータセットを受け取ることができます。
  • 個々のスコアに基づいてテスト対象のフローの全体的なパフォーマンスを計算する集計ノードが存在する場合があります。
  • log_metric() 関数を使用してメトリックをログできます。

評価方法の開発で入力と出力を定義する方法について説明します。

入力

評価は、別の実行の後に実行され、その実行の出力が特定の条件と目標とどの程度よく一致しているかを評価します。 したがって、評価はその実行から生成された出力を受け取ります。

また、データセットから得られる可能性がある他の入力 (グランド トゥルースなど) が必要になる場合もあります。 既定では、評価にはテスト実行に提供されたテスト データセットと同じデータセットが使用されます。 ただし、対応するラベルまたはターゲットのグラウンド トゥルース値が別のデータセット内にある場合は、そのデータセットに簡単に切り替えることができます。

したがって、評価を実行するには、これらの必要な入力のソースを示す必要があります。 これを行うため、評価を送信するときに "入力マッピング" セクションが表示されます。

  • 実行の出力がデータ ソースの場合、ソースは ${run.output.[OutputName]} と示されます
  • テスト データセットがデータ ソースの場合、ソースは ${data.[ColumnName]} と示されます

Note

評価でデータセットのデータが必要ない場合は、入力マッピング セクションのデータセット列を参照する必要はありません。これは、データセットの選択がオプションの構成であることを示します。 データセットの選択は評価結果には影響しません。

入力の説明

メトリックの計算に必要な入力がわかるよう、必要な入力ごとに説明を追加できます。 この説明は、バッチ実行の送信でソースをマッピングするときに表示されます。

各入力の説明を追加するには、評価方法を開発するときに、入力セクションで [説明の表示] を選びます。 また、[説明を非表示にします] を選ぶと説明が表示されないようにできます。

この場合、この説明はバッチ実行の送信でこの評価方法を使用すると表示されます。

出力とメトリック

評価の出力は、テスト対象のフローのパフォーマンスの測定結果です。 出力には、通常、スコアなどのメトリックが含まれており、推論や提案のテキストが含まれることもあります。

インスタンスレベルのスコア出力

プロンプト フローでは、各サンプル データセットが一度に 1 つずつ処理されて、出力レコードが生成されます。 同様に、ほとんどの評価ケースでは、出力ごとにメトリックがあり、個々のデータそれぞれに対するフローのパフォーマンスをチェックできます。

各データ サンプルのスコアを記録するには、各出力のスコアを計算し、出力セクションで設定することによってスコアをフロー出力としてログします。 この作成エクスペリエンスは、標準的なフローの出力の定義と同じです。

このスコアは line_process ノードで計算され、種類別に作成するときにゼロから作成および編集できます。 この python ノードを LLM ノードで置き換えて、LLM を使用してスコアを計算することもできます。

この評価方法を別のフローの評価に使うと、インスタンス レベルのスコアを [概要]>[出力] タブで見ることができます。

メトリックのログと集計ノード

さらに、実行の全体的なスコアを提供することも重要です。 評価フロー内の Python ノードの [集計として設定する] をオンにすることで、それを "リデュース" ノードに変換することができ、ノードは入力をリストとして取り込んでバッチ処理できます。

このようにして、各フロー出力のすべてのスコアを計算して処理し、各バリアントの全体的な結果を計算できます。

Prompt flow_sdk.log_metrics() を使って、集計ノードにメトリックをログできます。 メトリックは数値 (float/int) である必要があります。 文字列型メトリックのログはサポートされていません。

このスコアは aggregate ノードで計算され、種類別に作成するときにゼロから作成および編集できます。 この Python ノードを LLM ノードで置き換えて、LLM を使用してスコアを計算することもできます。 評価フローでの log_metric API の使い方については、次の例を参照してください。

from typing import List
from promptflow import tool, log_metric

@tool
def calculate_accuracy(grades: List[str], variant_ids: List[str]):
    aggregate_grades = {}
    for index in range(len(grades)):
        grade = grades[index]
        variant_id = variant_ids[index]
        if variant_id not in aggregate_grades.keys():
            aggregate_grades[variant_id] = []
        aggregate_grades[variant_id].append(grade)

    # calculate accuracy for each variant
    for name, values in aggregate_grades.items():
        accuracy = round((values.count("Correct") / len(values)), 2)
        log_metric("accuracy", accuracy, variant_id=name)

    return aggregate_grades

この関数は Python ノードで呼び出したので、他の場所に割り当てる必要はありません。後でメトリックを見ることができます。 この評価方法をバッチ実行で使うと、インスタンス レベルのスコアを [概要]->[メトリック] タブで見ることができます。

次のステップ