Home Blog Series C C03
Series C: Prompt / Context / Harness / Loop Engineering · C03 AI & Agentic Systems 27 Oktober 2025 8 min read

Few-Shot vs Zero-Shot vs Chain-of-Thought — Kapan Masing-Masing

Menambahkan 'think step by step' ke semua prompt membuat sistem lebih lambat dan lebih mahal — tapi tidak selalu lebih akurat. Ini kapan masing-masing teknik benar-benar membantu.

RM
Ryan Muliadi
Digital Systems Architect · Ryzen Digital Systems

"Chain-of-thought prompting" adalah buzzword yang sering disebut tapi jarang dipahami dengan benar. Saya pernah lihat developer menambahkan "think step by step" ke setiap prompt — hasilnya: lebih lambat, lebih mahal, tapi tidak lebih akurat untuk task yang tidak butuh reasoning.

Ini breakdown kapan masing-masing teknik benar-benar membantu.

Zero-Shot — Default yang Sering Cukup

Zero-shot artinya tidak ada contoh — hanya instruksi. Untuk task yang straightforward dan sudah ada di training data LLM, ini cukup dan paling efisien.

Python · Zero-shot examples
# Zero-shot — efisien untuk task sederhana
zero_shot = """Klasifikasikan sentimen kalimat berikut sebagai POSITIF, NEGATIF, atau NETRAL.
Hanya balas dengan satu kata.

Kalimat: "Pelayanannya lumayan tapi harganya terlalu mahal""""
# Output yang diharapkan: NEGATIF
# Akurat? Ya. Perlu contoh? Tidak.

# Zero-shot TIDAK cukup untuk task ini:
zero_shot_fail = """Ekstrak semua entitas dari teks berikut dalam format JSON
dengan keys: orang, organisasi, lokasi, tanggal."""
# LLM tidak tahu persis format JSON yang Anda inginkan
# → Butuh few-shot

Few-Shot — Tunjukkan, Jangan Cuma Bilang

Few-shot efektif ketika: output format sangat spesifik, task membutuhkan nuance yang susah dijelaskan dengan kata-kata, atau ketika zero-shot menghasilkan variasi yang tidak diinginkan.

Prinsip Few-Shot yang Sering Dilupakan
Contoh yang Anda berikan harus merepresentasikan distribusi input yang sebenarnya — bukan hanya kasus yang mudah. Jika mayoritas input di production adalah edge case, contoh easy case tidak membantu.
Python · Few-shot dengan contoh yang representatif
few_shot_prompt = """Ekstrak entitas dari teks dan return sebagai JSON.

Input: "Budi Santoso dari PT Maju Jaya menandatangani kontrak pada 15 Januari 2025 di Jakarta."
Output: {"orang": ["Budi Santoso"], "organisasi": ["PT Maju Jaya"], "lokasi": ["Jakarta"], "tanggal": ["15 Januari 2025"]}

Input: "Pertemuan antara Direktur Utama dan perwakilan vendor berlangsung kemarin."
Output: {"orang": [], "organisasi": [], "lokasi": [], "tanggal": ["kemarin"]}

Input: "Surat ini ditujukan kepada Yth. Ibu Dewi Rahayu di Surabaya"
Output: {"orang": ["Dewi Rahayu"], "organisasi": [], "lokasi": ["Surabaya"], "tanggal": []}

Input: "{USER_INPUT}"
Output:"""

# Contoh kedua menunjukkan: LLM tidak boleh "mengisi" entitas yang tidak ada
# Contoh ketiga menunjukkan cara handle title/sapaan

Chain-of-Thought — Kapan Benar-Benar Membantu

CoT bekerja dengan meminta LLM "berpikir keras" sebelum menjawab. Ini meningkatkan akurasi untuk task yang butuh multi-step reasoning — tapi tidak semua task butuh ini.

Task TypeCoT Membantu?Alasan
Matematika, logika, code debugging✓ Sangat membantuMulti-step reasoning — tiap langkah perlu benar
Analisis dokumen kompleks✓ MembantuPerlu synthesize informasi dari berbagai bagian
Klasifikasi sentimen sederhana✗ Tidak perluPattern recognition, bukan reasoning — CoT hanya tambah latency
Ekstraksi data terstruktur△ KadangJika formatnya kompleks, CoT bantu — kalau simpel, tidak perlu
Terjemahan✗ Tidak perluLLM sudah sangat baik tanpa CoT untuk bahasa yang well-represented
Python · CoT untuk Analisis Keputusan Bisnis
cot_prompt = """Analisis apakah perusahaan ini layak sebagai mitra bisnis berdasarkan data berikut.

Data perusahaan: {company_data}

Sebelum memberikan rekomendasi akhir, pikirkan langkah demi langkah:
1. Evaluasi kondisi keuangan berdasarkan data yang ada
2. Identifikasi risiko yang terlihat
3. Pertimbangkan potensi upside
4. Synthesize semua faktor

Setelah analisis lengkap, berikan rekomendasi: LAYAK / TIDAK LAYAK / PERLU INVESTIGASI LEBIH LANJUT
beserta 3 alasan utama."""

# Bandingkan dengan tanpa CoT:
no_cot = "Apakah perusahaan ini layak sebagai mitra? Data: {company_data}"
# Lebih cepat, tapi untuk keputusan bisnis penting — akurasi lebih rendah

ReAct vs CoT vs ToT — Mana yang Kapan

01
CoT (Chain of Thought) — untuk single-turn reasoning
LLM berpikir step-by-step dalam satu response sebelum menjawab. Terbaik untuk: analisis, kalkulasi, keputusan yang butuh pertimbangan banyak faktor. Single turn, tidak ada tool calling.
02
ReAct (Reason + Act) — untuk agent dengan tools
LLM bergantian antara Reason (berpikir) dan Act (panggil tool). Setiap langkah: Thought → Action → Observation → Thought berikutnya. Ini yang dipakai di Series A untuk AI Agent. Terbaik untuk: agentic workflow dengan external tools.
03
ToT (Tree of Thought) — untuk problem dengan banyak kemungkinan solusi
LLM menjelajahi beberapa jalur reasoning secara paralel, mengevaluasi masing-masing, dan memilih yang terbaik. Powerful tapi mahal — 3–5x lebih banyak token dari CoT. Gunakan hanya untuk keputusan kritis yang butuh exhaustive exploration.
💡 Indonesian Language CoT Nuance

Untuk CoT dalam Bahasa Indonesia, eksplisit minta LLM untuk berpikir dalam Bahasa Indonesia: "Pikirkan dalam Bahasa Indonesia, langkah demi langkah." Tanpa ini, beberapa LLM melakukan internal reasoning dalam Inggris dan "menerjemahkan" hasilnya — ini bisa introduce subtle errors untuk konten yang sangat Indonesia-specific.

Structured Output — Format yang Bisa Diparsing

Untuk aplikasi yang butuh JSON output yang konsisten, gunakan JSON mode atau function calling daripada berharap LLM selalu menghasilkan JSON yang valid dari instruksi teks:

Python · Structured Output dengan Pydantic
from pydantic import BaseModel
from langchain_anthropic import ChatAnthropic

class ComplaintAnalysis(BaseModel):
    category: str
    priority: str  # HIGH, MEDIUM, LOW
    needs_more_info: bool
    response: str

# Claude menghasilkan output yang guaranteed valid sesuai schema
llm = ChatAnthropic(model="claude-3-5-haiku-20241022")
structured_llm = llm.with_structured_output(ComplaintAnalysis)

result = structured_llm.invoke("Atap kamar saya bocor parah saat hujan")
# result.category, result.priority, etc. — guaranteed ada dan bertipe benar
# Tidak perlu try/except json.loads atau validasi manual

Gunakan teknik yang paling sederhana yang bekerja: zero-shot → few-shot → CoT → ReAct. Jangan langsung ke CoT hanya karena terdengar lebih canggih — untuk task sederhana, zero-shot lebih murah dan cukup akurat.

Kesimpulan

Zero-shot untuk task yang clear dan simple. Few-shot ketika format output sangat spesifik atau ada nuance yang susah dideskripsikan. CoT untuk multi-step reasoning. ReAct untuk agent dengan tools. ToT hanya untuk keputusan kritis yang butuh exhaustive exploration.