Lewati ke isi

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.

Klasifikasikan sentiment review ini: "Pengirimannya cepat, tapi packaging berantakan."

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:

A → X
B → Y
C → ?

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:

  1. Contoh-contoh (indigo) — kamu kasih 2-5 pasang input → output yang menunjukkan pola
  2. LLM (amber) — internally, dia "extract" aturan dari pola itu. Bukan dengan retraining — model tidak berubah. Dia hanya pakai contoh sebagai konteks saat predict
  3. Input baru (pink) — kamu kasih input yang harus diproses
  4. 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:

  1. Instruksi pendek di awal (1 kalimat)
  2. 3 contoh dengan format konsisten
  3. 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:

✓ Contoh konsisten:

Email: "[isi]"
Kategori: [kategori]

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

[20 contoh]

Setelah 5-7 contoh, accuracy stabil. Tambahan = waste token.

Fix: 3-5 contoh sweet spot.

❌ Contoh di Akhir, Bukan Awal

[Task] → Klasifikasikan email ini.
[Input] → "{{ email_baru }}"
[Contoh-contoh di sini]
[Output:]

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

[Instruksi singkat]

[Contoh 1]
[Contoh 2]
[Contoh 3]

[Input baru]
[Output:]

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

  1. Format contoh konsisten — template yang sama
  2. 3-5 contoh sweet spot
  3. Variasi dalam tiap kelas — jangan semua sama
  4. Order: instruksi → contoh → input baru
  5. Hindari bias struktur antar kelas

Pattern JSON Few-Shot

Extract data dari teks.

Teks: "..."
Output: {"k": "v"}

Teks: "..."
Output: {"k": "v"}

Teks: "{{ baru }}"
Output:

← Bab 4 Lanjut Bab 6 →

Diadaptasi dari modul "Few-Shot Prompting" dari Learn Prompting. Dilisensikan Apache 2.0.