Prompt Engineering
Prompt Engineering 12: Prompt untuk Pemrograman
Studi kasus pemrograman: menulis spesifikasi fungsi yang jelas, meminta penjelasan kode, debugging dengan pesan error lengkap, review kode, dan membuat tes.

Model bahasa sangat membantu dalam pemrograman, tetapi kualitas kodenya sangat bergantung pada seberapa jelas spesifikasinya. Prompt seperti "buatkan fungsi login" akan menghasilkan kode yang berjalan, tetapi belum tentu cocok dengan bahasa, framework, struktur proyek, atau aturan keamanan yang kamu pakai.
Yang akan dipelajari
- Menulis spesifikasi fungsi yang jelas
- Meminta penjelasan kode
- Debugging dengan informasi lengkap
- Meminta review kode
- Membuat tes
Spesifikasi fungsi
Prompt lemah:
Buatkan fungsi untuk membagi dataset.
Prompt yang lebih baik:
Tulis fungsi Python 3.11 bernama split_dataset.
Input:
- paths: list[str], path file citra
- labels: list[int], label setiap citra (panjang sama dengan paths)
- val_ratio: float, default 0.15
- test_ratio: float, default 0.15
- seed: int, default 42
Output: dict dengan kunci "train", "val", "test"; setiap nilai berupa
list of tuple (path, label).
Aturan:
- Pembagian stratified (proporsi label sama di setiap bagian).
- Raise ValueError jika panjang paths dan labels berbeda,
atau jika val_ratio + test_ratio >= 1.
- Gunakan scikit-learn (train_test_split); jangan pustaka lain.
- Sertakan type hints dan docstring singkat.
Setelah kode, berikan contoh pemakaian singkat.
Unsur-unsur yang membuat spesifikasi jelas:
| Unsur | Contoh |
|---|---|
| Bahasa dan versi | Python 3.11, TypeScript 5, Node 22 |
| Nama dan tanda tangan | Nama fungsi, parameter, tipe, nilai default |
| Perilaku | Aturan utama, termasuk kasus batas |
| Penanganan error | Kapan dan error apa yang dilempar |
| Batasan | Pustaka yang boleh/tidak boleh, gaya kode |
| Contoh input-output | Satu atau dua kasus konkret |
Menjelaskan kode
Jelaskan kode berikut untuk programmer yang paham Python dasar tetapi
belum pernah memakai PyTorch.
Format:
1. Ringkasan satu paragraf: apa yang dilakukan kode ini
2. Penjelasan per blok (rujuk nomor baris)
3. Bagian yang berpotensi bermasalah atau membingungkan
<kode>
[kode]
</kode>
Menyebut tingkat pembaca membuat penjelasan tidak terlalu dangkal atau terlalu teknis.
Debugging: berikan informasi lengkap
Penyebab utama debugging dengan AI gagal adalah informasi yang tidak lengkap.
Prompt lemah:
Kode saya error, kenapa ya?
Prompt yang lebih baik:
Saya mendapat error saat menjalankan skrip pelatihan.
Lingkungan: Python 3.11, PyTorch 2.x, GPU NVIDIA dengan CUDA.
Perintah yang dijalankan:
python train.py --batch-size 16
Pesan error lengkap:
```
[tempel traceback LENGKAP, bukan hanya baris terakhir]
```
Kode yang relevan:
```python
[fungsi atau bagian yang disebut di traceback]
```
Yang sudah saya coba: menurunkan batch size ke 8, error tetap sama.
Jelaskan kemungkinan penyebab, urutkan dari yang paling mungkin,
dan langkah untuk memastikan setiap kemungkinan sebelum mengubah kode.
Kenapa ini lebih baik:
- Traceback lengkap menunjukkan di mana error terjadi, bukan hanya jenisnya.
- Versi penting karena perilaku pustaka berubah antar versi.
- Yang sudah dicoba mencegah saran berulang.
- Meminta langkah memastikan membuat kamu memahami masalahnya, bukan sekadar menempel perbaikan.
Sebelum menempelkan kode atau log, hapus kunci API, kata sandi, token, dan data pribadi. Lihat materi 17.
Review kode
Review kode berikut sebagai engineer senior.
Konteks: endpoint API untuk mengunggah gambar di aplikasi Next.js
yang dipakai publik.
Prioritaskan:
1. Keamanan (validasi input, ukuran file, jenis file, path traversal)
2. Kebenaran logika dan penanganan error
3. Kemudahan pemeliharaan
Untuk setiap temuan: lokasi (baris), masalah, tingkat (kritis/sedang/rendah),
dan saran perbaikan. Jangan menuliskan ulang seluruh file.
<kode>...</kode>
Menyebut konteks penggunaan (publik, internal, prototipe) membantu model menentukan apa yang serius.
Membuat tes
Tulis unit test dengan pytest untuk fungsi split_dataset di bawah.
Cakup:
- kasus normal (proporsi tiap bagian sesuai rasio, dengan toleransi pembulatan)
- stratifikasi (proporsi label sama di setiap bagian)
- hasil sama untuk seed yang sama
- ValueError untuk panjang input berbeda dan rasio tidak valid
Jangan mengubah fungsinya. Jika menurutmu fungsi punya bug, tulis tes
yang gagal untuk bug itu dan jelaskan.
<kode>...</kode>
Verifikasi kode dari AI
- Jalankan kodenya dan tes-nya; jangan hanya membaca.
- Cek dokumentasi resmi untuk fungsi atau parameter yang tidak kamu kenal. Model bisa mengarang nama fungsi yang terdengar masuk akal (halusinasi API).
- Periksa nama paket sebelum menginstalnya. Paket yang disarankan model mungkin tidak ada, atau ada paket palsu dengan nama mirip.
- Pahami setiap baris sebelum memakainya di proyek nyata.
Coba sendiri
Ambil satu error yang pernah kamu alami. Tanyakan dengan prompt singkat ("kode saya error"), lalu dengan prompt lengkap (format debugging di atas). Bandingkan kualitas jawabannya.
Catatan bahasa Inggris
Pesan error, nama fungsi, dan dokumentasi umumnya berbahasa Inggris, jadi tempelkan apa adanya, jangan diterjemahkan. Instruksi dan penjelasan boleh berbahasa Indonesia. Untuk komentar kode, sebutkan bahasanya agar konsisten dengan proyekmu.
Kesalahan yang sering terjadi
| Kesalahan | Akibat |
|---|---|
| Tidak menyebut bahasa, versi, framework | Kode untuk versi atau pustaka lain |
| Hanya menempel baris terakhir error | Diagnosis menebak-nebak |
| Menempel kode berisi kunci API | Kebocoran rahasia |
| Memakai kode tanpa menjalankan/memahami | Bug dan celah keamanan masuk ke proyek |
| Meminta "perbaiki semuanya" | Perubahan besar yang sulit ditinjau |
Latihan
- Tulis spesifikasi untuk fungsi JavaScript yang memvalidasi format NIM (contoh: 10 digit, dua digit awal adalah angkatan).
- Lengkapi prompt debugging ini: "Fetch saya gagal di Next.js."
- Tulis prompt review untuk query SQL yang menerima input dari pengguna.
Contoh jawaban
Latihan 1
Tulis fungsi TypeScript bernama isValidNim(nim: string): boolean.
Aturan:
- Tepat 10 digit angka (tanpa spasi atau karakter lain).
- Dua digit pertama adalah tahun angkatan (2 digit terakhir tahun),
valid jika berada di rentang 15 sampai tahun sekarang.
- Tahun sekarang diambil dari parameter opsional currentYear
(default: tahun dari new Date()) agar mudah dites.
Contoh: "2312345678" valid (jika tahun sekarang >= 2023), "23123" tidak valid.
Sertakan 5 contoh pemanggilan beserta hasil yang diharapkan.
Alasannya: aturan angkatan yang bergantung pada waktu dibuat bisa diuji lewat parameter, dan contoh konkret menghilangkan ambiguitas.
Latihan 2
Tambahkan: versi Next.js dan Node.js; apakah fetch dijalankan di server atau client; kode pemanggilan fetch; pesan error lengkap dari terminal dan konsol browser; URL tujuan (tanpa token); status HTTP jika ada; dan yang sudah dicoba.
Latihan 3
Review query SQL dan kode yang membangunnya berikut.
Konteks: aplikasi web publik, MySQL 8, input berasal dari form pencarian.
Fokus:
1. Risiko SQL injection (apakah memakai parameter/placeholder?)
2. Penanganan input kosong atau sangat panjang
3. Kinerja (indeks yang dibutuhkan, LIKE dengan wildcard di depan)
Untuk setiap temuan: lokasi, risiko, tingkat, dan contoh perbaikan.
<kode>...</kode>
Diskusi (0)
Kami menyimpan nama (opsional), komentar, dan hash teknis (bukan alamat IP asli) untuk mencegah spam. Cookie fungsional dipakai agar Anda dapat mengedit atau menghapus komentar sendiri dari browser ini. Untuk permintaan penghapusan, gunakan halaman kontak.
Belum ada komentar. Mulai diskusinya.