ngodingdulu
AI & Vibe CodingTutorialPemula

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

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:
Terminal
mkdir rupiah && cd rupiah
npm init -y
npm pkg set type=module scripts.test="node --test"
mkdir src

Langkah 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:

naif.js
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));
}
Output
"Rp18.000" -> 18000
"" -> 0
"abc" -> 0
"-5000" -> 5000
"18.5" -> 185
"18.000,50" -> 1800050

Untuk 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.
Prompt (bagian 1)
Buat function parseRupiah(teks) di src/rupiah.js.
Konteks: teks berasal dari kolom harga di form, diketik pengguna
Indonesia. 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.
Prompt (bagian 2)
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.

src/rupiah.test.js
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”.

Prompt (bagian 3)
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:

src/rupiah.js
/**
* 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(".", ""));
}
Terminal
npm test
Output (diringkas)
✔ format umum
✔ bukan nominal yang valid
ℹ pass 2
ℹ fail 0

Kode 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

Template prompt untuk kode
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 valid gagal, output-nya: …” jauh lebih berguna daripada “masih salah”.
  • Tulis aturan yang berulang di file aturan proyek. Konvensi seperti “pakai JSDoc” atau “jalankan npm test sebelum 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.

Bagikan:WhatsAppTelegramXFacebook
Ilustrasi kalimat saya suka kopi diikuti dua kandidat kata berikutnya dengan batang peluang: susu 75 persen dan hitam 25 persen
AIKonsep

Cara Kerja LLM untuk Developer

Kamu tidak perlu paham matematikanya. Cukup lima sifat dasar LLM yang menjelaskan kenapa asisten AI kadang brilian, kadang ngawur dengan percaya diri.

30 Oktober 20269 mnt

Ilustrasi kaca pembesar di samping kode buatan AI yang dibagi menjadi tiga bagian berlabel menyimpan data, menampilkan daftar, dan memeriksa input
AITutorial

Memahami Kode Buatan AI Tanpa Jadi Programmer

Kamu tidak harus bisa menulis kodenya. Tapi kamu harus tahu bagian mana melakukan apa, supaya bisa memberi perintah yang tepat dan curiga saat ada yang aneh.

4 Mei 20266 mnt

Enter bukaEsc tutupHalaman pencarian