このクイック スタートでは、OpenAI モデルからのチャット応答の品質を評価する MSTest アプリを作成します。 テスト アプリでは、Microsoft.Extensions.AI.Evaluation ライブラリを使用します。
注
このクイック スタートでは、評価 API の最も簡単な使用方法を示します。 特に、 応答キャッシュ と レポート 機能の使用は示されていません。これは、"オフライン" 評価パイプラインの一部として実行される単体テストを作成する場合に重要です。 このクイック スタートで示すシナリオは、運用コード内の AI 応答の "オンライン" 評価や、キャッシュとレポートが関連しないテレメトリへのスコアのログ記録などのユース ケースに適しています。 キャッシュとレポート機能を示すチュートリアルについては、「チュートリアル: 応答キャッシュとレポートを使用してモデルの応答を評価する」を参照してください。
[前提条件]
AI サービスを構成する
Azure ポータルを使用してAzure OpenAI serviceとモデルをプロビジョニングするには、「Create and deploy an Azure OpenAI Service resource」の手順を実行します。 [モデルのデプロイ] ステップで、 gpt-5 モデルを選択します。
テスト アプリを作成する
AI モデルに接続する MSTest プロジェクトを作成するには、次の手順を実行します。
ターミナル ウィンドウで、アプリを作成するディレクトリに移動し、
dotnet newコマンドを使用して新しい MSTest アプリを作成します。dotnet new mstest -o TestAITestAIディレクトリに移動し、必要なパッケージをアプリに追加します。dotnet add package Azure.AI.OpenAI dotnet add package Azure.Identity dotnet add package Microsoft.Extensions.AI.Abstractions dotnet add package Microsoft.Extensions.AI.Evaluation dotnet add package Microsoft.Extensions.AI.Evaluation.Quality dotnet add package Microsoft.Extensions.AI.OpenAI dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets次のコマンドを実行して、Azure OpenAI エンドポイントとテナント ID にapp シークレットを追加します。
dotnet user-secrets init dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-Azure-OpenAI-endpoint> dotnet user-secrets set AZURE_TENANT_ID <your-tenant-ID>(環境によっては、テナント ID が必要ない場合があります。その場合は、 DefaultAzureCredentialをインスタンス化するコードから削除します。
任意のエディターで新しいアプリを開きます。
テスト アプリ コードを追加する
Test1.cs ファイルの名前を MyTests.cs に変更し、ファイルを開き、クラスの名前を
MyTestsに変更します。プライベート ChatConfiguration とチャット メッセージと応答メンバーを
MyTestsクラスに追加します。s_messagesフィールドは、2 つのChatMessage オブジェクトを含むリストです。1 つはチャット ボットの動作を指示し、もう 1 つはユーザーからの質問です。private static ChatConfiguration? s_chatConfiguration; private static IList<ChatMessage> s_messages = [ new ChatMessage( ChatRole.System, """ You're an AI assistant that can answer questions related to astronomy. Keep your responses concise and try to stay under 100 words. Use the imperial measurement system for all measurements in your response. """), new ChatMessage( ChatRole.User, "How far is the planet Venus from Earth at its closest and furthest points?")]; private static ChatResponse s_response = new();InitializeAsyncメソッドをMyTestsクラスに追加します。[ClassInitialize] public static async Task InitializeAsync(TestContext _) { /// Set up the <see cref="ChatConfiguration"/>, /// which includes the <see cref="IChatClient"/> that the /// evaluator uses to communicate with the model. s_chatConfiguration = GetAzureOpenAIChatConfiguration(); var chatOptions = new ChatOptions { Temperature = 0.0f, ResponseFormat = ChatResponseFormat.Text }; // Fetch the response to be evaluated // and store it in a static variable. s_response = await s_chatConfiguration.ChatClient.GetResponseAsync(s_messages, chatOptions); }このメソッドは、次のタスクを実行します。
- ChatConfigurationを設定します。
- ChatOptionsとTemperatureを含むResponseFormatを設定します。
- GetResponseAsync(IEnumerable<ChatMessage>, ChatOptions, CancellationToken)を呼び出して評価される応答をフェッチし、静的変数に格納します。
GetAzureOpenAIChatConfigurationメソッドを追加します。エバリュエーターがモデルとの通信に使用するIChatClientを作成します。private static ChatConfiguration GetAzureOpenAIChatConfiguration() { IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<MyTests>().Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]; string tenantId = config["AZURE_TENANT_ID"]; string model = "gpt-5"; // Get a chat client for the Azure OpenAI endpoint. AzureOpenAIClient azureClient = new( new Uri(endpoint), new DefaultAzureCredential(new DefaultAzureCredentialOptions() { TenantId = tenantId })); IChatClient client = azureClient.GetChatClient(deploymentName: model).AsIChatClient(); return new ChatConfiguration(client); }モデルの応答を評価するテスト メソッドを追加します。
[TestMethod] public async Task TestCoherence() { IEvaluator coherenceEvaluator = new CoherenceEvaluator(); EvaluationResult result = await coherenceEvaluator.EvaluateAsync( s_messages, s_response, s_chatConfiguration); /// Retrieve the score for coherence from the <see cref="EvaluationResult"/>. NumericMetric coherence = result.Get<NumericMetric>(CoherenceEvaluator.CoherenceMetricName); // Validate the default interpretation // for the returned coherence metric. Assert.IsFalse(coherence.Interpretation!.Failed); Assert.IsTrue(coherence.Interpretation.Rating is EvaluationRating.Good or EvaluationRating.Exceptional); // Validate that no diagnostics are present // on the returned coherence metric. Assert.IsFalse(coherence.ContainsDiagnostics()); }このメソッドは、次の処理を行います。
-
CoherenceEvaluatorを呼び出して、応答の一貫性を評価します。
EvaluateAsync(IEnumerable<ChatMessage>, ChatResponse, ChatConfiguration, IEnumerable<EvaluationContext>, CancellationToken) メソッドは、EvaluationResultを含むNumericMetricを返します。
NumericMetricには、通常、明確に定義された範囲内にある数値スコアを表す数値が含まれています。 - EvaluationResultからコヒーレンス スコアを取得します。
- 返されるコヒーレンス メトリックの 既定の解釈 を検証します。 エバリュエーターには、返されるメトリックの既定の解釈を含めることができます。 必要に応じて、特定の要件に合わせて既定の解釈を変更することもできます。
- 返されたコヒーレンス メトリックに診断が存在しないことを検証します。 エバリュエーターは、返されるメトリックの診断を含めて、評価中に発生したエラー、警告、またはその他の例外条件を示すことができます。
-
CoherenceEvaluatorを呼び出して、応答の一貫性を評価します。
EvaluateAsync(IEnumerable<ChatMessage>, ChatResponse, ChatConfiguration, IEnumerable<EvaluationContext>, CancellationToken) メソッドは、EvaluationResultを含むNumericMetricを返します。
テスト/評価を実行する
CLI コマンド dotnet test または テスト エクスプローラーを使用して、好みのテスト ワークフローを使用してテストを実行します。
リソースをクリーンアップする
必要がなくなった場合は、Azure OpenAI リソースと GPT-4 モデルのデプロイを削除します。
- Azure ポータルで、Azure OpenAI リソースに移動します。
- Azure OpenAI リソースを選択し、Delete を選択します。
次のステップ
- さまざまな OpenAI モデルからの応答を評価します。
- 評価コードに応答キャッシュとレポートを追加します。 詳細については、「 チュートリアル: 応答キャッシュとレポートを使用してモデルの応答を評価する」を参照してください。
.NET