次の方法で共有


Azure AI Foundry SDK を使用してクラウドで評価を実行する (プレビュー)

重要

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

Azure AI Evaluation SDK では、自分のコンピューターでローカルで評価の実行がサポートされていますが、ジョブをクラウドにリモートで委任することもできます。 たとえば、小規模なテスト データに対してローカル評価を実行して生成 AI アプリケーションのプロトタイプを評価した後、デプロイ前テストに移行し、大規模なデータセットで評価を実行する必要がある場合です。 クラウド評価を使用すると、ローカル コンピューティング インフラストラクチャの管理が不要になり、評価をテストとして CI/CD パイプラインに統合できます。 デプロイ後、アプリケーションを継続的に評価してデプロイ後の監視を行うこともできます。

この記事では、テスト データセットのデプロイ前テストでクラウド (プレビュー) で評価を実行する方法について説明します。 Azure AI Projects SDK を使用すると、評価結果が Azure AI プロジェクトに自動的にログされ、監視性が向上します。 この機能は、Microsoft によってキュレーションされたすべての組み込みエバリュエータおよび独自のカスタム エバリュエータをサポートします。これはエバリュエータ ライブラリにあり、同じプロジェクト スコープ RBAC を持ちます。

Azure AI Foundry Projects の前提条件の設定手順

  • Azure AI Foundry プロジェクトは、リスクと安全性エバリュエーター (プレビュー) と同じサポートされている リージョン にあります。 既存のプロジェクトがない場合は、 Azure AI Foundry プロジェクトを作成してプロジェクトを作成する方法 に関するガイドに従ってください。

  • Azure OpenAI デプロイと、chat completion など、gpt-4 をサポートする GPT モデル。

  • az login を実行し、最初に Azure サブスクリプションにログインしていることを確認します。

評価を初めて実行して Azure AI Foundry プロジェクトにログ記録する場合は、いくつかの追加のセットアップ手順が必要になる場合があります。

  1. リソース レベルでストレージ アカウントを作成し、Azure AI Foundry プロジェクトに接続します。 これを行うには、次の 2 つの方法があります。
  2. 接続されているストレージ アカウントがすべてのプロジェクトにアクセスできることを確認します。
  3. Microsoft Entra ID でストレージ アカウントを接続した場合は、Azure portal でアカウントと Foundry プロジェクト リソースの両方に、ストレージ BLOB データ所有者の MSI (Microsoft ID) アクセス許可を付与してください。

作業の開始

まず、クラウドで評価を実行する Azure AI Foundry SDK のプロジェクト クライアントをインストールします

uv install azure-ai-projects azure-identity

詳細については、 REST API リファレンス ドキュメントを参照してください。 次に、Azure AI Foundry リソースの環境変数を設定します

import os

# Required environment variables
endpoint = os.environ["PROJECT_ENDPOINT"] # https://<account>.services.ai.azure.com/api/projects/<project>
model_endpoint = os.environ["MODEL_ENDPOINT"] # https://<account>.services.ai.azure.com
model_api_key = os.environ["MODEL_API_KEY"]
model_deployment_name = os.environ["MODEL_DEPLOYMENT_NAME"] # e.g. gpt-4o-mini

# Optional – reuse an existing dataset
dataset_name    = os.environ.get("DATASET_NAME",    "dataset-test")
dataset_version = os.environ.get("DATASET_VERSION", "1.0")

これで、クラウドで評価を実行するために使用されるクライアントを定義できます。

import os
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient

# Create the project client (Foundry project and credentials)
project_client = AIProjectClient(
    endpoint=endpoint,
    credential=DefaultAzureCredential(),
)

評価データのアップロード

# Upload a local jsonl file (skip if you already have a Dataset registered)
data_id = project_client.datasets.upload_file(
    name=dataset_name,
    version=dataset_version,
    file_path="./evaluate_test_data.jsonl",
).id

GenAIアプリケーションを評価するための入力データ形式の詳細については、シングルターンデータ会話データ画像とマルチモダリティの会話データを参照してください。

エージェントを評価するための入力データ形式の詳細については、 Azure AI エージェントの評価 と他の エージェントの評価に関するページを参照してください。

エバリュエーターの指定

from azure.ai.projects.models import (
    EvaluatorConfiguration,
    EvaluatorIds,
)

# Built-in evaluator configurations
evaluators = {
    "relevance": EvaluatorConfiguration(
        id=EvaluatorIds.RELEVANCE.value,
        init_params={"deployment_name": model_deployment_name},
        data_mapping={
            "query": "${data.query}",
            "response": "${data.response}",
        },
    ),
    "violence": EvaluatorConfiguration(
        id=EvaluatorIds.VIOLENCE.value,
        init_params={"azure_ai_project": endpoint},
    ),
    "bleu_score": EvaluatorConfiguration(
        id=EvaluatorIds.BLEU_SCORE.value,
    ),
}

クラウドで評価を送信する

最後に、リモート評価実行を送信します。

from azure.ai.projects.models import (
    Evaluation,
    InputDataset
)

# Create an evaluation with the dataset and evaluators specified
evaluation = Evaluation(
    display_name="Cloud evaluation",
    description="Evaluation of dataset",
    data=InputDataset(id=data_id),
    evaluators=evaluators,
)

# Run the evaluation 
evaluation_response = project_client.evaluations.create(
    evaluation,
    headers={
        "model-endpoint": model_endpoint,
        "api-key": model_api_key,
    },
)

print("Created evaluation:", evaluation_response.name)
print("Status:", evaluation_response.status)

カスタム エバリュエータを指定する

この機能では、Azure AI Foundry Projects はサポートされていません。 代わりに Azure AI Hub プロジェクトを使用してください。

コード ベースのカスタム エバリュエーター

カスタム エバリュエーターを Azure AI Hub プロジェクトに登録し、エバリュエーター ID をフェッチします。

from azure.ai.ml import MLClient
from azure.ai.ml.entities import Model
from promptflow.client import PFClient

# Define ml_client to register custom evaluator
ml_client = MLClient(
       subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"],
       resource_group_name=os.environ["AZURE_RESOURCE_GROUP"],
       workspace_name=os.environ["AZURE_PROJECT_NAME"],
       credential=DefaultAzureCredential()
)

# Load evaluator from module
from answer_len.answer_length import AnswerLengthEvaluator

# Then we convert it to evaluation flow and save it locally
pf_client = PFClient()
local_path = "answer_len_local"
pf_client.flows.save(entry=AnswerLengthEvaluator, path=local_path)

# Specify evaluator name to appear in the Evaluator library
evaluator_name = "AnswerLenEvaluator"

# Finally register the evaluator to the Evaluator library
custom_evaluator = Model(
    path=local_path,
    name=evaluator_name,
    description="Evaluator calculating answer length.",
)
registered_evaluator = ml_client.evaluators.create_or_update(custom_evaluator)
print("Registered evaluator id:", registered_evaluator.id)
# Registered evaluators have versioning. You can always reference any version available.
versioned_evaluator = ml_client.evaluators.get(evaluator_name, version=1)
print("Versioned evaluator id:", registered_evaluator.id)

カスタム エバリュエータを Azure AI プロジェクトに登録した後、Azure AI プロジェクトの [評価] タブにある [エバリュエータ ライブラリ] で確認できます。

プロンプト ベースのカスタム エバリュエーター

プロンプト ベースのエバリュエーターの説明に従ってビルドされたカスタム FriendlinessEvaluatorを登録する例に従います。

# Import your prompt-based custom evaluator
from friendliness.friend import FriendlinessEvaluator

# Define your deployment 
model_config = dict(
    azure_endpoint=os.environ.get("AZURE_ENDPOINT"),
    azure_deployment=os.environ.get("AZURE_DEPLOYMENT_NAME"),
    api_version=os.environ.get("AZURE_API_VERSION"),
    api_key=os.environ.get("AZURE_API_KEY"), 
    type="azure_openai"
)

# Define ml_client to register custom evaluator
ml_client = MLClient(
       subscription_id=os.environ["AZURE_SUBSCRIPTION_ID"],
       resource_group_name=os.environ["AZURE_RESOURCE_GROUP"],
       workspace_name=os.environ["AZURE_PROJECT_NAME"],
       credential=DefaultAzureCredential()
)

# # Convert evaluator to evaluation flow and save it locally
local_path = "friendliness_local"
pf_client = PFClient()
pf_client.flows.save(entry=FriendlinessEvaluator, path=local_path) 

# Specify evaluator name to appear in the Evaluator library
evaluator_name = "FriendlinessEvaluator"

# Register the evaluator to the Evaluator library
custom_evaluator = Model(
    path=local_path,
    name=evaluator_name,
    description="prompt-based evaluator measuring response friendliness.",
)
registered_evaluator = ml_client.evaluators.create_or_update(custom_evaluator)
print("Registered evaluator id:", registered_evaluator.id)
# Registered evaluators have versioning. You can always reference any version available.
versioned_evaluator = ml_client.evaluators.get(evaluator_name, version=1)
print("Versioned evaluator id:", registered_evaluator.id)

カスタム エバリュエータを Azure AI プロジェクトに登録した後、Azure AI の [評価] タブにある [エバリュエータ ライブラリ] で確認できます。