Szybki start: ocena jakości odpowiedzi

W tym szybkim starcie utworzysz aplikację MSTest do oceny jakości odpowiedzi czatu z modelu OpenAI. Aplikacja testowa używa Microsoft. Extensions.AI.Evaluation biblioteki.

Uwaga / Notatka

Ten szybki start demonstruje najprostsze użycie interfejsu API ewaluacji. Warto zauważyć, że nie demonstruje ona użycia funkcji buforowania odpowiedzi i funkcji raportowania, co jest ważne, jeśli tworzysz testy jednostkowe uruchamiane jako część procesu oceny offline. Scenariusz przedstawiony w tym przewodniku Quickstart jest odpowiedni w przypadkach użycia, takich jak ocena w trybie online odpowiedzi sztucznej inteligencji w kodzie produkcyjnym i zapisywanie wyników w telemetrii, gdzie buforowanie i raportowanie nie są istotne. Aby zapoznać się z samouczkiem, który demonstruje funkcje buforowania i raportowania, zobacz Samouczek: ocena odpowiedzi modelu przy użyciu buforowania odpowiedzi i raportowania

Wymagania wstępne

Konfigurowanie usługi sztucznej inteligencji

Aby aprowizować Azure OpenAI service i model przy użyciu portalu Azure, wykonaj kroki opisane w artykule Utwórz i wdróż zasób Azure OpenAI Service. W kroku "Wdrażanie modelu" wybierz gpt-5 model.

Tworzenie aplikacji testowej

Wykonaj poniższe kroki, aby utworzyć projekt MSTest łączący się z modelem AI.

  1. W oknie terminalu przejdź do katalogu, w którym chcesz utworzyć aplikację, i utwórz nową aplikację MSTest za dotnet new pomocą polecenia :

    dotnet new mstest -o TestAI
    
  2. Przejdź do katalogu TestAI i dodaj niezbędne pakiety do aplikacji:

    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
    
  3. Uruchom następujące polecenia, aby dodać wpisy tajne app dla punktu końcowego Azure OpenAI i identyfikatora dzierżawy:

    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>
    

    W zależności od środowiska, identyfikator dzierżawy może nie być potrzebny. W takim przypadku usuń go z kodu, który inicjuje DefaultAzureCredential.

  4. Otwórz nową aplikację w wybranym edytorze.

Dodawanie kodu aplikacji testowej

  1. Zmień nazwę pliku Test1.cs na MyTests.cs, a następnie otwórz plik i zmień nazwę klasy na MyTests.

  2. Dodaj do klasy prywatne ChatConfiguration i wiadomości czatu oraz elementy członkowskie MyTests odpowiedzi. Pole s_messages to lista zawierająca dwa ChatMessage obiekty — jeden instruuje zachowanie czatbota, a drugi jest pytaniem od użytkownika.

    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();
    
  3. Dodaj metodę InitializeAsync do klasy 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);
    }
    

    Ta metoda wykonuje następujące zadania:

  4. Dodaj metodę GetAzureOpenAIChatConfiguration , która tworzy IChatClient element używany przez ewaluatora do komunikowania się z modelem.

    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);
    }
    
  5. Dodaj metodę testową, aby ocenić odpowiedź modelu.

    [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());
    }
    

    Ta metoda wykonuje następujące czynności:

    • Wywołuje element CoherenceEvaluator , aby ocenić spójność odpowiedzi. Metoda EvaluateAsync(IEnumerable<ChatMessage>, ChatResponse, ChatConfiguration, IEnumerable<EvaluationContext>, CancellationToken) zwraca obiekt EvaluationResult zawierający element NumericMetric. Element NumericMetric zawiera wartość liczbową, która zazwyczaj reprezentuje wyniki liczbowe należące do dobrze zdefiniowanego zakresu.
    • Pobiera wynik spójności z .EvaluationResult
    • Sprawdza poprawność domyślnej interpretacji zwracanej metryki spójności. Ewaluatorzy mogą uwzględniać domyślną interpretację metryk, które zwracają. W razie potrzeby można również zmienić domyślną interpretację, aby odpowiadała konkretnym wymaganiom.
    • Pozwala potwierdzić, że w zwróconej metryce spójności brak diagnostyki. Ewaluatorzy mogą uwzględniać diagnostykę dotyczącą metryk, które zwracają, aby wskazać błędy, ostrzeżenia lub inne wyjątkowe warunki występujące podczas oceny.

Uruchamianie testu/oceny

Uruchom test, korzystając z preferowanego przepływu pracy testu, na przykład za pomocą polecenia wiersza polecenia dotnet test lub za pomocą Eksploratora Testów.

Uprzątnij zasoby

Jeśli nie są już potrzebne, usuń zasób Azure OpenAI i wdrożenie modelu GPT-4.

  1. W portalu Azure przejdź do zasobu Azure OpenAI.
  2. Wybierz zasób Azure OpenAI, a następnie wybierz pozycję Delete.

Dalsze kroki