Snabbstart: Utvärdera svarskvalitet

I den här snabbstarten skapar du en MSTest-app för att utvärdera kvaliteten på ett chattsvar från en OpenAI-modell. Testappen använder Microsoft. Extensions.AI.Evaluation bibliotek.

Anmärkning

Den här snabbstarten visar den enklaste användningen av utvärderings-API:et. I synnerhet visar det inte användningen av funktionen för cachelagring och rapportering av svar, vilket är viktigt om du redigerar enhetstester som körs som en del av en "offline"-utvärderingspipeline. Scenariot som visas i den här snabbstarten är lämpligt i användningsfall som "online"-utvärdering av AI-svar i produktionskod och loggningspoäng till telemetri, där cachelagring och rapportering inte är relevanta. En självstudiekurs som visar funktionerna för cachelagring och rapportering finns i Självstudie: Utvärdera en modells svar med cachelagring och rapportering av svar

Förutsättningar

Konfigurera AI-tjänsten

Om du vill etablera en Azure OpenAI service och modell med hjälp av Azure portalen slutför du stegen i artikeln Skapa och distribuera en Azure OpenAI Service resurs. I steget "Distribuera en modell" väljer du gpt-5 modellen.

Skapa testappen

Slutför följande steg för att skapa ett MSTest-projekt som ansluter till en AI-modell.

  1. I ett terminalfönster navigerar du till katalogen där du vill skapa din app och skapar en ny MSTest-app med dotnet new kommandot :

    dotnet new mstest -o TestAI
    
  2. Gå till katalogen TestAI och lägg till nödvändiga paket i din 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. Kör följande kommandon för att lägga till apphemligheter för din Azure OpenAI-slutpunkt och klient-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>
    

    (Beroende på din miljö kanske du inte behöver klientorganisations-ID:t. I så fall tar du bort den från koden som instansierar DefaultAzureCredential.)

  4. Öppna den nya appen i valfri redigerare.

Lägg till testappkoden

  1. Byt namn på filen Test1.cs till MyTests.cs och öppna sedan filen och byt namn på klassen till MyTests.

  2. Lägg till de privata ChatConfiguration- och chattmeddelandena samt svarens medlemmar i MyTests-klassen. Fältet s_messages är en lista som innehåller två ChatMessage objekt – den ena instruerar chattrobotens beteende och den andra är frågan från användaren.

    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. InitializeAsync Lägg till metoden i MyTests klassen.

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

    Den här metoden utför följande uppgifter:

  4. Lägg till metoden GetAzureOpenAIChatConfiguration , som skapar den IChatClient som utvärderaren använder för att kommunicera med modellen.

    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. Lägg till en testmetod för att utvärdera modellens svar.

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

    Den här metoden gör följande:

    • Anropar CoherenceEvaluator för att bedöma sammanhanget i svaret. Metoden EvaluateAsync(IEnumerable<ChatMessage>, ChatResponse, ChatConfiguration, IEnumerable<EvaluationContext>, CancellationToken) returnerar en EvaluationResult som innehåller en NumericMetric. En NumericMetric innehåller ett numeriskt värde som vanligtvis representerar numeriska poäng som ligger inom ett väldefinierat intervall.
    • Hämtar koherenspoängen från EvaluationResult.
    • Validerar standardtolkningen för det returnerade konsekvensmåttet. Utvärderare kan inkludera en standardtolkning för de mått de returnerar. Du kan också ändra standardtolkningen så att den passar dina specifika krav om det behövs.
    • Verifierar att det inte finns någon diagnostik för det returnerade konsekvensmåttet. Utvärderare kan inkludera diagnostik för de mått som returneras för att indikera fel, varningar eller andra exceptionella villkor som påträffades under utvärderingen.

Kör testet/utvärderingen

Kör testet med ditt önskade testarbetsflöde, till exempel med hjälp av CLI-kommandot dotnet test eller via Test Explorer.

Rensa resurser

Om du inte längre behöver dem tar du bort Azure OpenAI-resursen och GPT-4-modelldistributionen.

  1. I Azure-portalen går du till Azure OpenAI-resursen.
  2. Välj Azure OpenAI-resursen och välj sedan Delete.

Nästa steg