S10
IF1402 Praktikum
Sesi 10 - Prompt Engineering
Sesi 10 dari 16

Prompt Engineering

Kalau sesi 9 mengajarkan bahwa LLM itu seperti asisten yang telah membaca sangat banyak teks, maka sesi 10 mengajarkan cara berbicara kepada asisten itu agar hasilnya tepat. Di sinilah prompt engineering menjadi kunci. Prompt bukan sekadar pertanyaan biasa. Prompt adalah cara kita menyusun instruksi, konteks, contoh, batasan, dan format jawaban agar model bekerja sesuai tujuan.

Mahasiswa sering merasa LLM "kadang pintar, kadang aneh". Sering kali penyebabnya bukan semata-mata karena modelnya, tetapi karena prompt yang terlalu umum, terlalu singkat, atau terlalu kabur. Prompt yang baik ibarat memberi peta yang jelas kepada pengemudi. Tanpa peta, ia mungkin tetap berjalan, tetapi belum tentu sampai ke tujuan yang benar.

Fokus: menulis instruksi efektif Bahas zero-shot sampai few-shot Output: prompt yang lebih terarah
Pertanyaan utama sesi ini Mengapa dua orang bisa memakai model yang sama, tetapi kualitas jawabannya jauh berbeda?
Inti jawabannya Karena kualitas instruksi sangat memengaruhi fokus, gaya, format, dan batas jawaban yang dihasilkan model.
Hasil belajar Mahasiswa mampu menulis prompt yang lebih jelas, lebih terarah, dan lebih konsisten untuk tugas NLP dan AI generatif.

Apa itu prompt engineering

Prompt engineering adalah proses merancang instruksi yang efektif agar model bahasa memberi keluaran yang sesuai dengan kebutuhan. Fokusnya bukan sekadar bertanya, tetapi mengatur konteks, tujuan, gaya bahasa, batas topik, dan format jawaban. Pada praktiknya, prompt engineering sering menjadi pembeda antara hasil yang biasa saja dengan hasil yang benar-benar membantu.

Perumpamaan mudah

Bayangkan mahasiswa diminta mengerjakan tugas, tetapi dosen hanya berkata, "kerjakan yang baik". Instruksi itu terlalu umum. Mahasiswa bisa bingung. Sekarang bandingkan dengan instruksi yang lebih jelas: "buat ringkasan 2 paragraf, gunakan bahasa sederhana, berikan 1 contoh, dan fokus pada kelebihan serta kekurangannya". Hasilnya tentu biasanya lebih rapi. Prompt bekerja dengan semangat yang sama.

Komponen prompt yang baik

1

Peran

Beritahu model ia berperan sebagai apa, misalnya dosen, tutor, analis sentimen, atau ekstraktor informasi.

2

Tugas

Jelaskan apa yang harus dikerjakan, misalnya merangkum, mengklasifikasi, menjawab, atau mengekstrak.

3

Konteks

Tambahkan informasi yang relevan agar model tidak menebak terlalu bebas.

4

Format jawaban

Tentukan bentuk output, misalnya 1 paragraf, JSON sederhana, tabel teks, atau label tunggal.

Zero-shot, one-shot, dan few-shot

Zero-shot berarti kita meminta model menyelesaikan tugas tanpa memberi contoh. One-shot berarti kita memberi satu contoh. Few-shot berarti kita memberi beberapa contoh. Semakin rumit tugasnya, contoh yang tepat sering membuat hasil lebih konsisten.

Zero-shot

Lebih cepat dan ringkas. Cocok untuk tugas sederhana atau ketika model sudah cukup paham instruksi.

One-shot

Memberi satu contoh agar model punya gambaran bentuk jawaban yang diharapkan.

Few-shot

Memberi beberapa contoh. Sangat berguna saat label, gaya, atau struktur jawaban harus konsisten.

Mengapa prompt perlu spesifik

Prompt yang terlalu umum membuat model harus menebak terlalu banyak hal sendiri. Akibatnya jawaban bisa melebar, tidak fokus, atau terlalu normatif. Sebaliknya, prompt yang terlalu panjang dan penuh detail tidak penting juga bisa membuat model kehilangan fokus. Jadi inti prompt engineering adalah menemukan keseimbangan: cukup jelas, cukup fokus, dan cukup terarah.

Bandingkan dua prompt ini. Prompt pertama: "Jelaskan AI". Prompt kedua: "Jelaskan AI generatif untuk mahasiswa semester 2 dalam 2 paragraf dengan 1 perumpamaan sederhana dan 1 contoh penggunaan di kampus". Biasanya prompt kedua memberi hasil jauh lebih tepat.

Praktikum 1: fungsi helper untuk menguji banyak prompt

Sebelum mencoba berbagai strategi prompting, buat dulu fungsi helper agar eksperimen lebih rapi. Dengan begitu mahasiswa dapat lebih fokus membandingkan isi prompt dan hasilnya, bukan sibuk menulis ulang kode koneksi API.

import requests

API_KEY = "gsk_XXXX"
MODEL = "llama-3.1-8b-instant"
URL = "https://api.groq.com/openai/v1/chat/completions"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

def run_prompt(system_prompt, user_prompt, temperature=0.2):
    payload = {
        "model": MODEL,
        "temperature": temperature,
        "messages": [
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": user_prompt}
        ]
    }
    response = requests.post(URL, headers=headers, json=payload)
    data = response.json()
    return data["choices"][0]["message"]["content"]

system_prompt = "Anda adalah asisten pembelajaran NLP dan AI generatif."
user_prompt = "Jelaskan apa itu prompt engineering dengan bahasa sederhana."

hasil = run_prompt(system_prompt, user_prompt)
print(hasil)

Praktikum 2: membandingkan prompt lemah dan prompt kuat

Ini latihan yang sangat penting. Mahasiswa bisa langsung melihat bahwa model yang sama akan memberi kualitas jawaban berbeda ketika prompt diperjelas.

prompt_lemah = "Jelaskan prompt engineering."

prompt_kuat = "Jelaskan prompt engineering untuk mahasiswa semester awal dalam 2 paragraf. Gunakan bahasa sederhana, berikan 1 perumpamaan sehari-hari, dan akhiri dengan 1 contoh penggunaan pada tugas kuliah."

system_prompt = "Anda adalah dosen pembimbing yang suka menjelaskan dengan bahasa mudah dipahami."

hasil_lemah = run_prompt(system_prompt, prompt_lemah)
hasil_kuat = run_prompt(system_prompt, prompt_kuat)

print("=== Hasil prompt lemah ===")
print(hasil_lemah)
print("\n=== Hasil prompt kuat ===")
print(hasil_kuat)

Setelah menjalankan ini, mahasiswa dapat diminta menilai mana yang lebih jelas, lebih relevan, dan lebih enak dibaca. Diskusi seperti ini sangat membantu mereka memahami mengapa prompt engineering penting.

Praktikum 3: zero-shot, one-shot, dan few-shot untuk klasifikasi

Berikut contoh tugas klasifikasi kategori keluhan mahasiswa. Ini sangat cocok karena hasilnya bisa langsung dibandingkan secara kasat mata.

teks_uji = "Aplikasi e-learning sering keluar sendiri saat saya mengunggah tugas."

# zero-shot
prompt_zero = f"Klasifikasikan teks berikut ke salah satu label: akademik, teknis, administrasi. Jawab hanya labelnya. Teks: {teks_uji}"
print("Zero-shot:")
print(run_prompt("Anda adalah pengklasifikasi teks.", prompt_zero))

# one-shot
prompt_one = f"Contoh:\nTeks: Jadwal sidang skripsi saya belum keluar.\nLabel: akademik\n\nSekarang klasifikasikan. Jawab hanya labelnya.\nTeks: {teks_uji}"
print("\nOne-shot:")
print(run_prompt("Anda adalah pengklasifikasi teks.", prompt_one))

# few-shot
prompt_few = f"Contoh 1:\nTeks: Website kampus error saat login.\nLabel: teknis\n\nContoh 2:\nTeks: Saya ingin tahu prosedur pembayaran ulang.\nLabel: administrasi\n\nContoh 3:\nTeks: Nilai mata kuliah saya belum tampil.\nLabel: akademik\n\nSekarang klasifikasikan teks berikut. Jawab hanya labelnya.\nTeks: {teks_uji}"
print("\nFew-shot:")
print(run_prompt("Anda adalah pengklasifikasi teks.", prompt_few))

Latihan ini sangat efektif untuk menunjukkan bahwa pemberian contoh sering membuat model lebih konsisten, terutama saat label tampak mirip atau ambigu.

Praktikum 4: prompt untuk ekstraksi informasi

LLM tidak selalu harus membuat paragraf. Kadang justru kita ingin jawaban yang terstruktur dan hemat kata. Pada kasus seperti ini, prompt sebaiknya memaksa model memberi format yang jelas.

teks = "Mahasiswa bernama Rina mengeluhkan aplikasi presensi online karena tidak bisa mendeteksi lokasi. Keluhan dikirim pada hari Senin dan meminta bantuan tim teknis kampus."

prompt_ekstraksi = f"Ekstrak informasi dari teks berikut. Tulis hasil dalam format JSON sederhana dengan kunci nama, masalah, hari, dan tujuan_permohonan. Teks: {teks}"

hasil = run_prompt(
    "Anda adalah sistem ekstraksi informasi. Jawab singkat dan langsung ke isi.",
    prompt_ekstraksi
)
print(hasil)

Dari sini mahasiswa belajar bahwa prompt bisa mengarahkan model untuk menghasilkan bentuk output yang lebih siap dipakai oleh program lain.

Praktikum 5: prompt yang membatasi topik pembahasan

Contoh ini sangat dekat dengan widget diskusi LLM pada modul web ini. Tujuannya adalah menjaga agar model tetap membahas topik perkuliahan dan menolak pertanyaan di luar ruang lingkup.

system_prompt = "Anda adalah asisten pembelajaran untuk mata kuliah Pembelajaran Mesin untuk Teks dan AI Generatif. Hanya jawab pertanyaan yang berkaitan dengan NLP, text preprocessing, representasi teks, klasifikasi teks, evaluasi model, embedding, transformer, LLM, prompt engineering, semantic search, RAG, dan etika AI. Jika pertanyaan di luar topik, jawab tepat dengan kalimat: Maaf Pembahasan diluar Tema. Jawab tanpa markdown, gunakan paragraf biasa yang mudah dipahami dan beri perumpamaan jika relevan."

pertanyaan_1 = "Apa perbedaan TF-IDF dan embedding?"
pertanyaan_2 = "Siapa pemain terbaik liga sepak bola tahun ini?"

print("Pertanyaan 1:")
print(run_prompt(system_prompt, pertanyaan_1))
print("\nPertanyaan 2:")
print(run_prompt(system_prompt, pertanyaan_2))

Latihan ini menunjukkan bahwa prompt tidak hanya dipakai untuk memperkaya isi jawaban, tetapi juga untuk menetapkan pagar pembahasan.

Praktikum 6: prompt untuk membuat penjelasan yang tidak monoton

Sering kali jawaban model benar, tetapi terasa kaku dan membosankan. Kita bisa memperbaikinya lewat instruksi gaya. Di sinilah prompt engineering menjadi sangat terasa manfaatnya dalam aplikasi pendidikan.

pertanyaan = "Jelaskan cosine similarity."

prompt_biasa = pertanyaan

prompt_menarik = "Jelaskan cosine similarity untuk mahasiswa semester awal. Gunakan bahasa sederhana, berikan satu perumpamaan sehari-hari, dan satu contoh kecil pada perbandingan dua kalimat. Jawab dalam paragraf biasa tanpa bullet dan tanpa markdown."

system_prompt = "Anda adalah tutor yang ramah dan sabar."

print("=== Jawaban biasa ===")
print(run_prompt(system_prompt, prompt_biasa))
print("\n=== Jawaban dengan instruksi gaya ===")
print(run_prompt(system_prompt, prompt_menarik))

Mahasiswa bisa langsung melihat bahwa instruksi gaya sangat berpengaruh terhadap kenyamanan membaca jawaban.

Praktikum 7: contoh implementasi pembatasan topik di PHP

Bagian ini relevan langsung dengan web modul. Walaupun pada praktik nyata logika pembatasan bisa dibuat lebih kuat, contoh berikut cukup baik untuk memperlihatkan integrasi prompt engineering dengan aplikasi PHP.

<?php
$allowedTopics = 'NLP, text preprocessing, Bag of Words, n-gram, TF-IDF, cosine similarity, klasifikasi teks, evaluasi model, embedding, transformer, LLM, prompt engineering, semantic search, RAG, etika AI';

$systemPrompt = "Anda adalah asisten pembelajaran untuk mata kuliah IF1402. Hanya jawab pertanyaan yang berhubungan dengan topik berikut: {$allowedTopics}. Jika pertanyaan di luar topik, jawab tepat: Maaf Pembahasan diluar Tema. Jawab tanpa markdown, gunakan paragraf biasa, jelas, dan berikan contoh sederhana bila cocok.";

$userQuestion = $_POST['message'] ?? '';

$payload = [
    'model' => 'llama-3.1-8b-instant',
    'temperature' => 0.3,
    'messages' => [
        ['role' => 'system', 'content' => $systemPrompt],
        ['role' => 'user', 'content' => $userQuestion]
    ]
];
?>

Kesalahan umum saat menulis prompt

Kesalahan pertama adalah prompt terlalu singkat dan terlalu umum. Kesalahan kedua adalah meminta terlalu banyak hal sekaligus tanpa urutan yang jelas. Kesalahan ketiga adalah lupa memberi batas output, sehingga model menjawab terlalu panjang atau melebar. Kesalahan keempat adalah tidak memberi contoh saat tugas cukup ambigu. Kesalahan kelima adalah tidak menyebut siapa target pembacanya, padahal gaya penjelasan untuk mahasiswa semester awal tentu berbeda dengan gaya untuk peneliti.

Jika hasil LLM kurang bagus, jangan buru-buru menyalahkan model. Coba periksa dulu prompt-nya. Sering kali perbaikan kecil pada instruksi justru menghasilkan perubahan besar pada kualitas jawaban.

Diskusi Mahasiswa dengan Sistem LLM

Tanyakan materi yang masih terkait Pembelajaran Mesin untuk Teks dan AI Generatif.

Siap Diskusi
Halo, saya siap membantu memahami materi praktikum, konsep, kode, studi kasus, UTS, UAS, dan mini project pada mata kuliah ini. Silakan tulis pertanyaan Anda.

Pembahasan dibatasi pada topik mata kuliah ini. Pertanyaan di luar tema akan ditolak secara otomatis.