Inicio rápido: Evaluación de la calidad de la respuesta

En este inicio rápido, creará una aplicación MSTest para evaluar la calidad de una respuesta de chat desde un modelo de OpenAI. La aplicación de prueba usa las bibliotecas Microsoft.Extensions.AI.Evaluation.

Nota:

En este inicio rápido se muestra el uso más sencillo de la API de evaluación. Notablemente, no muestra el uso de la funcionalidad de almacenamiento en caché de respuestas e informes, las cuales son importantes si estás creando pruebas unitarias que se ejecutan como parte de una canalización de evaluación en modo "sin conexión". El escenario que se muestra en esta guía rápida es adecuado en casos de uso, como la evaluación en-línea de las respuestas de IA dentro del código de producción y el registro de puntuaciones en telemetría, donde el almacenamiento en caché y los informes no son relevantes. Para ver un tutorial que muestre la funcionalidad de almacenamiento en caché e informes, consulte Tutorial: Evaluación de la respuesta de un modelo con almacenamiento en caché de respuestas e informes.

Prerrequisitos

Configuración del servicio de IA

Para aprovisionar un Azure OpenAI service y un modelo mediante el portal de Azure, complete los pasos descritos en el artículo Crear e implementar un recurso de Azure OpenAI Service. En el paso "Implementar un modelo", seleccione el modelo gpt-5.

Creación de la aplicación de prueba

Complete los pasos siguientes para crear un proyecto de MSTest que se conecte a un modelo de IA.

  1. En una ventana de terminal, vaya al directorio donde desea crear la aplicación y cree una aplicación MSTest con el dotnet new comando :

    dotnet new mstest -o TestAI
    
  2. Vaya al directorio TestAI y agregue los paquetes necesarios a la aplicación:

    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. Ejecute los siguientes comandos para añadir secretos de aplicación para el punto de conexión de Azure OpenAI y el identificador de inquilino:

    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>
    

    (Según el entorno, es posible que no necesite el identificador de arrendatario. En ese caso, elimínelo del código que instancia el DefaultAzureCredential.)

  4. Abra la nueva aplicación en el editor que prefiera.

Adición del código de la aplicación de prueba

  1. Cambie el nombre del archivo Test1.cs a MyTests.cs y, a continuación, abra el archivo y cambie el nombre de la clase a MyTests.

  2. Agregue el ChatConfiguration privado y los miembros de mensaje de chat y respuesta a la clase MyTests. El s_messages campo es una lista que contiene dos ChatMessage objetos: uno indica el comportamiento del bot de chat y el otro es la pregunta del usuario.

    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. Agregue el InitializeAsync método a la MyTests clase .

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

    Este método realiza las siguientes tareas:

  4. Agregue el GetAzureOpenAIChatConfiguration método , que crea el IChatClient que usa el evaluador para comunicarse con el modelo.

    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. Agregue un método de prueba para evaluar la respuesta del modelo.

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

    Este método hace lo siguiente:

    • Invoca el CoherenceEvaluator para evaluar la coherencia de la respuesta. El EvaluateAsync(IEnumerable<ChatMessage>, ChatResponse, ChatConfiguration, IEnumerable<EvaluationContext>, CancellationToken) método devuelve un EvaluationResult que contiene un NumericMetric. Un NumericMetric contiene un valor numérico que generalmente refleja puntuaciones numéricas que se encuentran dentro de un intervalo bien definido.
    • Recupera la puntuación de coherencia de EvaluationResult.
    • Valida la interpretación predeterminada de la métrica de coherencia devuelta. Los evaluadores pueden incluir una interpretación predeterminada de las métricas que devuelven. También puede cambiar la interpretación predeterminada para adaptarse a sus requisitos específicos, si es necesario.
    • Valida que ningún diagnóstico está presente en la métrica de coherencia devuelta. Los evaluadores pueden incluir diagnósticos en las métricas que devuelven para indicar errores, advertencias u otras condiciones excepcionales encontradas durante la evaluación.

Ejecución de la prueba o evaluación

Ejecute la prueba mediante el flujo de trabajo de prueba preferido, por ejemplo, mediante el comando dotnet test de la CLI o mediante el Explorador de pruebas.

Limpieza de recursos

Si ya no los necesita, elimine el recurso de OpenAI Azure y la implementación del modelo GPT-4.

  1. En el portal Azure, vaya al recurso Azure OpenAI.
  2. Seleccione el recurso Azure OpenAI y, a continuación, seleccione Delete.

Pasos siguientes