Membuat asisten AI minimal menggunakan .NET

Dalam panduan cepat ini, Anda akan mempelajari cara membuat asisten AI minimal menggunakan pustaka SDK OpenAI atau Azure OpenAI. Asisten AI menyediakan fungsionalitas agenik untuk membantu pengguna menyelesaikan tugas menggunakan alat dan model AI. Di bagian depan, Anda akan mempelajari hal berikut:

  • Komponen inti dan konsep asisten AI
  • Cara membuat asisten menggunakan Azure OpenAI SDK
  • Cara meningkatkan dan menyesuaikan kemampuan asisten

Prasyarat

Komponen inti asisten AI

Asisten AI berpusat pada alur percakapan dengan pengguna. Pengguna mengirim permintaan ke asisten pada utas percakapan, yang mengarahkan asisten untuk menyelesaikan tugas menggunakan alat yang tersedia. Asisten dapat memproses dan menganalisis data, membuat keputusan, dan berinteraksi dengan pengguna atau sistem lain untuk mencapai tujuan tertentu. Sebagian besar asisten mencakup komponen berikut:

Komponen Deskripsi
Asisten Klien dan logika AI inti yang menggunakan model Azure OpenAI, mengelola utas percakapan, dan menggunakan alat yang dikonfigurasi.
Utas Sesi percakapan antara asisten dan pengguna. Utas menyimpan pesan dan secara otomatis menangani pemangkasan agar konten sesuai dengan konteks model.
Pesan Pesan yang dibuat oleh asisten atau pengguna. Pesan dapat menyertakan teks, gambar, dan file lainnya. Pesan disimpan dalam bentuk daftar pada utas.
jalankan Aktivasi asisten untuk mulai beroperasi berdasarkan isi topik. Asisten menggunakan konfigurasinya dan urutan pesan untuk melakukan tugas dengan memanggil model dan alat. Sebagai bagian dari pelaksanaan, asisten menambahkan pesan ke utas.
Jalankan langkah-langkah Daftar langkah-langkah terperinci yang diambil oleh asisten sebagai bagian dari sebuah sesi. Asisten dapat memanggil alat atau membuat pesan selama prosesnya. Memeriksa langkah-langkah pelaksanaan memungkinkan Anda memahami bagaimana asisten mencapai hasil akhirnya.

Asisten juga dapat dikonfigurasi untuk menggunakan beberapa alat secara paralel untuk menyelesaikan tugas, termasuk yang berikut ini:

  • Alat interpretasi kode: Menulis dan menjalankan kode di lingkungan eksekusi terisolasi.
  • Panggilan fungsi: Menjalankan fungsi lokal kustom yang Anda tentukan dalam kode Anda.
  • Kemampuan pencarian file: Meningkatkan pengetahuan asisten dari luar modelnya.

Dengan memahami komponen inti ini dan bagaimana mereka berinteraksi, Anda dapat membangun dan menyesuaikan asisten AI yang kuat untuk memenuhi kebutuhan spesifik Anda.

Membuat aplikasi .NET

Selesaikan langkah-langkah berikut untuk membuat aplikasi konsol .NET dan tambahkan paket yang diperlukan untuk bekerja dengan asisten:

  1. Di jendela terminal, navigasikan ke direktori kosong di perangkat Anda dan buat aplikasi baru dengan perintah dotnet new:

    dotnet new console -o AIAssistant
    
  2. Tambahkan paket OpenAI ke aplikasi Anda:

    dotnet add package OpenAI
    
  3. Buka aplikasi baru di editor pilihan Anda, seperti Visual Studio Code.

    code .
    
  1. Di jendela terminal, navigasikan ke direktori kosong di perangkat Anda dan buat aplikasi baru dengan perintah dotnet new:

    dotnet new console -o AIAssistant
    
  2. Tambahkan paket Azure.AI.OpenAI ke aplikasi Anda:

    dotnet add package Azure.AI.OpenAI
    
  3. Buka aplikasi baru di editor pilihan Anda, seperti Visual Studio Code.

    code .
    

Membuat klien asisten AI

  1. Program.cs Buka file dan ganti konten file dengan kode berikut untuk membuat klien yang diperlukan:

    using OpenAI;
    using OpenAI.Assistants;
    using OpenAI.Files;
    using Azure.AI.OpenAI;
    using Azure.Identity;
    
    // Create the OpenAI client
    OpenAIClient openAIClient = new("your-apy-key");
    
    // For Azure OpenAI, use the following client instead:
    AzureOpenAIClient azureAIClient = new(
            new Uri("your-azure-openai-endpoint"),
            new DefaultAzureCredential());
    
    #pragma warning disable OPENAI001
    AssistantClient assistantClient = openAIClient.GetAssistantClient();
    OpenAIFileClient fileClient = openAIClient.GetOpenAIFileClient();
    
  2. Buat dokumen sampel dalam memori dan unggah ke OpenAIFileClient:

    // Create an in-memory document to upload to the file client
    using Stream document = BinaryData.FromBytes("""
        {
            "description": "This document contains the sale history data for Contoso products.",
            "sales": [
                {
                    "month": "January",
                    "by_product": {
                        "113043": 15,
                        "113045": 12,
                        "113049": 2
                    }
                },
                {
                    "month": "February",
                    "by_product": {
                        "113045": 22
                    }
                },
                {
                    "month": "March",
                    "by_product": {
                        "113045": 16,
                        "113055": 5
                    }
                }
            ]
        }
        """u8.ToArray()).ToStream();
    
    // Upload the document to the file client
    OpenAIFile salesFile = fileClient.UploadFile(
        document,
        "monthly_sales.json",
        FileUploadPurpose.Assistants);
    
  3. Aktifkan kemampuan alat pencarian file dan penerjemah kode melalui AssistantCreationOptions:

    // Configure the assistant options
    AssistantCreationOptions assistantOptions = new()
    {
        Name = "Example: Contoso sales RAG",
        Instructions =
            "You are an assistant that looks up sales data and helps visualize the information based"
            + " on user queries. When asked to generate a graph, chart, or other visualization, use"
            + " the code interpreter tool to do so.",
        Tools =
        {
            new FileSearchToolDefinition(), // Enable the assistant to search and access files
            new CodeInterpreterToolDefinition(), // Enable the assistant to run code for data analysis
        },
        ToolResources = new()
        {
            FileSearch = new()
            {
                NewVectorStores =
                {
                    new VectorStoreCreationHelper([salesFile.Id]),
                }
            }
        },
    };
    
  4. Buat Assistant dan buat utas untuk mengelola interaksi antara pengguna dan asisten:

    // Create the assistant
    Assistant assistant = assistantClient.CreateAssistant("gpt-4o", assistantOptions);
    
    // Configure and create the conversation thread
    ThreadCreationOptions threadOptions = new()
    {
        InitialMessages = { "How well did product 113045 sell in February? Graph its trend over time." }
    };
    
    ThreadRun threadRun = assistantClient.CreateThreadAndRun(assistant.Id, threadOptions);
    
    // Sent the prompt and monitor progress until the thread run is complete
    do
    {
        Thread.Sleep(TimeSpan.FromSeconds(1));
        threadRun = assistantClient.GetRun(threadRun.ThreadId, threadRun.Id);
    }
    while (!threadRun.Status.IsTerminal);
    
    // Get the messages from the thread run
    var messages = assistantClient.GetMessagesAsync(
        threadRun.ThreadId,
        new MessageCollectionOptions()
        {
            Order = MessageCollectionOrder.Ascending
        });
    
  5. Cetak pesan dan simpan gambar yang dihasilkan dari percakapan dengan asisten:

    // Process the messages from the assistant
    await foreach (ThreadMessage message in messages)
    {
        // Print out the messages from the assistant
        Console.Write($"[{message.Role.ToString().ToUpper()}]: ");
        foreach (MessageContent contentItem in message.Content)
        {
            if (!string.IsNullOrEmpty(contentItem.Text))
            {
                Console.WriteLine($"{contentItem.Text}");
    
                if (contentItem.TextAnnotations.Count > 0)
                {
                    Console.WriteLine();
                }
    
                // Include annotations, if any
                foreach (TextAnnotation annotation in contentItem.TextAnnotations)
                {
                    if (!string.IsNullOrEmpty(annotation.InputFileId))
                    {
                        Console.WriteLine($"* File citation, file ID: {annotation.InputFileId}");
                    }
                    if (!string.IsNullOrEmpty(annotation.OutputFileId))
                    {
                        Console.WriteLine($"* File output, new file ID: {annotation.OutputFileId}");
                    }
                }
            }
            // Save the generated image file
            if (!string.IsNullOrEmpty(contentItem.ImageFileId))
            {
                OpenAIFile imageInfo = fileClient.GetFile(contentItem.ImageFileId);
                BinaryData imageBytes = fileClient.DownloadFile(contentItem.ImageFileId);
                using FileStream stream = File.OpenWrite($"{imageInfo.Filename}.png");
                imageBytes.ToStream().CopyTo(stream);
    
                Console.WriteLine($"<image: {imageInfo.Filename}.png>");
            }
        }
        Console.WriteLine();
    }
    

    Temukan dan buka gambar yang disimpan di direktori aplikasi bin , yang harus menyerupai berikut ini:

    Grafik yang menunjukkan visualisasi yang dihasilkan oleh model AI.

Langkah berikutnya