Prompting untuk Kode: Konteks, Batasan, dan Contoh
Prompt yang samar menghasilkan kode yang terlihat benar tapi salah di kasus pinggir. Lima unsur sederhana membuat AI menulis kode yang memang kamu butuhkan.
Oleh Afa Hernandes8 menit baca
Daftar isi
- Sebelum mulai
- Langkah 1: Lihat dulu hasil prompt yang samar
- Langkah 2: Tulis tujuan dan konteksnya
- Langkah 3: Tetapkan batasannya
- Langkah 4: Beri contoh, sebaiknya dalam bentuk test
- Langkah 5: Tentukan kapan pekerjaannya selesai
- Hasil
- Template
- Kebiasaan yang membuat prompt makin efektif
- Kesalahan yang sering terjadi
- Langkah berikutnya: rilis dan amankan
- Pertanyaan yang sering diajukan
- Prompt sepanjang ini tidak memakan waktu?
- Lebih baik prompt dalam bahasa Indonesia atau Inggris?
- Perlukah “trik prompt” seperti memberi peran (“kamu adalah senior engineer”)?
- Kesimpulan
Prompt seperti “buatkan function untuk parse rupiah” hampir selalu menghasilkan kode yang jalan. Masalahnya, kode yang jalan belum tentu benar. AI tidak tahu input seperti apa yang akan diterima function itu, apa yang harus terjadi kalau inputnya aneh, library apa yang boleh dipakai, atau bagaimana gaya kode di proyekmu. Ia akan mengisi semua celah itu dengan tebakan.
Di tutorial ini kamu akan melihat langsung bedanya. Satu function yang sama ditulis dari prompt yang samar, lalu dari prompt yang lengkap dengan lima unsur: tujuan, konteks, batasan, contoh, dan definisi selesai. Hasilnya diuji dengan test sungguhan. Di akhir ada template yang bisa kamu pakai ulang, baik di chat, di asisten editor, maupun untuk agen coding.
Kalau kamu membangun aplikasi utuh tanpa latar belakang coding, panduan yang lebih cocok adalah menulis prompt untuk membuat aplikasi. Artikel ini untuk developer yang meminta AI menulis bagian-bagian kode di proyek yang sudah ada.
Sebelum mulai
- Sudah membaca cara kerja LLM: AI hanya tahu apa yang ada di context, dan bisa menebak dengan sangat meyakinkan.
- Kode contoh diuji dengan Node 24 dan test runner bawaan Node (
node --test). Siapkan proyek kecil:
mkdir rupiah && cd rupiahnpm init -ynpm pkg set type=module scripts.test="node --test"mkdir srcLangkah 1: Lihat dulu hasil prompt yang samar
Prompt: “Buatkan function JavaScript untuk parse teks rupiah jadi angka.”
Jawaban yang umum untuk prompt seperti ini adalah solusi sependek mungkin, misalnya membuang semua karakter yang bukan angka:
function parseRupiah(teks) { return Number(teks.replace(/\D/g, ""));}
for (const t of ["Rp18.000", "", "abc", "-5000", "18.5", "18.000,50"]) { console.log(JSON.stringify(t), "->", parseRupiah(t));}"Rp18.000" -> 18000"" -> 0"abc" -> 0"-5000" -> 5000"18.5" -> 185"18.000,50" -> 1800050Untuk input yang biasa, hasilnya benar. Untuk input lainnya, hasilnya bencana: kolom kosong dan teks abc dianggap Rp0, angka negatif diam-diam jadi positif, dan 18.000,50 menjadi satu juta delapan ratus ribu. Tidak ada error sama sekali. Kalau function ini dipakai di form pembayaran, kesalahannya baru ketahuan saat laporan keuangan tidak cocok.
AI tidak salah di sini. Prompt-nya memang tidak menyebut satu pun aturan tentang input yang aneh. Ia memilih jawaban yang paling masuk akal untuk pertanyaan yang samar.
Langkah 2: Tulis tujuan dan konteksnya
Tujuan menjawab “apa yang harus dilakukan kode ini”. Konteks menjawab “di mana dan untuk siapa kode ini dipakai”. Konteks yang paling sering berguna:
- Asal input. “Teks dari kolom harga di form, diketik pengguna Indonesia.” Dari kalimat ini saja, AI tahu titik adalah pemisah ribuan, bukan desimal.
- Stack dan versi. “JavaScript ES module, Node 24.” Ingat soal knowledge cutoff: tanpa versi, AI bisa memakai cara lama.
- Lokasi dan kode yang sudah ada. “Taruh di
src/rupiah.js. Proyek ini memakai JSDoc untuk dokumentasi function.” Lampirkan file yang berkaitan kalau tool-nya mendukung.
Buat function parseRupiah(teks) di src/rupiah.js.
Konteks: teks berasal dari kolom harga di form, diketik penggunaIndonesia. Proyek memakai JavaScript ES module (Node 24) dan JSDoc.Langkah 3: Tetapkan batasannya
Batasan menutup celah yang tadi diisi AI dengan tebakan. Ada dua jenis:
- Perilaku: apa yang terjadi di kasus pinggir. Di sinilah bug dari Langkah 1 dicegah.
- Teknis: apa yang boleh dan tidak boleh dipakai atau disentuh.
Aturan:- Awalan "Rp" boleh ada atau tidak, huruf besar/kecil, boleh diikuti spasi.- Titik adalah pemisah ribuan. Akhiran ",00" boleh ada dan diabaikan.- Kembalikan angka bulat (number), atau null kalau teksnya bukan nominal rupiah yang valid: kosong, bukan angka, negatif, atau punya sen selain ",00".
Batasan:- Tanpa library tambahan.- Jangan ubah file lain.Mengembalikan null adalah keputusan desain. Kamu juga bisa memilih melempar Error. Yang penting, kamu yang memutuskan dan menuliskannya, bukan AI yang menebak.
Langkah 4: Beri contoh, sebaiknya dalam bentuk test
Contoh input dan output yang diharapkan adalah cara paling jelas untuk menjelaskan maksudmu. Kalimat seperti “titik adalah pemisah ribuan” bisa ditafsirkan macam-macam, tapi "rp 1.250.000" menjadi 1250000 tidak bisa ditafsirkan lain.
Tulis contohnya langsung sebagai test. Hasilnya ada dua sekaligus: contoh untuk AI, dan alat untuk membuktikan hasilnya benar.
import { test } from "node:test";import assert from "node:assert/strict";import { parseRupiah } from "./rupiah.js";
test("format umum", () => { assert.equal(parseRupiah("Rp18.000"), 18000); assert.equal(parseRupiah("18000"), 18000); assert.equal(parseRupiah("rp 1.250.000"), 1250000); assert.equal(parseRupiah(" Rp25.000,00 "), 25000);});
test("bukan nominal yang valid", () => { assert.equal(parseRupiah(""), null); assert.equal(parseRupiah("abc"), null); assert.equal(parseRupiah("-5000"), null); assert.equal(parseRupiah("18.5"), null); assert.equal(parseRupiah("18.000,50"), null);});Perhatikan bahwa test kedua berisi persis input-input yang tadi membuat versi naif gagal. Saat menulis contoh, utamakan kasus pinggir. Kasus yang biasa hampir selalu dijawab benar tanpa perlu dicontohkan.
Langkah 5: Tentukan kapan pekerjaannya selesai
Unsur terakhir adalah definisi selesai: kondisi yang bisa dicek, bukan perasaan “kelihatannya sudah benar”.
Contoh perilaku yang diharapkan ada di src/rupiah.test.js.Selesai kalau `npm test` lulus semua. Jangan ubah file test.Untuk agen coding, definisi selesai inilah yang membuatnya bisa memeriksa hasil kerjanya sendiri: ia menjalankan npm test, membaca hasilnya, dan memperbaiki sampai lulus. Untuk chat biasa, kamu yang menjalankan test-nya.
Kalimat “jangan ubah file test” penting. Tanpa itu, AI kadang “menyelesaikan” tugas dengan mengubah test supaya cocok dengan kodenya, bukan sebaliknya.
Hasil
Dengan prompt lengkap (gabungan bagian 1, 2, dan 3, ditambah file test), jawaban yang memenuhi semua aturan berbentuk seperti ini:
/** * Ubah teks nominal rupiah dari input pengguna menjadi angka bulat. * Mengembalikan null kalau teksnya bukan nominal rupiah yang valid. * @param {string} teks * @returns {number | null} */export function parseRupiah(teks) { const bersih = teks.trim().replace(/^rp\s*/i, ""); const cocok = /^(\d{1,3}(?:\.\d{3})*|\d+)(?:,00)?$/.exec(bersih); if (!cocok) { return null; } return Number(cocok[1].replaceAll(".", ""));}npm test✔ format umum✔ bukan nominal yang validℹ pass 2ℹ fail 0Kode yang dihasilkan AI untukmu bisa berbeda bentuknya. Ingat sifat sampling: prompt yang sama bisa menghasilkan kode yang berbeda. Itu tidak masalah. Yang menentukan benar atau tidaknya adalah test, bukan kemiripan dengan contoh di sini.
Pahami kodenya sebelum diterima. Regex di atas, misalnya, cukup padat. Minta AI menjelaskannya bagian demi bagian, lalu cocokkan dengan aturanmu: \d{1,3}(?:\.\d{3})* menerima angka dengan titik ribuan seperti 1.250.000, |\d+ menerima angka tanpa titik seperti 18000, dan (?:,00)? membolehkan akhiran ,00. Kalau ada bagian yang tidak bisa kamu jelaskan, kamu belum siap menerimanya.
Template
Tujuan:[Apa yang harus dibuat atau diubah, dalam satu atau dua kalimat.Sebut nama function/komponen dan lokasi filenya.]
Konteks:- Stack dan versi: [mis. TypeScript, Node 24, Astro 7]- Asal input / siapa pemakainya: [...]- Kode terkait: [file yang perlu dibaca, pola yang sudah dipakai di proyek]
Aturan perilaku:- [Kasus normal]- [Kasus pinggir: kosong, negatif, terlalu panjang, format salah, ...]- [Apa yang terjadi kalau gagal: null, Error, pesan untuk pengguna]
Batasan:- [Library yang boleh/tidak boleh dipakai]- [File yang tidak boleh diubah]- [Aturan keamanan: mis. pakai prepared statement, jangan simpan secret di kode]
Contoh:[Pasangan input -> output, atau file test yang harus lulus]
Selesai kalau:[Kondisi yang bisa dicek: test lulus, build berhasil, tidak ada error di console]Tidak semua bagian perlu diisi untuk setiap permintaan. Untuk perubahan satu baris, satu kalimat sudah cukup. Semakin besar tugasnya dan semakin penting kodenya, semakin banyak bagian yang sebaiknya diisi.
Kebiasaan yang membuat prompt makin efektif
- Minta rencana dulu untuk tugas besar. “Jelaskan rencanamu dulu, jangan ubah kode apa pun.” Memperbaiki rencana jauh lebih murah daripada memperbaiki kode.
- Persilakan AI bertanya. “Kalau ada yang ambigu, tanyakan dulu sebelum menulis kode.” Ini sering memunculkan kasus pinggir yang belum kamu pikirkan.
- Satu tugas per prompt. Permintaan yang menggabungkan tiga fitur sekaligus lebih sering gagal di salah satunya, dan lebih sulit direview.
- Saat gagal, tempel bukti, jangan deskripsi. “Test
bukan nominal yang validgagal, output-nya: …” jauh lebih berguna daripada “masih salah”. - Tulis aturan yang berulang di file aturan proyek. Konvensi seperti “pakai JSDoc” atau “jalankan
npm testsebelum selesai” cukup ditulis sekali di file instruksi yang dibaca asisten atau agenmu setiap sesi.
Kesalahan yang sering terjadi
- Menganggap AI tahu proyekmu. Tanpa konteks, AI memakai konvensi “rata-rata internet”, bukan konvensi timmu.
- Hanya memberi contoh yang mudah. Contoh
"Rp18.000"tidak mengajarkan apa pun. Contoh"-5000"dan""yang mencegah bug. - Menerima kode karena test-nya lulus, tanpa membaca test-nya. Kalau test-nya juga ditulis AI, periksa bahwa setiap test benar-benar menggambarkan aturan yang kamu mau.
- Lupa batasan keamanan. Untuk kode yang menyentuh database, login, atau input pengguna, tulis aturannya secara eksplisit. Daftar periksanya ada di checklist keamanan aplikasi buatan AI.
Langkah berikutnya: rilis dan amankan
Function seperti parseRupiah biasanya berjalan di browser untuk memberi umpan balik cepat ke pengguna. Tapi validasi di browser bisa dilewati siapa saja. Saat nominal ini dipakai untuk transaksi, validasi yang sama wajib dijalankan lagi di server. Kabar baiknya, function dan test yang sama bisa dipakai di kedua tempat. Alasan lengkapnya ada di OWASP Top 10.
Sebelum merilis, pastikan test-mu juga berjalan otomatis, bukan hanya di laptopmu. Langkah pertamanya: simpan kode dan test-nya di GitHub seperti di Git dan GitHub, lalu jalankan npm test sebelum setiap deploy.
Pertanyaan yang sering diajukan
Prompt sepanjang ini tidak memakan waktu?
Untuk function sekecil ini, menulis prompt lengkap mungkin terasa lebih lama daripada menulis kodenya sendiri. Tapi sebagian besar isinya, seperti aturan, kasus pinggir, dan test, memang harus kamu pikirkan juga kalau menulis sendiri. Prompt hanya memaksamu menuliskannya. Untuk tugas yang lebih besar, waktu yang dihemat jauh lebih banyak.
Lebih baik prompt dalam bahasa Indonesia atau Inggris?
Model-model besar umumnya memahami bahasa Indonesia dengan baik. Yang lebih penting adalah kejelasan isinya. Tulis istilah teknis, nama function, dan pesan error persis seperti aslinya, apa pun bahasa kalimat di sekitarnya.
Perlukah “trik prompt” seperti memberi peran (“kamu adalah senior engineer”)?
Efeknya jauh lebih kecil dibanding konteks, batasan, dan contoh yang jelas. Kalau prompt-mu sudah memuat kelima unsur di artikel ini, kalimat pembuka seperti itu hampir tidak mengubah apa pun.
Kesimpulan
Prompt yang samar membuat AI menebak, dan tebakannya paling sering meleset di kasus pinggir. Lima unsur menutup celah itu: tujuan, konteks, batasan, contoh (sebaiknya dalam bentuk test), dan definisi selesai yang bisa dicek. Test yang sama kemudian membuktikan apakah hasilnya benar, apa pun bentuk kode yang dihasilkan.
Dengan ini Level 1 jalur Developer + AI selesai: kamu sudah memahami cara kerja LLM, asisten di editor, agen coding, dan cara memberi instruksi yang jelas. Level berikutnya membahas cara membuat hasil AI bisa dipercaya di codebase sungguhan, dimulai dari review dan testing.



