Modul ini membahas konsep dan teknik penting untuk membuat prompt yang efektif pada model AI generatif. Cara kamu menulis prompt ke LLM juga sangat berpengaruh. Prompt yang dirancang dengan baik bisa menghasilkan respons yang lebih berkualitas. Tapi apa sebenarnya arti istilah prompt dan prompt engineering? Dan bagaimana cara memperbaiki input prompt yang kita kirim ke LLM? Pertanyaan-pertanyaan ini akan kita bahas di bab ini dan berikutnya.
Generative AI mampu membuat konten baru (misalnya, teks, gambar, audio, kode, dll.) sebagai respons atas permintaan pengguna. Kemampuan ini didapatkan dengan menggunakan Large Language Models seperti seri GPT ("Generative Pre-trained Transformer") dari OpenAI yang dilatih untuk memahami bahasa alami dan kode.
Pengguna sekarang bisa berinteraksi dengan model-model ini menggunakan cara yang sudah familiar seperti chat, tanpa perlu keahlian teknis atau pelatihan khusus. Model-model ini berbasis prompt - pengguna mengirimkan input teks (prompt) dan mendapatkan respons AI (completion). Mereka bisa "mengobrol dengan AI" secara berulang, dalam percakapan multi-putaran, memperbaiki prompt sampai responsnya sesuai harapan.
"Prompt" kini menjadi antarmuka pemrograman utama untuk aplikasi AI generatif, memberi tahu model apa yang harus dilakukan dan memengaruhi kualitas respons yang dihasilkan. "Prompt Engineering" adalah bidang studi yang berkembang pesat yang fokus pada desain dan optimasi prompt agar menghasilkan respons yang konsisten dan berkualitas dalam skala besar.
Di pelajaran ini, kita akan belajar apa itu Prompt Engineering, mengapa hal ini penting, dan bagaimana kita bisa membuat prompt yang lebih efektif untuk model dan tujuan aplikasi tertentu. Kita akan memahami konsep inti dan praktik terbaik dalam prompt engineering - serta mengenal lingkungan "sandbox" interaktif di Jupyter Notebooks untuk melihat penerapan konsep ini pada contoh nyata.
Setelah menyelesaikan pelajaran ini, kita akan bisa:
- Menjelaskan apa itu prompt engineering dan mengapa hal ini penting.
- Mendeskripsikan komponen-komponen prompt dan cara penggunaannya.
- Mempelajari praktik terbaik dan teknik dalam prompt engineering.
- Menerapkan teknik yang dipelajari pada contoh nyata, menggunakan endpoint OpenAI.
Prompt Engineering: Praktik mendesain dan menyempurnakan input untuk membimbing model AI agar menghasilkan output yang diinginkan. Tokenization: Proses mengubah teks menjadi unit-unit kecil yang disebut token, agar bisa dipahami dan diproses oleh model. Instruction-Tuned LLMs: Large Language Models (LLMs) yang telah dioptimasi dengan instruksi khusus untuk meningkatkan akurasi dan relevansi responsnya.
Prompt engineering saat ini lebih mirip seni daripada sains. Cara terbaik untuk meningkatkan intuisi kita adalah dengan banyak berlatih dan menggunakan pendekatan trial-and-error yang menggabungkan keahlian domain aplikasi dengan teknik yang direkomendasikan serta optimasi khusus model.
Jupyter Notebook yang menyertai pelajaran ini menyediakan lingkungan sandbox di mana kamu bisa mencoba apa yang sudah dipelajari - baik langsung maupun sebagai bagian dari tantangan kode di akhir. Untuk menjalankan latihan, kamu membutuhkan:
- API key Azure OpenAI - endpoint layanan untuk LLM yang sudah dideploy.
- Python Runtime - untuk menjalankan Notebook.
- Variabel Lingkungan Lokal - selesaikan langkah-langkah SETUP sekarang agar siap digunakan.
Notebook ini sudah dilengkapi dengan latihan starter - tapi kamu sangat dianjurkan untuk menambahkan bagian Markdown (deskripsi) dan Code (permintaan prompt) sendiri untuk mencoba lebih banyak contoh atau ide - dan membangun intuisi dalam mendesain prompt.
Ingin mendapatkan gambaran besar tentang apa saja yang dibahas di pelajaran ini sebelum mulai? Lihat panduan bergambar berikut, yang memberikan gambaran topik utama dan poin-poin penting yang perlu kamu pikirkan di setiap bagian. Roadmap pelajaran ini membawamu dari pemahaman konsep inti dan tantangan, hingga cara mengatasinya dengan teknik dan praktik terbaik prompt engineering yang relevan. Perlu dicatat bahwa bagian "Advanced Techniques" di panduan ini merujuk pada materi yang akan dibahas di bab selanjutnya dari kurikulum ini.
Sekarang, mari kita bahas bagaimana topik ini berkaitan dengan misi startup kita untuk membawa inovasi AI ke dunia pendidikan. Kita ingin membangun aplikasi pembelajaran personalized berbasis AI - jadi mari kita pikirkan bagaimana pengguna yang berbeda dari aplikasi kita bisa "mendesain" prompt:
- Administrator mungkin meminta AI untuk menganalisis data kurikulum dan mengidentifikasi kekurangan cakupan. AI bisa merangkum hasilnya atau memvisualisasikannya dengan kode.
- Pendidik mungkin meminta AI untuk membuat rencana pelajaran untuk audiens dan topik tertentu. AI bisa membangun rencana personalisasi dalam format yang sudah ditentukan.
- Siswa mungkin meminta AI untuk membimbing mereka dalam mata pelajaran yang sulit. AI sekarang bisa membimbing siswa dengan pelajaran, petunjuk & contoh yang disesuaikan dengan level mereka.
Itu baru permulaan. Lihat Prompts For Education - pustaka prompt open-source yang dikurasi oleh para ahli pendidikan - untuk mendapatkan gambaran lebih luas tentang kemungkinannya! Coba jalankan beberapa prompt tersebut di sandbox atau gunakan OpenAI Playground untuk melihat hasilnya!
Kita memulai pelajaran ini dengan mendefinisikan Prompt Engineering sebagai proses mendesain dan mengoptimasi input teks (prompt) untuk menghasilkan respons (completion) yang konsisten dan berkualitas sesuai tujuan aplikasi dan model yang digunakan. Kita bisa menganggapnya sebagai proses dua langkah:
- mendesain prompt awal untuk model dan tujuan tertentu
- menyempurnakan prompt secara bertahap untuk meningkatkan kualitas respons
Proses ini memang membutuhkan trial-and-error, intuisi, dan usaha dari pengguna agar hasilnya optimal. Lalu, mengapa hal ini penting? Untuk menjawabnya, kita perlu memahami tiga konsep berikut:
- Tokenization = bagaimana model "melihat" prompt
- Base LLMs = bagaimana model dasar "memproses" prompt
- Instruction-Tuned LLMs = bagaimana model bisa "melihat" tugas
LLM melihat prompt sebagai urutan token di mana model yang berbeda (atau versi berbeda dari satu model) bisa melakukan tokenisasi pada prompt yang sama dengan cara yang berbeda. Karena LLM dilatih menggunakan token (bukan teks mentah), cara prompt di-tokenisasi sangat memengaruhi kualitas respons yang dihasilkan.
Untuk memahami cara kerja tokenisasi, coba gunakan alat seperti OpenAI Tokenizer di bawah ini. Salin prompt kamu - dan lihat bagaimana prompt tersebut diubah menjadi token, perhatikan juga bagaimana karakter spasi dan tanda baca diproses. Perlu diingat, contoh ini menggunakan LLM lama (GPT-3) - jadi jika kamu mencoba dengan model yang lebih baru, hasilnya bisa berbeda.
Setelah prompt di-tokenisasi, fungsi utama dari "Base LLM" (atau Foundation model) adalah memprediksi token berikutnya dalam urutan tersebut. Karena LLM dilatih dengan dataset teks yang sangat besar, mereka punya pemahaman statistik yang baik tentang hubungan antar token dan bisa membuat prediksi dengan tingkat kepercayaan tertentu. Perlu dicatat bahwa mereka tidak memahami makna kata dalam prompt atau token; mereka hanya melihat pola yang bisa mereka "lanjutkan" dengan prediksi berikutnya. Model akan terus memprediksi urutan sampai dihentikan oleh intervensi pengguna atau kondisi yang sudah ditetapkan.
Ingin melihat bagaimana proses completion berbasis prompt bekerja? Masukkan prompt di atas ke Chat Playground Azure OpenAI Studio dengan pengaturan default. Sistem dikonfigurasi untuk memperlakukan prompt sebagai permintaan informasi - jadi kamu akan melihat completion yang sesuai dengan konteks ini.
Tapi bagaimana jika pengguna ingin melihat sesuatu yang spesifik sesuai kriteria atau tujuan tugas? Di sinilah LLM yang instruction-tuned berperan.
Instruction Tuned LLM dimulai dari foundation model dan dioptimasi dengan contoh atau pasangan input/output (misalnya, "pesan" multi-putaran) yang berisi instruksi jelas - dan respons dari AI berusaha mengikuti instruksi tersebut.
Teknik yang digunakan seperti Reinforcement Learning with Human Feedback (RLHF) melatih model untuk mengikuti instruksi dan belajar dari umpan balik sehingga menghasilkan respons yang lebih relevan untuk aplikasi nyata dan lebih sesuai dengan tujuan pengguna.
Mari kita coba - ulangi prompt di atas, tapi sekarang ubah system message untuk memberikan instruksi berikut sebagai konteks:
Ringkaslah konten yang diberikan untuk siswa kelas dua. Hasilkan satu paragraf dengan 3-5 poin bullet.
Lihat bagaimana hasilnya sekarang disesuaikan dengan tujuan dan format yang diinginkan? Seorang pendidik bisa langsung menggunakan respons ini di slide kelasnya.
Setelah kita tahu bagaimana prompt diproses oleh LLM, mari kita bahas mengapa prompt engineering dibutuhkan. Jawabannya terletak pada kenyataan bahwa LLM saat ini memiliki sejumlah tantangan yang membuat completion yang konsisten dan dapat diandalkan sulit dicapai tanpa usaha dalam membangun dan mengoptimasi prompt. Contohnya:
-
Respons model bersifat stokastik. Prompt yang sama kemungkinan besar akan menghasilkan respons berbeda pada model atau versi model yang berbeda. Bahkan bisa menghasilkan hasil berbeda pada model yang sama di waktu berbeda. Teknik prompt engineering bisa membantu meminimalkan variasi ini dengan memberikan batasan yang lebih baik.
-
Model bisa membuat respons yang tidak nyata. Model dilatih dengan dataset yang besar tapi terbatas, artinya mereka tidak tahu tentang konsep di luar cakupan pelatihan tersebut. Akibatnya, mereka bisa menghasilkan completion yang tidak akurat, imajinatif, atau bahkan bertentangan dengan fakta yang diketahui. Teknik prompt engineering membantu pengguna mengidentifikasi dan mengurangi respons seperti ini, misalnya dengan meminta AI untuk memberikan referensi atau penjelasan.
-
Kemampuan model akan berbeda-beda. Model yang lebih baru atau generasi berikutnya punya kemampuan lebih kaya, tapi juga membawa keunikan dan trade-off dalam biaya & kompleksitas. Prompt engineering membantu kita mengembangkan praktik terbaik dan alur kerja yang bisa mengatasi perbedaan ini dan menyesuaikan kebutuhan spesifik model dengan cara yang skalabel dan mulus.
Mari kita lihat langsung di OpenAI atau Azure OpenAI Playground:
- Gunakan prompt yang sama pada deployment LLM yang berbeda (misalnya, OpenAI, Azure OpenAI, Hugging Face) - apakah kamu melihat variasinya?
- Gunakan prompt yang sama berulang kali pada deployment LLM yang sama (misalnya, Azure OpenAI playground) - bagaimana variasi hasilnya?
Di kursus ini, kita menggunakan istilah "fabrication" untuk merujuk pada fenomena di mana LLM kadang menghasilkan informasi yang tidak benar secara faktual karena keterbatasan pelatihan atau kendala lain. Kamu mungkin juga pernah mendengar istilah "hallucinations" di artikel populer atau makalah penelitian. Namun, kami sangat menyarankan menggunakan istilah "fabrication" agar kita tidak secara tidak sengaja mengaitkan perilaku mesin dengan sifat manusia. Hal ini juga memperkuat pedoman Responsible AI dari sisi terminologi, menghilangkan istilah yang bisa dianggap ofensif atau tidak inklusif di beberapa konteks.
Ingin tahu bagaimana fabrication terjadi? Coba buat prompt yang menginstruksikan AI untuk menghasilkan konten tentang topik yang tidak ada (agar tidak ditemukan di dataset pelatihan). Misalnya - saya mencoba prompt berikut:
- Memahami latar belakang dan penyebab terjadinya Perang Mars tahun 2076.
- Menganalisis dampak sosial, politik, dan teknologi dari konflik tersebut.
- Mengembangkan keterampilan berpikir kritis melalui diskusi dan simulasi.
Perang Mars tahun 2076 adalah salah satu peristiwa paling penting dalam sejarah kolonisasi luar angkasa. Konflik ini melibatkan koloni manusia di Mars dan pemerintah Bumi, serta berdampak besar pada hubungan antarplanet dan perkembangan teknologi.
-
Latar Belakang Perang Mars
- Sejarah kolonisasi Mars
- Ketegangan antara koloni Mars dan pemerintah Bumi
- Faktor ekonomi, politik, dan sumber daya
-
Kronologi Perang
- Awal mula konflik
- Pertempuran besar dan strategi yang digunakan
- Tokoh-tokoh penting dalam perang
-
Dampak Perang
- Perubahan sosial di Mars dan Bumi
- Kemajuan teknologi militer dan sipil
- Perjanjian damai dan masa depan hubungan antarplanet
- Diskusi Kelompok: Siswa dibagi menjadi beberapa kelompok untuk membahas penyebab utama Perang Mars dan kemungkinan solusi damai.
- Simulasi Perundingan: Siswa berperan sebagai perwakilan Mars dan Bumi untuk mencoba mencapai kesepakatan damai.
- Analisis Sumber: Siswa mempelajari dokumen sejarah, pidato, dan laporan media dari masa perang.
- Partisipasi dalam diskusi dan simulasi
- Laporan tertulis tentang dampak Perang Mars tahun 2076
- Presentasi kelompok mengenai solusi konflik
Perang Mars tahun 2076 memberikan pelajaran penting tentang diplomasi, teknologi, dan pentingnya kerja sama antarplanet. Melalui pembelajaran ini, siswa diharapkan dapat memahami kompleksitas konflik dan pentingnya perdamaian dalam masyarakat masa depan. Pencarian web menunjukkan bahwa ada kisah fiksi (misalnya, serial televisi atau buku) tentang perang di Mars – tapi tidak ada yang terjadi di tahun 2076. Logika juga mengatakan bahwa tahun 2076 itu masih di masa depan dan karena itu, tidak mungkin dikaitkan dengan kejadian nyata.
Jadi, apa yang terjadi jika kita menjalankan prompt ini dengan penyedia LLM yang berbeda?
Respons 1: OpenAI Playground (GPT-35)
Respons 2: Azure OpenAI Playground (GPT-35)
Respons 3: : Hugging Face Chat Playground (LLama-2)
Seperti yang diduga, setiap model (atau versi model) menghasilkan respons yang sedikit berbeda berkat perilaku stokastik dan variasi kemampuan model. Misalnya, satu model menargetkan audiens kelas 8 sementara yang lain mengasumsikan siswa SMA. Namun ketiga model tersebut menghasilkan jawaban yang bisa membuat pengguna yang tidak tahu menjadi percaya bahwa kejadian itu nyata.
Teknik rekayasa prompt seperti metaprompting dan pengaturan temperatur bisa mengurangi fabrikasi model sampai batas tertentu. Arsitektur rekayasa prompt yang baru juga mengintegrasikan alat dan teknik baru ke dalam alur prompt, untuk mengurangi atau memitigasi efek-efek ini.
Mari kita tutup bagian ini dengan melihat bagaimana rekayasa prompt digunakan dalam solusi nyata melalui satu Studi Kasus: GitHub Copilot.
GitHub Copilot adalah "AI Pair Programmer" Anda – ia mengubah prompt teks menjadi pelengkapan kode dan terintegrasi langsung ke lingkungan pengembangan Anda (misalnya, Visual Studio Code) untuk pengalaman pengguna yang mulus. Seperti yang didokumentasikan dalam rangkaian blog di bawah, versi awalnya berbasis model OpenAI Codex – dengan para engineer segera menyadari perlunya melakukan fine-tuning pada model dan mengembangkan teknik rekayasa prompt yang lebih baik, demi meningkatkan kualitas kode. Pada bulan Juli, mereka memperkenalkan model AI yang lebih baik, melampaui Codex untuk saran yang lebih cepat.
Baca postingan di bawah ini secara berurutan untuk mengikuti perjalanan pembelajaran mereka.
- Mei 2023 | GitHub Copilot Semakin Baik dalam Memahami Kode Anda
- Mei 2023 | Inside GitHub: Bekerja dengan LLM di balik GitHub Copilot.
- Juni 2023 | Cara Menulis Prompt yang Lebih Baik untuk GitHub Copilot.
- Juli 2023 | .. GitHub Copilot melampaui Codex dengan model AI yang lebih baik
- Juli 2023 | Panduan Developer untuk Prompt Engineering dan LLM
- September 2023 | Cara membangun aplikasi LLM untuk perusahaan: Pelajaran dari GitHub Copilot
Anda juga bisa menjelajahi blog Engineering mereka untuk postingan lain seperti yang ini yang menunjukkan bagaimana model dan teknik ini diaplikasikan untuk mendorong aplikasi nyata.
Kita sudah melihat mengapa rekayasa prompt itu penting – sekarang mari pahami bagaimana prompt dibangun agar kita bisa mengevaluasi berbagai teknik untuk desain prompt yang lebih efektif.
Mari mulai dengan prompt dasar: input teks yang dikirim ke model tanpa konteks lain. Berikut contohnya – ketika kita mengirim beberapa kata pertama dari lagu kebangsaan Amerika Serikat ke Completion API OpenAI, ia langsung melengkapi respons dengan baris berikutnya, menunjukkan perilaku prediksi dasar.
| Prompt (Input) | Completion (Output) |
|---|---|
| Oh say can you see | Sepertinya Anda sedang memulai lirik "The Star-Spangled Banner," lagu kebangsaan Amerika Serikat. Lirik lengkapnya adalah ... |
Sekarang mari tambahkan konteks dan instruksi ke prompt dasar itu. Chat Completion API memungkinkan kita membangun prompt kompleks sebagai kumpulan pesan dengan:
- Pasangan input/output yang mencerminkan input user dan respons asisten.
- Pesan sistem yang mengatur konteks perilaku atau kepribadian asisten.
Permintaan sekarang berbentuk seperti di bawah ini, di mana tokenisasi secara efektif menangkap informasi relevan dari konteks dan percakapan. Mengubah konteks sistem bisa sama berdampaknya terhadap kualitas pelengkapan, seperti input pengguna yang diberikan.
response = openai.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)Pada contoh di atas, prompt pengguna adalah kueri teks sederhana yang bisa diartikan sebagai permintaan informasi. Dengan prompt instruksi, kita bisa menggunakan teks itu untuk merinci tugas, memberikan panduan yang lebih baik ke AI. Berikut contohnya:
| Prompt (Input) | Completion (Output) | Instruction Type |
|---|---|---|
| Tulis deskripsi tentang Perang Saudara Amerika | menghasilkan paragraf sederhana | Sederhana |
| Tulis deskripsi tentang Perang Saudara Amerika. Sertakan tanggal dan peristiwa penting serta jelaskan signifikansinya | menghasilkan paragraf diikuti daftar tanggal peristiwa penting beserta penjelasannya | Kompleks |
| Tulis deskripsi tentang Perang Saudara Amerika dalam 1 paragraf. Berikan 3 poin penting dengan tanggal dan signifikansinya. Berikan 3 poin lagi tentang tokoh sejarah utama dan kontribusinya. Kembalikan output dalam format JSON | menghasilkan detail lebih lengkap dalam kotak teks, diformat sebagai JSON yang bisa Anda salin ke file dan validasi | Kompleks. Terformat. |
Pada contoh di atas, prompt masih cukup terbuka, membiarkan LLM memutuskan bagian mana dari dataset pra-latihannya yang relevan. Dengan pola desain konten utama, teks input dibagi menjadi dua bagian:
- instruksi (aksi)
- konten relevan (yang memengaruhi aksi)
Berikut contoh di mana instruksinya adalah "ringkas ini dalam 2 kalimat".
| Prompt (Input) | Completion (Output) |
|---|---|
| Jupiter adalah planet kelima dari Matahari dan yang terbesar di Tata Surya. Ia merupakan planet gas raksasa dengan massa seperseribu dari Matahari, tetapi dua setengah kali dari gabungan massa semua planet lain di Tata Surya. Jupiter adalah salah satu objek paling terang yang terlihat dengan mata telanjang di langit malam, dan telah dikenal oleh peradaban kuno sejak sebelum sejarah tercatat. Namanya diambil dari dewa Romawi Jupiter.[19] Jika dilihat dari Bumi, Jupiter bisa cukup terang sehingga cahaya pantulannya dapat menimbulkan bayangan yang terlihat,[20] dan rata-rata merupakan objek alami ketiga paling terang di langit malam setelah Bulan dan Venus. Ringkas ini dalam 2 kalimat pendek |
Jupiter, planet kelima dari Matahari, adalah yang terbesar di Tata Surya dan dikenal sebagai salah satu objek paling terang di langit malam. Dinamai dari dewa Romawi Jupiter, ia adalah planet gas raksasa dengan massa dua setengah kali gabungan semua planet lain di Tata Surya. |
Segmen konten utama bisa digunakan dengan berbagai cara untuk menghasilkan instruksi yang lebih efektif:
- Contoh – alih-alih memberi tahu model apa yang harus dilakukan dengan instruksi eksplisit, berikan contoh hasil yang diinginkan dan biarkan model menyimpulkan polanya.
- Cue – ikuti instruksi dengan "cue" yang memancing pelengkapan, mengarahkan model ke respons yang lebih relevan.
- Template – ini adalah 'resep' prompt yang bisa diulang dengan placeholder (variabel) yang dapat disesuaikan dengan data untuk kasus penggunaan tertentu.
Mari kita lihat penerapannya.
Ini adalah pendekatan di mana Anda menggunakan konten utama untuk "memberi makan model" beberapa contoh output yang diinginkan untuk instruksi tertentu, dan biarkan model menyimpulkan polanya. Berdasarkan jumlah contoh yang diberikan, kita bisa punya zero-shot prompting, one-shot prompting, few-shot prompting, dll.
Prompt sekarang terdiri dari tiga komponen:
- Deskripsi tugas
- Beberapa contoh output yang diinginkan
- Awal contoh baru (yang menjadi deskripsi tugas implisit)
| Learning Type | Prompt (Input) | Completion (Output) |
|---|---|---|
| Zero-shot | "The Sun is Shining". Translate to Spanish | "El Sol está brillando". |
| One-shot | "The Sun is Shining" => ""El Sol está brillando". "It's a Cold and Windy Day" => |
"Es un día frío y ventoso". |
| Few-shot | The player ran the bases => Baseball The player hit an ace => Tennis The player hit a six => Cricket The player made a slam-dunk => |
Basketball |
Perhatikan bahwa kita harus memberikan instruksi eksplisit ("Translate to Spanish") pada zero-shot prompting, tapi instruksi itu bisa disimpulkan pada contoh one-shot. Contoh few-shot menunjukkan bahwa menambah jumlah contoh memungkinkan model membuat inferensi yang lebih akurat tanpa instruksi tambahan.
Teknik lain untuk menggunakan konten utama adalah dengan memberikan cue daripada contoh. Dalam hal ini, kita memberi model dorongan ke arah yang benar dengan memulai respons menggunakan cuplikan yang mencerminkan format jawaban yang diinginkan. Model kemudian "mengambil cue" untuk melanjutkan dengan gaya yang sama.
| Jumlah Cue | Prompt (Input) | Completion (Output) |
|---|---|---|
| 0 | Jupiter adalah planet kelima dari Matahari dan yang terbesar di Tata Surya. Ia merupakan planet gas raksasa dengan massa seperseribu dari Matahari, tetapi dua setengah kali dari gabungan massa semua planet lain di Tata Surya. Jupiter adalah salah satu objek paling terang yang terlihat dengan mata telanjang di langit malam, dan telah dikenal oleh peradaban kuno sejak sebelum sejarah tercatat. |
Ringkas Ini | Jupiter adalah planet terbesar di Tata Surya kita dan planet kelima dari Matahari. Jupiter merupakan planet gas raksasa dengan massa 1/1000 dari Matahari, namun lebih berat dari gabungan semua planet lain. Peradaban kuno telah lama mengenal Jupiter, dan planet ini mudah terlihat di langit malam. |
| 1 | Jupiter adalah planet kelima dari Matahari dan yang terbesar di Tata Surya. Jupiter merupakan planet gas raksasa dengan massa seperseribu dari Matahari, namun dua setengah kali lebih berat dari gabungan semua planet lain di Tata Surya. Jupiter adalah salah satu objek paling terang yang bisa dilihat dengan mata telanjang di langit malam, dan telah dikenal oleh peradaban kuno sejak sebelum sejarah tercatat.
Ringkas Ini
Yang kita pelajari adalah bahwa Jupiter | adalah planet kelima dari Matahari dan yang terbesar di Tata Surya. Jupiter merupakan planet gas raksasa dengan massa seperseribu dari Matahari, namun dua setengah kali lebih berat dari gabungan semua planet lain. Jupiter mudah terlihat dengan mata telanjang dan telah dikenal sejak zaman kuno. |
| 2 | Jupiter adalah planet kelima dari Matahari dan yang terbesar di Tata Surya. Jupiter merupakan planet gas raksasa dengan massa seperseribu dari Matahari, namun dua setengah kali lebih berat dari gabungan semua planet lain di Tata Surya. Jupiter adalah salah satu objek paling terang yang bisa dilihat dengan mata telanjang di langit malam, dan telah dikenal oleh peradaban kuno sejak sebelum sejarah tercatat.
Ringkas Ini
3 Fakta Utama yang Kita Pelajari: | 1. Jupiter adalah planet kelima dari Matahari dan yang terbesar di Tata Surya.
2. Jupiter merupakan planet gas raksasa dengan massa seperseribu dari Matahari...
3. Jupiter telah terlihat dengan mata telanjang sejak zaman kuno ... |
| | | |
Template prompt adalah resep prompt yang sudah ditentukan yang bisa disimpan dan digunakan kembali sesuai kebutuhan, untuk menghasilkan pengalaman pengguna yang lebih konsisten dalam skala besar. Dalam bentuk paling sederhana, ini hanyalah kumpulan contoh prompt seperti contoh dari OpenAI ini yang menyediakan komponen prompt interaktif (pesan pengguna dan sistem) serta format permintaan berbasis API - untuk mendukung penggunaan ulang.
Dalam bentuk yang lebih kompleks seperti contoh dari LangChain ini, template ini berisi placeholder yang bisa diganti dengan data dari berbagai sumber (input pengguna, konteks sistem, sumber data eksternal, dll.) untuk menghasilkan prompt secara dinamis. Ini memungkinkan kita membuat pustaka prompt yang dapat digunakan kembali untuk menghasilkan pengalaman pengguna yang konsisten secara terprogram dalam skala besar.
Nilai utama dari template terletak pada kemampuannya untuk membuat dan mempublikasikan pustaka prompt untuk domain aplikasi vertikal - di mana template prompt kini dioptimalkan agar sesuai dengan konteks atau contoh spesifik aplikasi sehingga respons yang dihasilkan lebih relevan dan akurat untuk audiens pengguna yang ditargetkan. Repositori Prompts For Edu adalah contoh bagus dari pendekatan ini, mengkurasi pustaka prompt untuk bidang pendidikan dengan penekanan pada tujuan utama seperti perencanaan pelajaran, desain kurikulum, bimbingan siswa, dan sebagainya.
Jika kita menganggap pembuatan prompt terdiri dari instruksi (tugas) dan target (konten utama), maka konten sekunder adalah konteks tambahan yang kita berikan untuk mempengaruhi keluaran dengan cara tertentu. Ini bisa berupa parameter pengaturan, instruksi format, taksonomi topik, dll. yang dapat membantu model menyesuaikan responsnya agar sesuai dengan tujuan atau harapan pengguna.
Contoh: Diberikan katalog mata kuliah dengan metadata lengkap (nama, deskripsi, tingkat, tag metadata, pengajar, dll.) untuk semua mata kuliah yang tersedia dalam kurikulum:
- kita bisa mendefinisikan instruksi "ringkas katalog mata kuliah untuk Semester Ganjil 2023"
- kita bisa menggunakan konten utama untuk memberikan beberapa contoh keluaran yang diinginkan
- kita bisa menggunakan konten sekunder untuk mengidentifikasi 5 "tag" teratas yang menjadi fokus.
Sekarang, model dapat memberikan ringkasan dalam format yang dicontohkan - namun jika suatu hasil memiliki banyak tag, model bisa memprioritaskan 5 tag yang diidentifikasi dalam konten sekunder.
Sekarang kita sudah tahu bagaimana prompt bisa dibangun, kita bisa mulai memikirkan bagaimana merancang prompt agar sesuai dengan praktik terbaik. Kita bisa membaginya menjadi dua bagian - memiliki mindset yang tepat dan menerapkan teknik yang tepat.
Prompt Engineering adalah proses coba-coba, jadi ingatlah tiga faktor utama berikut:
-
Pemahaman Domain Penting. Akurasi dan relevansi respons sangat dipengaruhi oleh domain aplikasi atau pengguna. Gunakan intuisi dan keahlian domain Anda untuk menyesuaikan teknik lebih lanjut. Misalnya, tentukan kepribadian khusus domain dalam prompt sistem Anda, atau gunakan template khusus domain dalam prompt pengguna. Berikan konten sekunder yang mencerminkan konteks domain, atau gunakan petunjuk dan contoh khusus domain untuk mengarahkan model ke pola penggunaan yang sudah dikenal.
-
Pemahaman Model Penting. Kita tahu model bersifat stokastik. Namun implementasi model juga bisa berbeda dalam hal dataset pelatihan yang digunakan (pengetahuan pra-latih), kemampuan yang disediakan (misal, lewat API atau SDK), dan jenis konten yang dioptimalkan (misal, kode vs gambar vs teks). Pahami kelebihan dan keterbatasan model yang Anda gunakan, dan gunakan pengetahuan itu untuk memprioritaskan tugas atau membangun template khusus yang dioptimalkan untuk kemampuan model.
-
Iterasi & Validasi Penting. Model berkembang sangat cepat, begitu juga teknik prompt engineering. Sebagai ahli domain, Anda mungkin memiliki konteks atau kriteria lain untuk aplikasi Anda yang belum tentu berlaku untuk komunitas luas. Gunakan alat & teknik prompt engineering untuk "memulai" pembuatan prompt, lalu lakukan iterasi dan validasi hasilnya dengan intuisi dan keahlian Anda. Catat wawasan Anda dan buat basis pengetahuan (misal, pustaka prompt) yang bisa digunakan orang lain sebagai baseline baru, untuk iterasi yang lebih cepat di masa depan.
Sekarang mari kita lihat praktik terbaik yang umum direkomendasikan oleh para praktisi OpenAI dan Azure OpenAI.
| Apa | Mengapa |
|---|---|
| Evaluasi model terbaru. | Generasi model baru biasanya memiliki fitur dan kualitas yang lebih baik - namun mungkin juga biayanya lebih tinggi. Evaluasi dampaknya, lalu putuskan apakah akan migrasi. |
| Pisahkan instruksi & konteks | Periksa apakah model/penyedia Anda mendefinisikan delimiter untuk membedakan instruksi, konten utama, dan konten sekunder dengan lebih jelas. Ini bisa membantu model memberikan bobot lebih akurat pada token. |
| Spesifik dan jelas | Berikan detail lebih banyak tentang konteks, hasil, panjang, format, gaya, dll. yang diinginkan. Ini akan meningkatkan kualitas dan konsistensi respons. Simpan resep dalam template yang bisa digunakan ulang. |
| Deskriptif, gunakan contoh | Model sering merespons lebih baik dengan pendekatan "tunjukkan dan ceritakan". Mulai dengan pendekatan zero-shot di mana Anda hanya memberi instruksi (tanpa contoh), lalu coba few-shot sebagai penyempurnaan, dengan memberikan beberapa contoh keluaran yang diinginkan. Gunakan analogi. |
| Gunakan petunjuk untuk memulai jawaban | Dorong model ke hasil yang diinginkan dengan memberikan beberapa kata atau frasa awal yang bisa digunakan sebagai titik awal respons. |
| Ulangi instruksi | Kadang Anda perlu mengulang instruksi ke model. Berikan instruksi sebelum dan sesudah konten utama, gunakan instruksi dan petunjuk, dll. Lakukan iterasi & validasi untuk melihat mana yang paling efektif. |
| Urutan Penting | Urutan penyajian informasi ke model bisa memengaruhi keluaran, bahkan dalam contoh pembelajaran, karena adanya bias recency. Coba beberapa opsi untuk melihat mana yang paling baik. |
| Beri model “jalan keluar” | Berikan model fallback atau respons alternatif jika tidak bisa menyelesaikan tugas. Ini bisa mengurangi kemungkinan model menghasilkan jawaban yang salah atau mengada-ada. |
Seperti halnya praktik terbaik lainnya, ingatlah bahwa hasil Anda bisa berbeda tergantung model, tugas, dan domain. Gunakan ini sebagai titik awal, dan lakukan iterasi untuk menemukan yang paling cocok untuk Anda. Selalu evaluasi ulang proses prompt engineering Anda seiring munculnya model dan alat baru, dengan fokus pada skalabilitas proses dan kualitas respons.
Selamat! Anda sudah sampai di akhir pelajaran! Saatnya mencoba beberapa konsep dan teknik tadi dengan contoh nyata!
Untuk tugas ini, kita akan menggunakan Jupyter Notebook dengan latihan yang bisa Anda kerjakan secara interaktif. Anda juga bisa memperluas Notebook dengan sel Markdown dan Kode sendiri untuk mengeksplorasi ide dan teknik lain.
- (Direkomendasikan) Jalankan GitHub Codespaces
- (Alternatif) Clone repo ke perangkat lokal Anda dan gunakan dengan Docker Desktop
- (Alternatif) Buka Notebook dengan lingkungan runtime Notebook pilihan Anda.
- Salin file
.env.copydi root repo menjadi.envdan isi nilaiAZURE_OPENAI_API_KEY,AZURE_OPENAI_ENDPOINT, danAZURE_OPENAI_DEPLOYMENT. Kembali ke bagian Learning Sandbox untuk mempelajari caranya.
- Pilih kernel runtime. Jika menggunakan opsi 1 atau 2, cukup pilih kernel Python 3.10.x default yang disediakan oleh dev container.
Anda siap menjalankan latihan. Perlu dicatat bahwa tidak ada jawaban benar atau salah di sini - hanya eksplorasi opsi lewat coba-coba dan membangun intuisi untuk apa yang bekerja pada model dan domain aplikasi tertentu.
Untuk alasan ini, tidak ada segmen Solusi Kode di pelajaran ini. Sebagai gantinya, Notebook akan memiliki sel Markdown berjudul "Solusi Saya:" yang menunjukkan satu contoh hasil untuk referensi.
Manakah dari berikut ini yang merupakan prompt yang baik sesuai beberapa praktik terbaik?
- Tunjukkan gambar mobil merah
- Tunjukkan gambar mobil merah merek Volvo dan model XC90 yang diparkir di tepi tebing saat matahari terbenam
- Tunjukkan gambar mobil merah merek Volvo dan model XC90
A: 2, ini adalah prompt terbaik karena memberikan detail tentang "apa" dan sangat spesifik (bukan sembarang mobil, tapi merek dan model tertentu) serta menggambarkan suasana secara keseluruhan. 3 adalah yang terbaik berikutnya karena juga cukup deskriptif.
Coba gunakan teknik "petunjuk" dengan prompt: Lengkapi kalimat "Tunjukkan gambar mobil merah merek Volvo dan ". Apa respons yang dihasilkan, dan bagaimana Anda akan memperbaikinya?
Ingin belajar lebih banyak tentang berbagai konsep Prompt Engineering? Kunjungi halaman pembelajaran lanjutan untuk menemukan sumber daya hebat lainnya tentang topik ini.
Lanjut ke Pelajaran 5 di mana kita akan membahas teknik prompting lanjutan!
Disclaimer: Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI Co-op Translator. Meskipun kami berupaya untuk memberikan terjemahan yang akurat, harap diketahui bahwa terjemahan otomatis dapat mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang berwenang. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemah profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang timbul dari penggunaan terjemahan ini.







