Quickstart: Antwoordkwaliteit evalueren

In deze quickstart maakt u een MSTest-app om de kwaliteit van een chatantwoord van een OpenAI-model te evalueren. De test-app maakt gebruik van de Microsoft. Extensions.AI.Evaluation bibliotheken.

Opmerking

In deze quickstart ziet u het eenvoudigste gebruik van de evaluatie-API. Met name wordt het gebruik van de functionaliteit voor het opslaan van antwoorden in cache en rapportage niet gedemonstreerde, wat belangrijk is als u eenheidstests maakt die worden uitgevoerd als onderdeel van een 'offline'-evaluatiepijplijn. Het scenario dat in deze quickstart wordt weergegeven, is geschikt voor gebruikssituaties zoals "online" evaluatie van AI-antwoorden binnen productiecode en het loggen van scores naar telemetrie, waarbij caching en rapportage niet relevant zijn. Voor een zelfstudie die de cache- en rapportagefunctionaliteit demonstreert, raadpleegt u Zelfstudie: Het antwoord van een model evalueren met reactiecaching en rapportage

Vereiste voorwaarden

De AI-service configureren

Als u een Azure OpenAI service en model wilt inrichten met behulp van de Azure-portal, voert u de stappen in het artikel Maken en implementeren van een Azure OpenAI Service-resource uit. Selecteer in de stap Een model implementeren het gpt-5 model.

De test-app maken

Voer de volgende stappen uit om een MSTest-project te maken dat verbinding maakt met een AI-model.

  1. Navigeer in een terminalvenster naar de map waar u uw app wilt maken en maak een nieuwe MSTest-app met de dotnet new opdracht:

    dotnet new mstest -o TestAI
    
  2. Ga naar de map TestAI en voeg de benodigde pakketten toe aan uw app:

    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. Voer de volgende opdrachten uit om app secrets toe te voegen voor uw Azure OpenAI-eindpunt en tenant-id:

    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>
    

    (Afhankelijk van uw omgeving hebt u mogelijk niet de tenant-id nodig. Verwijder deze in dat geval uit de code waarmee de DefaultAzureCredential.) wordt geïnstitueert.

  4. Open de nieuwe app in uw editor naar keuze.

De code van de test-app toevoegen

  1. Wijzig de naam van het Test1.cs-bestand in MyTests.cs en open het bestand en wijzig de naam van de klasse in MyTests.

  2. Voeg het privé ChatConfiguration - en chatbericht en antwoordleden toe aan de MyTests klas. Het s_messages veld is een lijst die twee ChatMessage objecten bevat: de ene geeft het gedrag van de chatbot aan en de andere is de vraag van de gebruiker.

    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. Voeg de InitializeAsync methode toe aan de MyTests klasse.

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

    Met deze methode worden de volgende taken uitgevoerd:

  4. Voeg de GetAzureOpenAIChatConfiguration methode toe, waarmee de IChatClient wordt aangemaakt die de evaluator gebruikt om met het model te communiceren.

    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. Voeg een testmethode toe om het antwoord van het model te evalueren.

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

    Deze methode doet het volgende:

    • Roept de aan CoherenceEvaluator om de samenhang van het antwoord te evalueren. De methode EvaluateAsync(IEnumerable<ChatMessage>, ChatResponse, ChatConfiguration, IEnumerable<EvaluationContext>, CancellationToken) returneert een EvaluationResult die een NumericMetric bevat. A NumericMetric bevat een numerieke waarde die doorgaans numerieke scores vertegenwoordigt die binnen een goed gedefinieerd bereik vallen.
    • Haalt de coherentiescore van de EvaluationResult.
    • Valideert de standaardinterpretatie voor de geretourneerde coherentiemetrie. Evaluators kunnen een standaardinterpretatie bevatten voor de metrische gegevens die ze retourneren. U kunt desgewenst ook de standaardinterpretatie aanpassen aan uw specifieke vereisten.
    • Valideert dat er geen diagnostische gegevens aanwezig zijn op de geretourneerde coherentiemetrie. Evaluators kunnen diagnostiek opnemen over de metriek die ze retourneren om fouten, waarschuwingen of andere uitzonderlijke condities aan te duiden die zich tijdens de evaluatie voordoen.

De test/evaluatie uitvoeren

Voer de test uit met behulp van uw favoriete testwerkstroom, bijvoorbeeld met behulp van de CLI-opdracht dotnet test of via Test Explorer.

De hulpbronnen opschonen

Als u deze niet meer nodig hebt, verwijdert u de Azure OpenAI-resource en GPT-4-modelimplementatie.

  1. Navigeer in de Azure-portal naar de Azure OpenAI-resource.
  2. Selecteer de Azure OpenAI-resource en selecteer vervolgens Delete.

Volgende stappen