Pendahuluan
Halo teman-teman developer! Senang sekali bisa bertemu kembali di seri pengembangan chatbot berbasis LLM ini. Pada artikel sebelumnya (#3), kita sudah berhasil melakukan langkah fundamental, yaitu memanggil API LLM menggunakan Python. Kita sudah tahu cara mengirimkan sebuah pesan dan menerima balasan dari model bahasa besar.
Namun, ada satu masalah nyata yang mungkin sudah kalian rasakan: “Kok jawabannya tidak sesuai keinginan ya?” atau “Kok jawabannya terlalu panjang dan tidak nyambung?”. Jika kalian hanya mengirimkan instruksi singkat seperti “Buatlah resep makanan”, LLM akan memberikan jawaban yang sangat umum. Hasilnya mungkin tidak sesuai dengan kebutuhan spesifik aplikasi yang sedang kita bangun.
Di sinilah peran Prompt Engineering menjadi sangat krusial. Prompt Engineering bukan sekadar “cara bertanya”, melainkan sebuah disiplin ilmu dalam merancang, mengoptimasi, dan menyempurnakan input (prompt) agar model AI memberikan output yang paling akurat, relevan, dan berkualitas tinggi. Dalam artikel ini, kita akan mempelajari teknik-teknik dasar Prompt Engineering untuk mengubah chatbot sederhana kita menjadi asisten yang cerdas dan profesional.
Anatomi Prompt yang Efektif
Sebuah prompt yang berkualitas tidak dibuat secara acak. Ada struktur yang bisa kita ikuti agar LLM memahami maksud kita dengan presimisi tinggi. Secara umum, sebuah prompt yang kuat terdiri dari empat komponen utama:
- Instruction (Instruksi): Tugas spesifik yang ingin kamu berikan kepada model.
- Context (Konteks): Latar belakang atau informasi tambahan yang membantu model memahami situasi.
- Input Data: Data atau teks yang ingin diproses oleh instruksi tersebut.
- Output Indicator: Format atau gaya jawaban yang diinginkan (misalnya: JSON, Markdown, atau bullet points).
Mari kita lihat perbandingannya dalam contoh berikut:
# Contoh 1: Prompt Buruk (Terlalu ambigu)
prompt_buruk = "Buat menu makan siang."
# Contoh 2: Prompt Bagus (Menggunakan anatomi lengkap)
# Instruksi: Buat menu makan siang
# Kontekan: Untuk Budi yang sedang diet rendah karbohidrat dengan budget Rp 50.000
# Output Indicator: Dalam bentuk daftar list yang rapi
prompt_bagus = """
Kamu adalah seorang ahli gizi profesional.
Buatlah menu makan siang yang sehat untuk Budi.
Budi sedang menjalani diet rendah karbohidrat dan memiliki budget maksimal Rp 50.000 untuk satu kali makan.
Berikan jawaban dalam bentuk list poin-poin yang mencakup nama makanan dan estimasi harganya.
"""
print("--- Prompt Buruk ---")
print(prompt_buruk)
print("\n--- Prompt Bagus ---")
print(prompt_bagus)
Dengan memberikan konteks mengenai budget (Rp 50.000) dan kondisi kesehatan (diet rendah karbohidrat), LLM tidak akan menyarankan menu steak mahal atau nasi goreng porsi besar, melainkan menu yang lebih masuk akal seperti gado-gado tanpa lontong atau ayam bakar tanpa nasi.
Teknik Few-Shot Prompting
Salah satu teknik paling ampuh dalam Prompt Engineering adalah Few-Shot Prompting. Istilah “Zero-shot” digunakan ketika kita memberikan instruksi tanpa contoh sama sekali. Sedangkan “Few-shot” adalah teknik di mana kita memberikan satu atau beberapa contoh (shots) pola jawaban yang kita inginkan sebelum memberikan instruksi utama.
Teknik ini sangat berguna jika kamu ingin LLM mengikuti format klasifikasi atau ekstraksi data yang sangat spesifik, seperti menganalisis sentimen ulasan pelanggan di platform seperti Tokopedia atau Shopee.
# Contoh Few-Shot Prompting untuk klasifikasi sentimen ulasan
prompt_few_shot = """
Klasifikasikan sentimen ulasan berikut menjadi: POSITIF, NEGATIF, atau NETRAL.
Ulasan: "Barangnya sampai dengan cepat, packing aman banget!"
Sentimen: POSITIF
Ulasan: "Kecewa banget, barang yang datang tidak sesuai foto. Seller tidak responsif."
Sentimen: NEGATIF
Ulasan: "Barang standar, harga murah, pengiriman lumayan."
Sentimen: NETRAL
Ulasan: "Barangnya rusak saat sampai, padahal sudah bayar mahal pakai GoPay."
Sentimen:
"""
# LLM akan secara otomatis melengkapi bagian akhir dengan "NEGATIF"
# karena sudah melihat pola sebelumnya.
print(prompt_few_shot)
Dengan memberikan contoh, kita mengurangi risiko LLM memberikan penjelasan panjang lebar yang tidak perlu. Kita memaksa model untuk mengikuti format Sentimen: [LABEL].
Role Prompting (Memberikan Persona)
LLM adalah model yang sangat luas pengetahuannya. Jika kita tidak memberikan batasan, ia akan menjawab sebagai “AI umum”. Role Prompting adalah teknik memberikan “peran” atau “identitas” kepada AI. Ini membantu mengatur nada bicara (*tone of
s*), tingkat keahlian, dan gaya bahasa.
Misalnya, kita ingin membuat chatbot untuk layanan pelanggan (Customer Service) sebuah bank digital seperti BCA atau Mandiri. Kita tidak ingin chatbot menjawab seperti teman nongkrong, melainkan seperti staf profesional.
# Contoh Role Prompting untuk Customer Service
def generate_cs_response(user_query):
# Menentukan persona sebagai CS Bank
role_instruction = """
Kamu adalah Customer Service resmi dari Bank Digital 'Artha'.
Tugasmu adalah menjawab pertanyaan nasabah dengan sopan, profesional, dan membantu.
Gunakan bahasa Indonesia yang baku namun tetap ramah.
Jika pertanyaan berkaitan dengan transfer antar bank, ingatkan untuk selalu mengecek nomor rekening tujuan.
"""
full_prompt = f"{role_instruction}\n\nNasabah bertanya: {user_query}\nCS Artha menjawab:"
return fullthal_prompt
query_nasabah = "Gimana cara transfer dari akun saya ke rekening Mandiri?"
print(generate_cs_response(query_nasabah))
Dengan teknik ini, chatbot tidak hanya memberikan instruksi teknis, tetapi juga membawa “karakter” yang sesuai dengan brand perusahaan.
Implementasi dalam Proyek Chatbot Sederhana
Sekarang, mari kita terapkan semua ilmu ini ke dalam proyek Chatbot Sederhana kita. Kita akan memperbarui fungsi chat_with_bot agar tidak hanya sekadar meneruskan pesan, tetapi juga menyisipkan System Prompt yang berisi instruksi, persona, dan aturan main.
Berikut adalah kode final yang telah dioptimasi:
import openai
# Inisialisasi Client (Gunakan API Key Anda)
client = openai.OpenAI(api_key="YOUR_API_KEY_DISINI")
def chat_with_bot(user_input):
# Kita menerapkan teknik Role Prompting & Instruction di sini
system_prompt = """
Kamu adalah 'Budi-Bot', asisten pribadi pintar milik Budi.
Tugasmu adalah membantu Budi mengelola jadwal dan menjawab pertanyaan umum.
Gaya bahasamu santai, menggunakan panggilan 'Bos' atau 'Kakak',
dan sering menggunakan emoji agar terasa akrab.
Jika ditanya soal uang, selalu gunakan format Rupiah (Rp).
"""
try:
response = client.chat.completions.create(
model="gpt-3.5-turbo", # atau gpt-4
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_input}
],
temperature=0.7 # Mengatur kreativitas (0.0 = kaku, 1.0 = sangat kreatif)
)
return response.choices[0].message.content
except Exception as e:
return f"Waduh, ada error nih, Bos: {str(e)}"
# Simulasi Chat
print("--- Chatbot Budi-Bot Dimulai ---")
print("(Ketik 'keluar' untuk berhenti)")
while True:
user_msg = input("Kamu: ")
if userlag_msg.lower() == 'keluar':
print("Budi-Bot: Sampai jumpa lagi, Bos! 👋")
break
jawaban = chat_with_bot(user_msg)
print(f"Budi-Bot: {jawaban}")
Dalam kode di atas, kita menggunakan parameter system dalam API OpenAI untuk menanamkan instruksi permanen. Ini jauh lebih efektif daripada menggabungkan instruksi di dalam pesan user.
Kesimpulan
Menguasai teknik prompting adalah kunci utama dalam membangun aplikasi berbasis AI. Dengan memahami Anatomi Prompt (Instruksi, Konteks, Input, dan Output) serta teknik seperti Few-Shot Prompting (memberikan contoh) dan Role Prompting (memberikan peran), Anda dapat mengubah chatbot sederhana menjadi asisten cerdas yang sangat spesifik dan berguna.
Jangan takut untuk bereksperimen! Prompting adalah proses iteratif. Jika jawaban AI belum sesuai, coba tambahkan batasan atau contoh yang lebih jelas pada prompt Anda.