01 — Prompt Engineering Fundamentals
Estimasi: 4 jam Tujuan: Paham anatomi prompt yang baik dan teknik dasar yang akan kamu pakai sepanjang karir LLM.
Kenapa Materi Ini Penting?
Prompt engineering bukan skill tambahan — ini adalah cara kamu "memprogram" LLM. Di bootcamp Dicoding nanti, hampir setiap modul melibatkan interaksi dengan model AI, dan kualitas output yang kamu dapat berbanding lurus dengan kualitas prompt yang kamu tulis. Orang yang menguasai prompt engineering bisa mendapat hasil 2-3x lebih baik dari model yang sama dibanding yang asal ketik. Ini skill yang langsung applicable di dunia kerja, karena setiap perusahaan yang pakai AI butuh orang yang tahu cara "berbicara" dengan model secara efektif.
Pembukaan
Prompt engineering = seni dan sains menyusun input ke LLM untuk dapat output terbaik.
Banyak orang anggap ini sepele ("kan tinggal nanya"). Yang serius mengerjakan ini paham: prompt yang sama dengan urutan kata berbeda bisa beda akurasi 30-40%. Untuk aplikasi production, prompt = software.
Bagian 1 — Anatomi Prompt yang Baik
Prompt bagus punya struktur. Mari kita pecah komponennya:
Template Lengkap
[ROLE] - Kamu adalah ___
[CONTEXT] - Background informasi yang model perlu tahu
[TASK] - Apa yang harus dilakukan
[INPUT] - Data yang harus diproses
[CONSTRAINTS] - Aturan/batasan
[FORMAT] - Bentuk output yang diinginkan
[EXAMPLES] - Few-shot examples (kalau ada)
Contoh Penerapan
Prompt jelek:
"Buat caption Instagram"
Prompt baik:
[ROLE] Kamu adalah copywriter senior dengan spesialisasi konten skincare.
[CONTEXT] Brand kami adalah skincare lokal Indonesia, target wanita 25-35 tahun,
urban, profesional. Brand voice: friendly, sophisticated, science-backed.
[TASK] Tulis caption Instagram untuk launching produk serum vitamin C baru.
[INPUT] Produk: Glow Serum 15% Vitamin C
- Mengurangi flek
- Mencerahkan
- 30ml, harga Rp 250.000
[CONSTRAINTS]
- Maksimal 150 kata
- Sertakan 3-5 emoji yang relevan
- Akhiri dengan call-to-action ke link bio
- Hindari kata "best", "amazing" yang generic
[FORMAT]
- 1 hook line (1 kalimat menarik perhatian)
- 1 paragraf body (manfaat + cerita)
- 1 CTA
- 5 hashtag
[EXAMPLES]
Contoh dari brand lain:
"✨ Kulit glowing tanpa drama? ..."
Bedanya: spesifik vs generic.
Bagian 2 — Prinsip Dasar
1. Spesifik Selalu Menang
❌ "Tulis tentang AI" ✅ "Tulis essay 500 kata tentang dampak AI pada pekerjaan kreatif di Indonesia, dari perspektif pekerja muda. Format akademik dengan 3 argumen utama."
2. Kasih Konteks
LLM tidak tahu yang tidak kamu kasih tahu.
❌ "Apakah pendekatan ini bagus?" ✅ "Untuk aplikasi e-commerce dengan 100k user/hari, apakah pendekatan caching dengan Redis ini bagus? [paste code]"
3. Definisikan Audience
❌ "Jelaskan blockchain" ✅ "Jelaskan blockchain untuk audiens nenek 70 tahun yang tidak tech-savvy. Pakai analogi sehari-hari."
4. Tentukan Format
❌ "Daftar fitur produk" ✅ "Daftar 10 fitur produk dalam format: nama fitur (3-5 kata) | manfaat (1 kalimat). Pakai bullet points."
5. Iterasi
Prompt pertama jarang sempurna. Iteratif:
- Lihat output
- Identifikasi yang kurang
- Refine prompt
- Coba lagi
Pro tip: simpan prompt yang berhasil di file
prompts.md. Bangun library prompt sendiri.
Bagian 3 — Zero-Shot Prompting
Zero-shot = tanya tanpa kasih contoh.
Klasifikasikan sentiment review berikut sebagai POSITIVE, NEGATIVE, atau NEUTRAL.
Review: "Produk OK lah, harga sebanding kualitas."
Sentiment:
Kapan Pakai?
- Task yang umum (klasifikasi sentiment, summarization)
- Model besar (GPT-4, Claude) yang sudah kuat di task tersebut
- Saat kamu ingin output cepat tanpa setup banyak
Tips Zero-Shot
- Definisikan kelas dengan jelas — "POSITIVE, NEGATIVE, atau NEUTRAL"
- Akhiri dengan label kosong ("Sentiment:") supaya model tahu apa yang harus diisi
- Spesifikasi output format kalau perlu
Bagian 4 — Few-Shot Prompting
Few-shot = kasih beberapa contoh dulu, baru tanya.
Klasifikasikan sentiment review berikut.
Review: "Sangat puas dengan kualitas, akan beli lagi!"
Sentiment: POSITIVE
Review: "Mengecewakan sekali, tidak sesuai gambar."
Sentiment: NEGATIVE
Review: "Lumayan, sesuai harga."
Sentiment: NEUTRAL
Review: "Produk OK lah, harga sebanding kualitas."
Sentiment:
Kenapa Few-Shot Sering Lebih Akurat?
- Model lihat pola yang kamu mau
- Format output otomatis konsisten
- Edge cases tertangani lebih baik
- Bahasa & nuansa lokal lebih tepat
Berapa Contoh?
- 1-shot: sudah lebih baik dari zero-shot
- 3-5 shot: sweet spot kebanyakan task
- >10 shot: diminishing return, dan boros token
Tips Few-Shot
- Variasikan examples — jangan semua positive saja
- Edge cases wajib ada — yang ambiguous
- Konsistensi format — semua contoh punya format sama
- Order matters — kadang model recency-biased
Bagian 5 — Role Prompting
Beri model persona spesifik. Output jadi terasa lebih ahli.
Pattern
Kamu adalah [role] dengan [pengalaman/kualifikasi].
Tugasmu adalah [task].
[Input/pertanyaan]
Contoh
Kamu adalah dokter spesialis kulit dengan 20 tahun pengalaman
di Indonesia. Bicaramu profesional tapi mudah dipahami orang awam.
Pasien tanya: "Kenapa wajah saya jerawatan terus padahal sudah pakai banyak produk?"
Berikan jawaban dengan struktur:
1. Penyebab umum (3-5)
2. Yang harus dihindari
3. Saran konkrit
Role yang Sering Dipakai
- Profesional spesifik: dokter, lawyer, accountant, marketing manager
- Educator: "guru SD untuk anak 7 tahun"
- Critic: "editor majalah dengan high standard"
- Persona lawan: "skeptical investor yang tidak mudah yakin"
Hati-hati: role tidak bikin model jadi factually correct di domain tsb. Untuk medis/legal/financial, selalu verifikasi. Role cuma bikin gaya komunikasi.
Bagian 6 — Output Structuring
LLM bisa diminta output dalam format apapun yang kamu specify.
Plain Text
Jelaskan dalam 3 paragraf...
Bullet Points
Daftarkan 5 manfaat dalam format bullet points.
- Mulai tiap point dengan emoji yang relevan
- Maksimal 1 kalimat per point
Tabel Markdown
Bandingkan 3 framework dalam tabel markdown dengan kolom:
| Framework | Pros | Cons | Best for |
JSON (Untuk Programatik)
Extract entitas dari kalimat berikut. Output JSON:
{
"person": [...],
"location": [...],
"organization": [...]
}
Kalimat: "Joko Widodo bertemu dengan Elon Musk di Bali pada acara Tesla Indonesia."
Pro tip: kalau butuh JSON, TAMBAHKAN: "Output ONLY valid JSON, no markdown code blocks, no explanation." Tanpa itu, model sering tambah
```json ... ```yang harus di-strip.
Format Konsisten dengan Schema
Berdasarkan resume berikut, ekstrak ke JSON dengan schema:
{
"name": str,
"email": str | null,
"skills": [str],
"experience_years": int
}
Resume:
[paste resume...]
Output (JSON only):
Bagian 7 — Prompt Engineering vs Conversational
Beda prompt untuk task otomatis vs chat untuk dialog.
Prompt untuk Task
Lengkap, self-contained:
[ROLE] [CONTEXT] [TASK] [INPUT] [FORMAT]
Contoh use case:
- API integration
- Batch processing
- Otomasi
Conversational
Lebih ringkas, manfaatkan multi-turn:
User: Tolong jelaskan apa itu transformer
AI: ...
User: Bisa kasih analogi yang lebih sederhana?
AI: ...
User: Sekarang bandingkan dengan RNN
Insight: untuk dapat hasil bagus di chat, bangun konteks bertahap dari pertanyaan-pertanyaan, bukan satu pertanyaan raksasa.
Bagian 8 — Common Prompt Anti-Patterns
Anti-pattern 1: Prompt Negatif
❌ "JANGAN pakai kata 'best'. JANGAN tulis lebih dari 100 kata. JANGAN lupa emoji."
LLM kadang abaikan negation. Lebih baik:
✅ "Pakai kata yang spesifik dan original. Tulis 50-100 kata. Sertakan minimal 3 emoji."
Anti-pattern 2: Caps Lock & Tanda Seru
❌ "TULIS DENGAN BAGUS!!! INI PENTING!!!"
LLM tidak peduli. Spesifikasi yang membantu, bukan emosi.
Anti-pattern 3: Prompt Terlalu Panjang Tanpa Struktur
Wall of text 1000 kata tanpa pemisah → model bingung apa yang penting.
✅ Pakai heading, bullet, atau XML-like tags:
<role>...</role>
<task>...</task>
<input>...</input>
Anti-pattern 4: Asking for Opinion on Facts
❌ "Apa lebih bagus React atau Vue?" ✅ "Bandingkan React dan Vue untuk kasus spesifik: aplikasi internal company dengan 5 developer junior, perlu rapid prototyping. Berikan rekomendasi."
LLM sangat baik di comparative analysis dengan konteks, kurang baik di opini subjektif.
Anti-pattern 5: Trust LLM Buta
LLM bisa halusinasi. Untuk fakta penting:
- Tanya source-nya
- Cross-check dengan Google/dokumentasi resmi
- Pakai RAG dengan dokumen terpercaya
Bagian 9 — Token Awareness
Setiap prompt + output kena biaya per token. Hemat kalau bisa:
Estimasi Token
- 1 token ≈ 4 karakter Inggris
- 1 token ≈ 0.75 kata Inggris
- Indonesia/Mandarin biasanya lebih banyak token per kata
Prompt yang Boros
❌
Saya akan memberikan kepada anda sebuah teks dan saya ingin anda
melakukan klasifikasi atas teks tersebut sebagai positif atau negatif.
Tolong berikan jawabannya dengan singkat...
Prompt yang Hemat
✅
Klasifikasi: POSITIVE/NEGATIVE.
Teks: ...
Label:
Sama efektif, hemat 80% token.
Hemat Output
- Set max_tokens di API call
- Spesifikasi panjang ("dalam 1 paragraf", "max 100 kata")
- Stop sequence kalau perlu
Bagian 10 — Tools untuk Prompt Engineering
Free Tier untuk Eksperimen
- Google AI Studio (aistudio.google.com) — Gemini, free tier generous, ada side-by-side compare
- Anthropic Console — Claude, ada free credit
- OpenAI Playground — GPT, butuh credit minimum $5
- Hugging Face Chat — open models gratis
Tips di Playground
- Adjust temperature (0 untuk deterministic, 0.7 default, 1.5+ kreatif)
- Try top_p sebagai alternatif temperature
- Lihat token count untuk estimasi cost
- Save successful prompts ke library
Cek Pemahaman
- Bisa sebut 7 komponen anatomi prompt?
- Tahu beda zero-shot dan few-shot?
- Bisa pakai role prompting dengan benar?
- Bisa minta output dalam format JSON?
- Tahu 5 anti-pattern yang harus dihindari?
Challenge 3.1
Challenge 1 — Prompt Battle
Untuk setiap task, bikin 3 versi prompt: zero-shot, few-shot, role-based.
Task: Klasifikasi review e-commerce ke kategori: produk, pengiriman, customer service, harga.
Test 10 review berbeda. Catat akurasi tiap versi.
Challenge 2 — Anatomi Lengkap
Bikin prompt lengkap (semua 7 komponen) untuk task: menulis email penolakan job offer dengan sopan.
Test, lihat output. Iterasi 3 kali, refine sampai output bagus.
Challenge 3 — JSON Extractor
Bikin prompt yang ekstrak info dari resume bahasa Indonesia ke JSON dengan schema:
{
"nama": str,
"umur": int | null,
"pendidikan": [{"jurusan": str, "universitas": str, "tahun": int}],
"pengalaman": [{"posisi": str, "perusahaan": str, "tahun": int}],
"skills": [str]
}
Test dengan 3 resume berbeda (boleh fiktif).
Challenge 4 — Iterative Refinement
Mulai dengan prompt jelek:
"Buat marketing copy"
Iterasi 5x sampai dapat output yang bagus untuk launching kursus online programming. Catat tiap iterasi:
- Versi prompt
- Apa yang ditambahkan
- Output kira-kira
- Why output lebih baik
Challenge 5 — Cross-Model Compare
Pakai prompt yang sama di:
- ChatGPT
- Claude
- Gemini
Catat: mana yang paling sesuai harapan? Untuk task apa?
Tujuan: develop "feel" untuk kekuatan model berbeda.
Challenge 6 — Build Prompt Library
Bikin folder prompts/ di repo GitHub kamu dengan struktur:
prompts/
├── classification/
│ ├── sentiment-id.md
│ ├── category-ecommerce.md
├── generation/
│ ├── email-template.md
│ ├── social-media-caption.md
├── extraction/
│ ├── resume-parser.md
│ └── invoice-extract.md
└── README.md
Setiap file: prompt template + 1-2 contoh hasil + tips usage.
Mulai dengan 6-8 prompt. Akan kamu kembangkan sepanjang career.
Selanjutnya: 02-prompt-techniques.md — teknik advanced: Chain-of-Thought, ReAct, prompt chaining.