Bagikan melalui


Teknik Prompt di .NET

Dalam artikel ini, Anda mengeksplorasi konsep rekayasa prompt penting. Banyak model AI berbasis perintah, yang berarti mereka merespons teks input pengguna ( perintah) dengan respons yang dihasilkan oleh algoritma prediktif ( penyelesaian). Model yang lebih baru juga sering mendukung penyelesaian dalam bentuk obrolan, dengan pesan berdasarkan peran (sistem, pengguna, asisten) dan riwayat obrolan untuk mempertahankan percakapan.

Bekerja dengan petunjuk

Pertimbangkan contoh pembuatan teks ini di mana perintah adalah input dan penyelesaian pengguna adalah output model:

Prompt: "Presiden yang menjabat jangka pendek adalah "

Penyelesaian: "Pedro Lascurain."

Penyelesaiannya tampak benar, tetapi bagaimana jika aplikasi Anda seharusnya membantu siswa sejarah AS? Jangka waktu 45 menit Pedro Lascurain adalah jangka waktu terpendek bagi presiden mana pun, tetapi ia menjabat sebagai presiden Meksiko. Siswa sejarah AS mungkin mencari "William Henry Harrison". Jelas, aplikasi ini bisa lebih membantu pengguna yang dimaksudkan jika Anda memberinya beberapa konteks.

Rekayasa prompt menambahkan konteks ke perintah dengan memberikan instruksi, contoh, dan petunjuk untuk membantu model menghasilkan hasil yang lebih baik.

Model yang mendukung pembuatan teks sering kali tidak memerlukan format tertentu, tetapi Anda harus mengatur perintah Anda sehingga jelas apa itu instruksi dan apa contohnya. Model yang mendukung aplikasi berbasis obrolan menggunakan tiga peran untuk mengatur penyelesaian: peran sistem yang mengontrol obrolan, peran pengguna untuk mewakili input pengguna, dan peran asisten untuk merespons pengguna. Bagi permintaan Anda menjadi pesan untuk setiap peran:

  • Pesan sistem memberikan instruksi model tentang asisten. Perintah hanya dapat memiliki satu pesan sistem, dan itu harus menjadi pesan pertama.
  • Pesan pengguna menyertakan perintah dari pengguna dan menampilkan contoh, perintah historis, atau berisi instruksi untuk asisten. Contoh penyelesaian obrolan harus memiliki setidaknya satu pesan pengguna.
  • Pesan asisten memperlihatkan contoh atau penyelesaian terdahulu, dan harus berisi respons terhadap pesan pengguna sebelumnya. Pesan asisten tidak diperlukan, tetapi jika Anda menyertakannya, pesan harus dipasangkan dengan pesan pengguna untuk membentuk contoh.

Gunakan instruksi untuk meningkatkan penyelesaian

Instruksi adalah teks yang memberi tahu model cara merespons. Instruksi dapat berupa direktif atau imperatif:

  • Arahan memberi tahu model cara berperilaku, tetapi bukan perintah sederhana—pikirkan penyiapan karakter untuk aktor improvisasi: "Anda membantu siswa belajar tentang sejarah Amerika Serikat, jadi bicarakan tentang Amerika Serikat kecuali mereka secara khusus meminta tentang negara lain."
  • Imperatif adalah perintah yang tidak ambigu untuk diikuti model. "Terjemahkan ke Tagalog:"

Arahan lebih terbuka dan fleksibel daripada imperatif:

  • Anda dapat menggabungkan beberapa arahan dalam satu instruksi.
  • Instruksi biasanya berfungsi lebih baik ketika Anda menggunakannya dengan contoh. Namun, karena imperatif adalah perintah yang tidak ambigu, model tidak memerlukan contoh untuk memahaminya (meskipun Anda mungkin menggunakan contoh untuk menunjukkan model cara memformat respons). Karena arahan tidak memberi tahu model apa yang harus dilakukan, setiap contoh dapat membantu model bekerja dengan lebih baik.
  • Biasanya lebih baik untuk memecah instruksi yang sulit menjadi serangkaian langkah, yang dapat Anda lakukan dengan urutan arahan. Anda juga harus memberi tahu model untuk menghasilkan hasil dari setiap langkah, sehingga Anda dapat dengan mudah melakukan penyesuaian terperinci. Meskipun Anda dapat memecah instruksi menjadi langkah-langkah sendiri, lebih mudah untuk hanya memberi tahu model untuk melakukannya, dan untuk menghasilkan hasil dari setiap langkah. Pendekatan ini disebut rantai pemikiran pemicu.

Konten primer dan pendukung menambahkan konteks

Anda dapat menyediakan konten untuk menambahkan lebih banyak konteks ke instruksi.

Konten utama adalah teks yang Anda inginkan agar model diproses dengan instruksi. Apa pun tindakan yang diminta oleh perintah, model akan melakukannya pada konten utama untuk menghasilkan hasil akhir.

Konten pendukung adalah teks yang Anda rujuk dalam instruksi, tetapi yang bukan target instruksi. Model ini menggunakan konten pendukung untuk menyelesaikan instruksi, yang berarti bahwa konten pendukung juga muncul dalam penyelesaian, biasanya sebagai semacam struktur (seperti dalam judul atau label kolom).

Gunakan label dengan konten instruksi Anda untuk membantu model mengetahui cara menggunakannya dengan instruksi tersebut. Jangan terlalu khawatir tentang presisi—label tidak perlu mencocokkan instruksi dengan tepat karena model akan menangani hal-hal seperti bentuk kata dan kapitalisasi.

Misalkan Anda menggunakan instruksi "Ringkas pencapaian Presiden AS" untuk menghasilkan daftar. Model mungkin mengatur dan menyusunnya dalam berbagai cara. Tetapi bagaimana jika Anda ingin daftar mengelompokkan pencapaian dengan serangkaian kategori tertentu? Gunakan konten pendukung untuk menambahkan informasi tersebut ke instruksi.

Sesuaikan instruksi Anda sehingga model dikelompokkan menurut kategori, dan tambahkan konten pendukung yang menentukan kategori tersebut:

prompt = """
Instructions: Summarize US Presidential accomplishments, grouped by category.
Categories: Domestic Policy, US Economy, Foreign Affairs, Space Exploration.
Accomplishments: 'George Washington
- First president of the United States.
- First president to have been a military veteran.
- First president to be elected to a second term in office.
- Received votes from every presidential elector in an election.
- Filled the entire body of the United States federal judges; including the Supreme Court.
- First president to be declared an honorary citizen of a foreign country, and an honorary citizen of France.
John Adams ...' ///Text truncated
""";

Menggunakan contoh untuk memandu model

Contohnya adalah teks yang menunjukkan model cara merespons dengan memberikan contoh input pengguna dan output model. Model ini menggunakan contoh untuk menyimpulkan apa yang harus disertakan dalam penyelesaian. Contoh dapat muncul baik sebelum atau sesudah instruksi dalam prompt yang dibuat, tetapi keduanya tidak boleh dicampuradukkan.

Contoh dimulai dengan perintah dan dapat secara opsional menyertakan penyelesaian. Penyelesaian dalam contoh tidak perlu menyertakan respons verbatim—mungkin hanya berisi kata yang diformat, poin pertama dalam daftar yang tidak diurutkan, atau sesuatu yang mirip dengan menunjukkan bagaimana setiap penyelesaian harus dimulai.

Contoh diklasifikasikan sebagai pembelajaran tanpa pelatihan atau pembelajaran dengan sedikit pelatihan berdasarkan apakah berisi penyelesaian verbatim.

  • Contoh-contoh zero-shot learning menyertakan prompt tanpa penyelesaian verbatim. Pendekatan ini menguji respons model tanpa memberinya contoh output data. Prompt zero-shot dapat memiliki penyelesaian yang mencakup petunjuk, seperti mengindikasikan bahwa model harus menghasilkan daftar berurutan dengan menyertakan "1." sebagai penyelesaian.
  • Pembelajaran few-shot mencakup beberapa pasang pemicu dengan penyelesaian verbatim. Pembelajaran dengan sedikit contoh dapat mengubah cara kerja model dengan menambah pengetahuan yang sudah ada.

Memahami petunjuk

Petunjuk adalah teks yang menyampaikan struktur atau format output yang diinginkan. Seperti instruksi, petunjuk tidak diproses oleh model seolah-olah itu adalah masukan pengguna. Sebagai contoh, isyarat menunjukkan kepada model apa yang Anda inginkan daripada memberi tahu apa yang harus dilakukan. Anda dapat menambahkan sebanyak mungkin petunjuk yang Anda inginkan, agar Anda dapat berulang kali mencoba untuk mendapatkan hasil yang Anda inginkan. Isyarat digunakan bersama dengan instruksi atau contoh dan harus ditempatkan di akhir perintah.

Misalkan Anda menggunakan instruksi untuk memberi tahu model untuk menghasilkan daftar pencapaian presiden berdasarkan kategori, bersama dengan konten pendukung yang memberi tahu model kategori apa yang akan digunakan. Anda memutuskan bahwa Anda ingin model menghasilkan daftar bersarang dengan semua kategori menggunakan huruf besar, dengan pencapaian tiap presiden pada setiap kategori ditulis pada satu baris yang dimulai dengan namanya, dengan presiden yang diurutkan secara kronologis. Setelah instruksi dan konten pendukung, Anda dapat menambahkan tiga petunjuk untuk menunjukkan kepada model bagaimana menyusun dan memformat daftar.

prompt = """
Instructions: Summarize US Presidential accomplishments, grouped by category.
Categories: Domestic Policy, US Economy, Foreign Affairs, Space Exploration.
Accomplishments: George Washington
First president of the United States.
First president to have been a military veteran.
First president to be elected to a second term in office.
First president to receive votes from every presidential elector in an election.
First president to fill the entire body of the United States federal judges; including the Supreme Court.
First president to be declared an honorary citizen of a foreign country, and an honorary citizen of France.
John Adams ...  /// Text truncated

DOMESTIC POLICY
- George Washington: 
- John Adams:
""";
  • DOMESTIC POLICY menunjukkan model yang Anda inginkan untuk memulai setiap grup dengan kategori yang ditulis dalam huruf kapital.
  • - George Washington: menunjukkan model untuk memulai setiap bagian dengan pencapaian George Washington disebutkan dalam satu baris.
  • - John Adams: menunjukkan model bahwa ia harus mencantumkan presiden yang tersisa dalam urutan kronologis.

Contoh perintah menggunakan .NET

.NET menyediakan berbagai alat untuk meminta dan mengobrol dengan model AI yang berbeda. Gunakan Semantic Kernel untuk terhubung ke berbagai model dan layanan AI, serta SDK lainnya seperti pustaka OpenAI .NET resmi. Kernel Semantik mencakup alat untuk membuat perintah dengan peran yang berbeda dan mempertahankan riwayat obrolan, serta banyak fitur lainnya.

Perhatikan contoh kode berikut:

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;

// Create a kernel with OpenAI chat completion
#pragma warning disable SKEXP0010
Kernel kernel = Kernel.CreateBuilder()
                    .AddOpenAIChatCompletion(
                        modelId: "phi3:mini",
                        endpoint: new Uri("http://localhost:11434"),
                        apiKey: "")
                    .Build();

var aiChatService = kernel.GetRequiredService<IChatCompletionService>();
var chatHistory = new ChatHistory();
chatHistory.Add(
    new ChatMessageContent(AuthorRole.System, "You are a helpful AI Assistant."));

while (true)
{
    // Get user prompt and add to chat history
    Console.WriteLine("Your prompt:");
    chatHistory.Add(new ChatMessageContent(AuthorRole.User, Console.ReadLine()));

    // Stream the AI response and add to chat history
    Console.WriteLine("AI Response:");
    var response = "";
    await foreach (var item in
        aiChatService.GetStreamingChatMessageContentsAsync(chatHistory))
    {
        Console.Write(item.Content);
        response += item.Content;
    }
    chatHistory.Add(new ChatMessageContent(AuthorRole.Assistant, response));
    Console.WriteLine();
}

Kode sebelumnya menyediakan contoh konsep berikut:

  • Membuat layanan riwayat obrolan untuk memicu model AI agar menghasilkan penyelesaian berdasarkan peran penulis.
  • Mengonfigurasi AI dengan pesan AuthorRole.System .
  • Menerima input pengguna untuk memungkinkan berbagai jenis perintah dalam konteks AuthorRole.User.
  • Secara asinkron mengirimkan data penyelesaian dari sistem AI untuk memberikan pengalaman obrolan yang dinamis.

Perluas teknik pemrograman prompt Anda

Anda juga dapat meningkatkan efektivitas prompt Anda dengan teknik rekayasa prompt yang lebih canggih yang dibahas secara mendalam dalam artikel tersendiri.

  • LLM memiliki batas input token yang membatasi jumlah teks yang dapat Anda paskan dalam perintah. Gunakan penyematan dan solusi database vektor untuk mengurangi jumlah token yang Anda butuhkan untuk mewakili teks tertentu.
  • LLM tidak dilatih pada data Anda kecuali Anda melatihnya sendiri, yang bisa mahal dan memakan waktu. Gunakan retrieval augmented generation (RAG) untuk membuat data Anda dapat diakses oleh LLM tanpa harus melatih LLM tersebut.