Udostępnij przez


Żądanie odpowiedzi ze ustrukturyzowanymi danymi wyjściowymi

W tej instrukcji szybkiego startu utworzysz aplikację do czatu, która żąda odpowiedzi w formie ustrukturyzowanej odpowiedzi. Ustrukturyzowana odpowiedź wyjściowa to odpowiedź czatu, która jest typu, jaki określisz, zamiast zwykłego tekstu. Aplikacja do czatu utworzona w tym przewodniku szybkiego startu analizuje tonację różnych recenzji produktów, kategoryzując każdą recenzję zgodnie z wartościami niestandardowego wyliczenia.

Wymagania wstępne

Konfigurowanie usługi sztucznej inteligencji

Aby aprowizować usługę Azure OpenAI i model przy użyciu witryny Azure Portal, wykonaj kroki opisane w artykule Tworzenie i wdrażanie zasobu usługi Azure OpenAI Service. W kroku "Wdrażanie modelu" wybierz gpt-4o model.

Tworzenie aplikacji do czatu

Wykonaj poniższe kroki, aby utworzyć aplikację konsolową, która łączy się z modelem gpt-4o AI.

  1. W oknie terminalu przejdź do katalogu, w którym chcesz utworzyć aplikację, i utwórz nową aplikację konsolową za dotnet new pomocą polecenia :

    dotnet new console -o SOChat
    
  2. Przejdź do katalogu SOChat i dodaj niezbędne pakiety do aplikacji:

    dotnet add package Azure.AI.OpenAI
    dotnet add package Azure.Identity
    dotnet add package Microsoft.Extensions.AI
    dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease
    dotnet add package Microsoft.Extensions.Configuration
    dotnet add package Microsoft.Extensions.Configuration.UserSecrets
    
  3. Uruchom następujące polecenia, aby dodać sekrety aplikacji dla punktu końcowego usługi Azure OpenAI, nazwy modelu i identyfikatora dzierżawy:

    dotnet user-secrets init
    dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-Azure-OpenAI-endpoint>
    dotnet user-secrets set AZURE_OPENAI_GPT_NAME gpt-4o
    dotnet user-secrets set AZURE_TENANT_ID <your-tenant-ID>
    

    Uwaga / Notatka

    W zależności od środowiska identyfikator dzierżawy może nie być potrzebny. W takim przypadku usuń go z kodu, który tworzy wystąpienie obiektu DefaultAzureCredential.

  4. Otwórz nową aplikację w wybranym edytorze.

Dodawanie kodu

  1. Zdefiniuj wyliczenie opisujące odmienne uczucia.

    public enum Sentiment
    {
        Positive,
        Negative,
        Neutral
    }
    
  2. Utwórz element IChatClient , który będzie komunikować się z modelem.

    IConfigurationRoot config = new ConfigurationBuilder()
        .AddUserSecrets<Program>()
        .Build();
    
    string endpoint = config["AZURE_OPENAI_ENDPOINT"];
    string model = config["AZURE_OPENAI_GPT_NAME"];
    string tenantId = config["AZURE_TENANT_ID"];
    
    // 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();
    

    Uwaga / Notatka

    DefaultAzureCredential wyszukuje poświadczenia uwierzytelniania w twoim środowisku lub lokalnych narzędziach. Musisz przypisać Azure AI Developer rolę do konta użytego do zalogowania się do programu Visual Studio lub interfejsu wiersza polecenia platformy Azure. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie usług Azure AI za pomocą .NET.

  3. Wyślij żądanie do modelu przy użyciu pojedynczej recenzji produktu, a następnie wyświetl przeanalizowane emocje w konsoli. Żądany typ danych wyjściowych ze strukturą można zadeklarować, przekazując go jako argument typu do ChatClientStructuredOutputExtensions.GetResponseAsync<T>(IChatClient, String, ChatOptions, Nullable<Boolean>, CancellationToken) metody rozszerzenia.

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

    Ten kod generuje dane wyjściowe podobne do następujących:

    Sentiment: Positive
    
  4. Zamiast analizować pojedynczy przegląd, możesz przeanalizować kolekcję przeglądów.

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

    Ten kod generuje dane wyjściowe podobne do następujących:

    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. Zamiast prosić tylko o przeanalizowaną wartość wyliczenia, możesz poprosić o odpowiedź tekstową wraz z przeanalizowaną wartością.

    Zdefiniuj typ rekordu , aby zawierał odpowiedź tekstową i przeanalizowaną tonację:

    record SentimentRecord(string ResponseText, Sentiment ReviewSentiment);
    

    (Ten typ rekordu jest definiowany przy użyciu podstawowej składni konstruktora . Konstruktory podstawowe łączą definicję typu z parametrami niezbędnymi do utworzenia wystąpienia dowolnego wystąpienia klasy. Kompilator języka C# generuje właściwości publiczne dla podstawowych parametrów konstruktora).

    Wyślij żądanie przy użyciu typu rekordu 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}");
    

    Ten kod generuje dane wyjściowe podobne do następujących:

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

Uprzątnij zasoby

Jeśli już ich nie potrzebujesz, usuń zasób usługi Azure OpenAI oraz wdrożenie modelu GPT-4.

  1. W witrynie Azure Portalprzejdź do zasobu Azure OpenAI.
  2. Wybierz zasób Azure OpenAI, a następnie wybierz pozycję Usuń.

Zobacz także