Bab 5: Few-Shot Prompting¶
Ngajarin AI lewat contoh, bukan deskripsi. Sering kali 3 contoh nilai-nya lebih dari 3 paragraf instruksi.
Sampai Bab 4, kita ngasih AI instruksi ("tulis seperti X", "format Y"). Tapi sering kali, menunjukkan contoh lebih efektif. Itulah few-shot prompting.
Setelah Bab 5, kamu akan bisa:
- Memahami beda zero-shot vs few-shot
- Menulis prompt few-shot yang efektif
- Tahu kapan few-shot menang vs kapan instruksi cukup
- Pakai few-shot untuk classification, extraction, dan style matching
5.1. Zero-Shot vs Few-Shot¶
Zero-shot = kasih task tanpa contoh. AI harus paham instruksi langsung.
Few-shot = kasih task dengan beberapa contoh.
Klasifikasikan sentiment review berikut sebagai positif/negatif/netral.
Contoh:
Review: "Produknya bagus, sangat puas!"
Sentiment: positif
Review: "Telat datang, kemasan rusak."
Sentiment: negatif
Review: "Ya begitu, standar."
Sentiment: netral
Sekarang:
Review: "Pengirimannya cepat, tapi packaging berantakan."
Sentiment:
Few-shot biasanya menang dalam:
- Konsistensi format output
- Menangkap style/tone yang sulit dijelaskan
- Edge case yang ambiguous
- Domain spesifik (jargon, konvensi internal tim)
5.2. Kenapa Few-Shot Bekerja?¶
Ingat: LLM = mesin probabilitas yang melihat pola. Saat kamu kasih contoh:
LLM melihat pola transformasi A→X, B→Y, lalu prediksi C→? ngikut pola itu.
flowchart LR
Examples["3 Contoh:<br/>Input₁ → Output₁<br/>Input₂ → Output₂<br/>Input₃ → Output₃"]
Pattern["🧠 LLM detect<br/>pola transformasi"]
NewInput["Input baru:<br/>Input₄"]
Predict["Output₄<br/>(ngikut pola)"]
Examples --> Pattern
NewInput --> Pattern
Pattern --> Predict
style Examples fill:#1a1a1a,stroke:#6366f1,color:#fafafa
style Pattern fill:#1a1a1a,stroke:#f59e0b,color:#fafafa
style NewInput fill:#1a1a1a,stroke:#ec4899,color:#fafafa
style Predict fill:#1a1a1a,stroke:#10b981,color:#fafafa
Cara baca diagram
Diagram ini menjelaskan mekanisme few-shot.
Step demi step:
- Contoh-contoh (indigo) — kamu kasih 2-5 pasang input → output yang menunjukkan pola
- LLM (amber) — internally, dia "extract" aturan dari pola itu. Bukan dengan retraining — model tidak berubah. Dia hanya pakai contoh sebagai konteks saat predict
- Input baru (pink) — kamu kasih input yang harus diproses
- Output (hijau) — LLM aplikasikan pola yang dia detect
Kunci insight:
Few-shot bukan training. Tidak ada perubahan model. Dia hanya inferensi pola dari konteks. Itulah kenapa few-shot disebut juga in-context learning — model "belajar" dari konteks prompt, bukan dari data training.
Implikasi:
- Pola yang tampak di contoh harus konsisten — kalau zigzag, LLM bingung
- Contoh harus representatif — kalau ekstrim, output mungkin tidak general
- Setelah session, "pengetahuan" hilang — perlu kasih contoh ulang
Yang sering pemula salah: kasih contoh yang terlalu mirip satu sama lain. Akibatnya pola yang ter-detect terlalu sempit. Variasi contoh penting.
5.3. Berapa Banyak Contoh?¶
Aturan praktis:
- 0-shot: tidak ada contoh. Cocok untuk task simple yang AI sudah paham.
- 1-shot: 1 contoh. Cukup untuk format yang clear.
- 3-5 shot: sweet spot untuk kebanyakan task.
- >5 shot: diminishing returns. Lebih banyak token tanpa kualitas signifikan.
Eksperimen dulu. Mulai dari 3-shot, naikkan kalau hasilnya tidak konsisten.
5.4. Anatomi Few-Shot yang Baik¶
[INSTRUKSI BREEF]
Klasifikasikan email berikut sebagai: spam, normal, atau important.
[CONTOH 1]
Email: "Selamat! Anda memenangkan iPhone 15! Klik link di bawah."
Kategori: spam
[CONTOH 2]
Email: "Hai, mau tanya progress report bulan ini ya?"
Kategori: normal
[CONTOH 3]
Email: "URGENT: server production down sejak 14:00. Butuh on-call segera."
Kategori: important
[INPUT BARU]
Email: "{{ email_baru }}"
Kategori:
Komponen pentingnya:
- Instruksi pendek di awal (1 kalimat)
- 3 contoh dengan format konsisten
- Input baru di akhir, dengan prompt continuation ("Kategori:")
Yang tidak dilakukan: kasih penjelasan setelah tiap contoh. Itu noise yang membingungkan pola.
5.5. Format Konsisten — Wajib¶
Few-shot gagal kalau format contoh tidak konsisten:
❌ Contoh inkonsisten:
Email: "Selamat! Anda menang!"
Kategori: spam
Email tentang server down (URGENT) - kategori: important
"hai mau tanya"
Type: normal
LLM bingung — formatnya mana? Pakai pola yang konsisten:
Aturan emas: kalau kamu tidak bisa kasih contoh dengan template yang sama, problem-nya bukan di few-shot — di task definition kamu yang tidak clear.
5.6. Use Case 1: Classification¶
Klasifikasi sentiment, kategori, urgency, dll.
Klasifikasikan review berikut: positif/negatif/netral.
Review: "Cepat banget pengirimannya, kualitas oke."
Sentiment: positif
Review: "Saya kecewa, barang tidak sesuai foto."
Sentiment: negatif
Review: "Standar lah, tidak ada yang spesial."
Sentiment: netral
Review: "Packaging-nya luar biasa, isi-nya so-so."
Sentiment:
Output: netral (atau campur — tergantung interpretasi).
Few-shot menang di sini karena nuansa "campur" sulit dijelaskan dengan instruksi murni.
5.7. Use Case 2: Extraction¶
Extract structured data dari teks bebas.
Extract nama, kota, dan profesi dari teks.
Teks: "Halo, saya Andi dari Jakarta, bekerja sebagai marketing manager."
Output: {"nama": "Andi", "kota": "Jakarta", "profesi": "marketing manager"}
Teks: "Sari di Bandung, lagi cari kerja sebagai desainer."
Output: {"nama": "Sari", "kota": "Bandung", "profesi": "desainer"}
Teks: "Saya Budi, programmer freelance di Yogya."
Output: {"nama": "Budi", "kota": "Yogya", "profesi": "programmer"}
Teks: "Kenalin Citra, ibu rumah tangga di Surabaya."
Output:
Output: {"nama": "Citra", "kota": "Surabaya", "profesi": "ibu rumah tangga"}
Format JSON konsisten karena setiap contoh pakai struktur sama.
5.8. Use Case 3: Style Matching¶
Tiru gaya tulisan tertentu — sulit dijelaskan dengan kata, mudah dengan contoh.
Tulis caption Instagram dengan style yang sama:
Foto: cappuccino di kafe sore
Caption: "Sore yang ngga buru-buru. Espresso double, foam tebal, cerita panjang. ☕"
Foto: jalan kaki di taman pagi
Caption: "Pagi terbaik bukan yang produktif. Yang lambat. Yang sempat lihat awan bergerak. ☀️"
Foto: makan ramen di hujan
Caption: "Hujan, kuah panas, nggak ada deadline. Standar bahagia ternyata sederhana. 🍜"
Foto: nonton sunset di pantai
Caption:
Output ngikut pola: observasi sederhana, kalimat pendek, satu emoji di akhir, vibe melankolis-positif.
Style ini sangat sulit dideskripsikan dengan instruksi. Tapi 3 contoh cukup buat AI tangkap.
5.9. Use Case 4: Translation Konsisten¶
Translate dengan pola spesifik (misalnya: nama brand jangan diterjemahkan, casual tone).
Translate Bahasa Inggris → Indonesia, casual style. Nama brand tetap.
EN: "Just got a new MacBook, super fast!"
ID: "Baru beli MacBook baru, cepet banget!"
EN: "Coffee from Starbucks today is bitter."
ID: "Kopi Starbucks hari ini pahit."
EN: "Watching Netflix all night."
ID: "Nonton Netflix semaleman."
EN: "I finally got my Tesla delivered today!"
ID:
Output: "Akhirnya Tesla saya dikirim hari ini!" — casual + nama brand utuh.
5.10. Common Mistakes¶
❌ Contoh yang Inkonsisten¶
Sudah dibahas. Format tiap contoh harus identik.
❌ Contoh yang Tidak Variatif¶
Email: "Selamat anda menang!"
Kategori: spam
Email: "Anda dapat hadiah Rp 100jt!"
Kategori: spam
Email: "Klaim hadiah Anda sekarang!"
Kategori: spam
Semua spam-style "kamu menang". Saat input ada spam dengan style berbeda (phishing, scam call), LLM mungkin tidak detect.
✓ Fix: kasih contoh yang mewakili variasi dalam kelas.
❌ Contoh yang Bias¶
Bagus: "Bagus banget, recommend!"
Bagus: "Mantap, top!"
Bagus: "Keren parah, suka!"
Buruk: "Jelek banget."
Buruk: "Kecewa."
Buruk: "Tidak sesuai harapan."
Pola: bagus → kalimat pendek dengan exclamation, buruk → kalimat pendek tanpa exclamation. LLM mungkin klasifikasi by length/style, bukan substance.
✓ Fix: contoh punya panjang dan style mirip antar kelas.
❌ Terlalu Banyak Contoh¶
Setelah 5-7 contoh, accuracy stabil. Tambahan = waste token.
✓ Fix: 3-5 contoh sweet spot.
❌ Contoh di Akhir, Bukan Awal¶
Order matters. Contoh sebelum input baru.
✓ Fix: instruksi → contoh → input baru → output.
5.11. Project: Classifier Customer Inquiry¶
Build prompt untuk auto-routing customer inquiries ke departemen yang tepat.
[ROLE]
Kamu adalah customer service router untuk e-commerce.
[TASK]
Klasifikasikan inquiry customer ke salah satu kategori:
- pengiriman: tentang status order, tracking, delay
- refund: pengembalian barang, refund uang
- produk: pertanyaan tentang spec, stock, varian
- akun: login, password, profile
- lainnya: di luar 4 kategori di atas
[CONTOH]
Inquiry: "Pesanan saya udah 5 hari belum sampai, kenapa ya?"
Kategori: pengiriman
Inquiry: "Saya mau return baju karena salah size, gimana caranya?"
Kategori: refund
Inquiry: "Stok warna merah masih ada nggak?"
Kategori: produk
Inquiry: "Lupa password, gimana reset?"
Kategori: akun
Inquiry: "Boleh request kerja sama affiliate?"
Kategori: lainnya
Inquiry: "Order ID 123 statusnya kok masih 'processing'?"
Kategori: pengiriman
[INPUT]
Inquiry: "{{ inquiry_baru }}"
Kategori:
Pakai prompt ini di pipeline customer service — auto-route ke team yang tepat. Hemat banyak waktu human router.
5.12. Latihan¶
5.1 — Build Classifier¶
Bikin few-shot classifier untuk: - Klasifikasi tweet: berita / opini / promosi / shitpost - Klasifikasi resume: junior / mid / senior - Klasifikasi product review: actionable feedback / not actionable
5.2 — Style Matcher¶
Pilih 3 caption favorit kamu (dari brand atau influencer). Pakai sebagai contoh few-shot. Tes apakah AI bisa generate caption baru dengan style yang sama.
5.3 — Extractor¶
Bikin few-shot prompt yang extract dari teks paragraf: - Nama orang - Lokasi - Tanggal - Activity/event
5.4 — Konsistensi Test¶
Pilih 1 task. Tulis prompt zero-shot. Tulis prompt 3-shot dengan contoh sama-sama. Generate output 5x masing-masing. Bandingkan konsistensi: mana yang lebih predictable?
5.5 — Tantangan: Generator yang Tirukan Style Sendiri¶
Kumpulkan 5 sample tulisan kamu sendiri (email, caption, dll). Pakai sebagai contoh. Suruh AI generate tulisan baru dengan style kamu. Apakah sudah convincing?
Few-Shot vs Zero-Shot¶
| Few-Shot | Zero-Shot |
|---|---|
| Pakai 2-5 contoh | Tanpa contoh |
| Output lebih konsisten | Tergantung instruksi |
| Boros token | Hemat token |
| Pas: nuanced task | Pas: simple task |
Anatomi Few-Shot¶
Kapan Few-Shot Menang?¶
- ✓ Classification task
- ✓ Extraction structured data
- ✓ Style matching (sulit dijelaskan kata-kata)
- ✓ Format spesifik (JSON, dll)
- ✓ Edge case ambigu
Kapan Zero-Shot Cukup?¶
- ✓ Task generic yang AI sudah paham
- ✓ Q&A umum
- ✓ Penulisan exploratory
Aturan Emas¶
- Format contoh konsisten — template yang sama
- 3-5 contoh sweet spot
- Variasi dalam tiap kelas — jangan semua sama
- Order: instruksi → contoh → input baru
- Hindari bias struktur antar kelas