Bagikan melalui


Meminta respons dengan output terstruktur

Dalam panduan memulai cepat ini, Anda membuat aplikasi obrolan yang meminta respons dengan output terstruktur. Respons output terstruktur adalah respons obrolan yang merupakan jenis yang Anda tentukan alih-alih hanya teks biasa. Aplikasi obrolan yang Anda buat di tutorial cepat ini menganalisis sentimen berbagai ulasan produk, menyusun setiap ulasan sesuai dengan nilai daftar kustom.

Prasyarat

Mengonfigurasi layanan AI

Untuk memprovisikan layanan dan model Azure OpenAI menggunakan portal Azure, selesaikan langkah-langkah dalam artikel Membuat dan menyebarkan sumber daya Azure OpenAI Service. Dalam langkah "Sebarkan model", pilih model gpt-4o.

Membuat aplikasi obrolan

Selesaikan langkah-langkah berikut untuk membuat aplikasi konsol yang tersambung ke gpt-4o model AI.

  1. Di jendela terminal, navigasikan ke direktori tempat Anda ingin membuat aplikasi, dan buat aplikasi konsol baru dengan dotnet new perintah :

    dotnet new console -o SOChat
    
  2. Navigasi ke direktori SOChat, dan tambahkan paket yang diperlukan ke aplikasi Anda:

    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. Jalankan perintah berikut untuk menambahkan rahasia aplikasi untuk titik akhir Azure OpenAI, nama model, dan ID penyewa Anda:

    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>
    

    Nota

    Bergantung pada lingkungan Anda, ID penyewa mungkin tidak diperlukan. Dalam hal ini, hapusnya dari kode yang menginisiasi DefaultAzureCredential.

  4. Buka aplikasi baru di editor pilihan Anda.

Menambahkan kode

  1. Tentukan enumerasi yang menjelaskan berbagai sentimen.

    public enum Sentiment
    {
        Positive,
        Negative,
        Neutral
    }
    
  2. Buat IChatClient yang akan berkomunikasi dengan model.

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

    Nota

    DefaultAzureCredential mencari kredensial autentikasi dari lingkungan atau alat lokal Anda. Anda harus menetapkan peran Azure AI Developer kepada akun yang Anda gunakan untuk masuk ke Visual Studio atau Azure CLI. Untuk informasi selengkapnya, lihat Mengautentikasi ke Foundry Tools dengan .NET.

  3. Kirim permintaan ke model dengan satu ulasan produk, lalu cetak sentimen yang dianalisis ke konsol. Anda menyatakan jenis output terstruktur yang diminta dengan meneruskannya sebagai argumen jenis ke ChatClientStructuredOutputExtensions.GetResponseAsync<T>(IChatClient, String, ChatOptions, Nullable<Boolean>, CancellationToken) metode ekstensi.

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

    Kode ini menghasilkan output yang mirip dengan:

    Sentiment: Positive
    
  4. Alih-alih hanya menganalisis satu ulasan, Anda dapat menganalisis kumpulan ulasan.

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

    Kode ini menghasilkan output yang mirip dengan:

    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. Dan alih-alih hanya meminta nilai enumerasi yang dianalisis, Anda dapat meminta respons teks bersama dengan nilai yang dianalisis.

    Tentukan jenis catatan untuk berisi respons teks dan sentimen yang dianalisis:

    record SentimentRecord(string ResponseText, Sentiment ReviewSentiment);
    

    (Jenis rekaman ini didefinisikan menggunakan sintaks konstruktor utama . Konstruktor utama menggabungkan definisi jenis dengan parameter yang diperlukan untuk membuat instans kelas apa pun. Pengkompilasi C# menghasilkan properti publik untuk parameter konstruktor utama.)

    Kirim permintaan menggunakan jenis catatan sebagai argumen jenis ke 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}");
    

    Kode ini menghasilkan output yang mirip dengan:

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

Membersihkan sumber daya

Jika Anda tidak lagi membutuhkannya, hapus sumber daya Azure OpenAI dan penyebaran model GPT-4.

  1. Di portal Microsoft Azure, navigasikan ke sumber daya Azure OpenAI.
  2. Pilih sumber daya Azure OpenAI, lalu pilih Hapus.

Lihat juga