Vyžádání odpovědi se strukturovaným výstupem

V tomto rychlém startu vytvoříte chatovací aplikaci, která požádá o odpověď se strukturovaným výstupem. Odpověď strukturovaného výstupu je odpověď chatu, která je typu, který zadáte místo prostého textu. Chatovací aplikace, kterou vytvoříte v tomto rychlém přehledu, analyzuje sentiment různých recenzí produktů a kategorizuje každou recenzi podle hodnot vlastního výčtu.

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í chatovací aplikace

Provedením následujících kroků vytvořte konzolovou aplikaci, která se připojí k gpt-5 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 konzolovou dotnet new aplikaci:

    dotnet new console -o SOChat
    
  2. Přejděte do adresáře SOChat 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
    dotnet add package Microsoft.Extensions.AI.OpenAI
    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>
    

    Poznámka:

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

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

Přidání kódu

  1. Definujte výčet, který popisuje různé mínění.

    public enum Sentiment
    {
        Positive,
        Negative,
        Neutral
    }
    
  2. Vytvořte IChatClient, který bude komunikovat s modelem.

    IConfigurationRoot config = new ConfigurationBuilder()
        .AddUserSecrets<Program>()
        .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 chatClient = azureClient
        .GetChatClient(deploymentName: model)
        .AsIChatClient();
    

    Poznámka:

    DefaultAzureCredential vyhledá přihlašovací údaje ve vašem prostředí nebo v místních nástrojích. Bude třeba přiřadit roli Azure AI Developer účtu, který jste použili k přihlášení k sadě Visual Studio nebo Azure CLI. Další informace naleznete v tématu Ověřování v nástrojích Foundry pomocí .NET.

  3. Odešlete do modelu požadavek s recenzí produktu a poté vytiskněte analyzovaný sentiment do konzoly. Požadovaný typ strukturovaného výstupu deklarujete tak, že ho předáte jako argument typu metodě ChatClientStructuredOutputExtensions.GetResponseAsync<T>(IChatClient, String, ChatOptions, Nullable<Boolean>, CancellationToken) rozšíření.

    string review = "I'm happy with the product!";
    var response = await chatClient.GetResponseAsync<Sentiment>($"What's the sentiment of this review? {review}");
    Console.WriteLine($"Sentiment: {response.Result}");
    

    Tento kód vytvoří výstup podobný následujícímu:

    Sentiment: Positive
    
  4. Místo pouhé analýzy jedné recenze můžete analyzovat kolekci recenzí.

    string[] inputs = [
        "Best purchase ever!",
        "Returned it immediately.",
        "Hello",
        "It works as advertised.",
        "The packaging was damaged but otherwise okay."
    ];
    
    foreach (var i in inputs)
    {
        var response2 = await chatClient.GetResponseAsync<Sentiment>($"What's the sentiment of this review? {i}");
        Console.WriteLine($"Review: {i} | Sentiment: {response2.Result}");
    }
    

    Tento kód vytvoří výstup podobný následujícímu:

    Review: Best purchase ever! | Sentiment: Positive
    Review: Returned it immediately. | Sentiment: Negative
    Review: Hello | Sentiment: Neutral
    Review: It works as advertised. | Sentiment: Neutral
    Review: The packaging was damaged but otherwise okay. | Sentiment: Neutral
    
  5. Místo vyžádání pouze analyzované hodnoty výčtu můžete požádat textovou odpověď spolu s analyzovanou hodnotou.

    Definujte typ záznamu , který bude obsahovat textovou odpověď a analyzované mínění:

    record SentimentRecord(string ResponseText, Sentiment ReviewSentiment);
    

    (Tento typ záznamu je definován pomocí syntaxe primárního konstruktoru . Primární konstruktory kombinují definici typu s parametry nezbytnými k vytvoření instance jakékoli instance třídy. Kompilátor jazyka C# generuje veřejné vlastnosti pro parametry primárního konstruktoru.)

    Odešlete požadavek pomocí typu záznamu jako argumentu typu do GetResponseAsync<T>:

    var review3 = "This product worked okay.";
    var response3 = await chatClient.GetResponseAsync<SentimentRecord>($"What's the sentiment of this review? {review3}");
    
    Console.WriteLine($"Response text: {response3.Result.ResponseText}");
    Console.WriteLine($"Sentiment: {response3.Result.ReviewSentiment}");
    

    Tento kód vytvoří výstup podobný následujícímu:

    Response text: Certainly, I have analyzed the sentiment of the review you provided.
    Sentiment: Neutral
    

Vyčistěte zdroje

Pokud je už nepotřebujete, odstraňte nasazení modelu a prostředku Azure OpenAI.

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

Viz také