Sdílet prostřednictvím


Rychlý start: Vyhodnocení kvality odpovědi

V tomto rychlém startu vytvoříte aplikaci MSTest, která vyhodnotí kvalitu odpovědi na chat z modelu OpenAI. Testovací aplikace používá knihovny Microsoft.Extensions.AI.Evaluation .

Poznámka:

Tento rychlý start ukazuje nejjednodušší použití rozhraní API pro vyhodnocení. Zejména to neukazuje použití funkcionality ukládání odpovědí do mezipaměti a generování sestav, což je důležité, pokud vytváříte jednotkové testy, které běží jako součást "offline" hodnoticího kanálu. Scénář uvedený v tomto rychlém startu je vhodný v případech použití, jako je například online vyhodnocení odpovědí AI v rámci produkčního kódu a protokolování skóre do telemetrie, kdy nepotřebujete ukládání do mezipaměti ani generování sestav. Kurz, který ukazuje funkci ukládání do mezipaměti a generování sestav, najdete v kurzu: Vyhodnocení odpovědi modelu pomocí ukládání odpovědí do mezipaměti a generování sestav.

Požadavky

Konfigurace služby AI

Pokud chcete zřídit službu a model Azure OpenAI pomocí webu Azure Portal, proveďte kroky v článku Vytvoření a nasazení prostředku služby Azure OpenAI. V kroku Nasazení modelu vyberte gpt-5 model.

Vytvoření testovací aplikace

Provedením následujících kroků vytvořte projekt MSTest, který se připojuje k modelu AI.

  1. V okně terminálu přejděte do adresáře, do kterého chcete aplikaci vytvořit, a pomocí příkazu vytvořte novou aplikaci dotnet new MSTest:

    dotnet new mstest -o TestAI
    
  2. Přejděte do adresáře TestAI a přidejte do aplikace potřebné balíčky:

    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 --prerelease
    dotnet add package Microsoft.Extensions.Configuration
    dotnet add package Microsoft.Extensions.Configuration.UserSecrets
    
  3. Spuštěním následujících příkazů přidejte tajné kódy aplikací pro koncový bod Azure OpenAI a ID tenanta:

    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>
    

    (V závislosti na vašem prostředí nemusí být ID tenanta potřeba. V takovém případě ho odeberte z kódu, který vytvoří instanci objektu DefaultAzureCredential.)

  4. Otevřete novou aplikaci v libovolném editoru.

Přidání kódu testovací aplikace

  1. Přejmenujte soubor Test1.cs na MyTests.cs a pak soubor otevřete a přejmenujte třídu na MyTests.

  2. Přidejte do třídy soukromou ChatConfiguration a chatovou zprávu a členy MyTests odpovědí. Pole s_messages je seznam, který obsahuje dva ChatMessage objekty – jeden dává pokyn chování chatovacího robota a druhý je otázka od uživatele.

    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. Přidejte metodu InitializeAsyncMyTests do třídy.

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

    Tato metoda provádí následující úlohy:

  4. Přidejte metodu GetAzureOpenAIChatConfiguration, která vytvoří IChatClient, jež evaluátor používá ke komunikaci s 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. Přidejte testovací metodu pro vyhodnocení odpovědi 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());
    }
    

    Tato metoda provede následující:

    • Vyvolá CoherenceEvaluator k vyhodnocení soudržnosti odpovědi. Metoda EvaluateAsync(IEnumerable<ChatMessage>, ChatResponse, ChatConfiguration, IEnumerable<EvaluationContext>, CancellationToken) vrátí EvaluationResult hodnotu, která obsahuje NumericMetric. A NumericMetric obsahuje číselnou hodnotu, která se obvykle používá k reprezentaci číselných skóre, která spadají do dobře definované oblasti.
    • Načte skóre soudržnosti z EvaluationResult
    • Ověří výchozí interpretaci vrácené metriky soudržnosti. Vyhodnocovače můžou obsahovat výchozí interpretaci metrik, které vrací. V případě potřeby můžete také změnit výchozí interpretaci tak, aby vyhovovala vašim konkrétním požadavkům.
    • Ověřuje, že žádná diagnostická data nejsou přítomna na vrácené metrikě soudržnosti. Vyhodnocovače mohou zahrnovat diagnostiku metrik, které se vrátí, aby indikovala chyby, upozornění nebo jiné výjimečné podmínky vyskytující se během hodnocení.

Spuštění testu/vyhodnocení

Spusťte test pomocí preferovaného testovacího pracovního postupu, například pomocí příkazu dotnet test rozhraní příkazového řádku nebo průzkumníka testů.

Vyčistěte zdroje

Pokud už je nepotřebujete, odstraňte prostředek Azure OpenAI a odeberte nasazený model GPT-4.

  1. Na webu Azure Portal přejděte k prostředku Azure OpenAI.
  2. Vyberte prostředek Azure OpenAI a pak vyberte Odstranit.

Další kroky