Prompt Engineering
Prompt Engineering 13: Dari Chat ke API
Memanggil model bahasa dari program: struktur pesan system, user, dan assistant, parameter umum, bentuk request dan response JSON, serta contoh Python untuk OpenAI, Anthropic, dan Google.

Diperiksa terakhir: 16 Oktober 2026. Bagian API berubah lebih cepat daripada teknik prompt. Nama field, parameter, dan nama model di sini dicocokkan dengan dokumentasi resmi pada tanggal tersebut. Selalu periksa dokumentasi penyedia sebelum memakai di proyek.
Di layanan chat, kamu mengetik dan model menjawab. Saat membangun aplikasi seperti chatbot kampus, alat ekstraksi data, atau asisten internal, kamu memanggil model yang sama lewat API: program mengirim request berisi pesan, lalu menerima response berisi jawaban. Semua teknik di bab 1–3 tetap berlaku. Yang berubah adalah kamu sekarang mengendalikan seluruh percakapan.
Yang akan dipelajari
- Peran pesan: system, user, dan assistant
- Bentuk umum request dan response
- Parameter yang umum dipakai
- Percakapan multi-giliran di API
- Contoh Python untuk tiga penyedia
Prasyarat: dasar pemrograman (contoh memakai Python), memahami JSON, dan punya API key dari salah satu penyedia.
Tiga peran pesan
| Peran | Isi | Analogi |
|---|---|---|
| system | Instruksi tetap untuk seluruh percakapan: peran, aturan, format, konteks aplikasi | Uraian tugas untuk karyawan baru |
| user | Pesan dari pengguna (atau dari programmu) | Permintaan yang masuk |
| assistant | Jawaban model sebelumnya | Catatan jawaban yang sudah diberikan |
Instruksi system (sebagian penyedia menyebutnya instructions atau system instruction) adalah tempat untuk hal yang berlaku di setiap giliran:
Kamu adalah asisten layanan akademik Program Studi Informatika.
Jawab hanya pertanyaan seputar jadwal, KRS, dan prosedur akademik
berdasarkan dokumen di dalam <dokumen>. Jika jawaban tidak ada di
dokumen, sarankan pengguna menghubungi bagian akademik.
Jawab dalam bahasa Indonesia, maksimal 150 kata.
Pesan user berisi pertanyaan atau data yang berubah-ubah.
Bentuk umum request
Hampir semua penyedia memakai pola yang mirip. Berikut bentuk umum (bukan format persis penyedia mana pun):
{
"model": "<nama-model>",
"system": "Kamu adalah asisten layanan akademik...",
"messages": [
{ "role": "user", "content": "Kapan batas akhir pengisian KRS?" }
],
"max_tokens": 500
}
Perbedaan antar penyedia (per tanggal pemeriksaan):
| OpenAI (Responses API) | Anthropic (Messages API) | Google (Interactions API) | |
|---|---|---|---|
| Endpoint | POST /v1/responses |
POST /v1/messages |
POST /v1beta/interactions |
| Instruksi system | instructions, atau pesan role system di input |
system (di luar messages) |
system_instruction |
| Pesan | input (string atau daftar pesan) |
messages |
input |
| Batas panjang output | max_output_tokens |
max_tokens (wajib) |
generation_config.max_output_tokens |
| Autentikasi | Header Authorization: Bearer <key> |
Header x-api-key + anthropic-version |
Header x-goog-api-key |
Untuk Google, API lama generateContent masih didukung, tetapi Google merekomendasikan Interactions API untuk proyek baru.
Bentuk umum response
Response berisi teks jawaban plus metadata. Contoh dari Messages API Anthropic (dipersingkat):
{
"id": "msg_...",
"role": "assistant",
"content": [
{ "type": "text", "text": "Batas akhir pengisian KRS adalah ..." }
],
"stop_reason": "end_turn",
"usage": { "input_tokens": 412, "output_tokens": 58 }
}
Informasi yang hampir selalu ada di semua penyedia:
- Teks jawaban. Sering berupa daftar blok konten, bukan satu string. SDK biasanya menyediakan jalan pintas, seperti
output_textdi OpenAI dan Google. - Alasan berhenti. Apakah model selesai dengan wajar, atau terpotong karena batas token. Selalu periksa: jawaban yang terpotong bisa terlihat lengkap sekilas.
- Penggunaan token, untuk menghitung biaya dan memantau panjang prompt.
Parameter yang umum
| Parameter | Fungsi | Catatan |
|---|---|---|
model |
Model yang dipakai | Nama model berganti cepat; simpan di konfigurasi, jangan di-hardcode di banyak tempat |
| Batas token output | Membatasi panjang jawaban | Terlalu kecil → jawaban terpotong |
temperature |
Mengatur keacakan | Hati-hati: per tanggal pemeriksaan, sebagian model terbaru dari beberapa penyedia mengabaikan atau menolak parameter ini. Cek dokumentasi model yang kamu pakai |
stream |
Mengirim jawaban sepotong demi sepotong | Untuk tampilan "mengetik" di UI chat |
Karena kendali keacakan tidak lagi tersedia di semua model, cara paling andal untuk hasil yang konsisten tetap prompt yang jelas, contoh, dan output terstruktur (materi 14).
Percakapan multi-giliran
API umumnya tidak mengingat percakapan (stateless). Programmu harus mengirim ulang riwayat percakapan setiap kali:
{
"system": "...",
"messages": [
{ "role": "user", "content": "Kapan batas akhir KRS?" },
{ "role": "assistant", "content": "Batas akhir KRS adalah 20 Agustus." },
{ "role": "user", "content": "Kalau terlambat bagaimana?" }
]
}
Akibatnya: semakin panjang percakapan, semakin banyak token yang dikirim dan dibayar. Aplikasi biasanya memotong atau meringkas riwayat lama. Sebagian penyedia juga menawarkan mode yang menyimpan percakapan di server (misalnya previous_interaction_id di Interactions API Google); baca dokumentasinya untuk konsekuensi privasi dan biaya.
Praktik dasar
- Simpan API key di environment variable, jangan di kode atau repositori. Semua SDK di bawah membaca key dari environment secara otomatis.
- Jangan panggil API langsung dari browser dengan key-mu, karena key akan terlihat oleh siapa pun. Panggil dari server.
- Tangani error dan batas laju (rate limit): coba ulang dengan jeda yang makin lama.
- Catat prompt dan versi model untuk setiap fitur, agar perubahan hasil bisa ditelusuri (materi 07 dan 16).
Catatan bahasa Inggris
Dokumentasi, nama parameter, dan pesan error API berbahasa Inggris. Isi prompt system dan pesan pengguna boleh berbahasa Indonesia; model akan menjawab dalam bahasa yang diminta.
Kesalahan yang sering terjadi
| Kesalahan | Akibat |
|---|---|
| API key di kode frontend atau repositori | Key dicuri dan disalahgunakan |
| Tidak memeriksa alasan berhenti | Jawaban terpotong dianggap lengkap |
| Mengira API mengingat percakapan | Model "lupa" konteks di giliran berikutnya |
| Menyalin parameter dari tutorial lama | Error karena parameter berubah atau tidak didukung model baru |
| Semua instruksi di pesan user | Instruksi tercampur dengan input pengguna; lebih mudah dimanipulasi |
Latihan
- Pisahkan prompt berikut menjadi bagian system dan user untuk aplikasi peringkas berita: "Kamu peringkas berita. Ringkas berita ini dalam 3 poin bahasa Indonesia: [teks berita]."
- Kenapa instruksi aturan aplikasi sebaiknya diletakkan di system, bukan di pesan user?
- Aplikasi chatbot-mu menjadi semakin mahal seiring percakapan panjang. Jelaskan penyebabnya dan dua cara mengatasinya.
Contoh jawaban
Latihan 1
- system: "Kamu adalah peringkas berita. Ringkas setiap berita yang diberikan pengguna menjadi tepat 3 poin dalam bahasa Indonesia, masing-masing maksimal 25 kata. Gunakan hanya informasi dari berita."
- user:
<berita>[teks berita]</berita>
Alasannya: aturan tetap ada di system dan berlaku untuk setiap berita; pesan user hanya berisi data yang berubah.
Latihan 2
Instruksi di system berlaku untuk seluruh percakapan, terpisah dari isi yang ditulis pengguna, dan umumnya diberi bobot lebih oleh model. Jika aturan dicampur di pesan user, aturan itu mudah tertimpa oleh teks pengguna, termasuk teks yang sengaja berusaha mengubah perilaku model (prompt injection, materi 17).
Latihan 3
Penyebab: API stateless, sehingga seluruh riwayat dikirim ulang dan dihitung sebagai token input di setiap giliran. Cara mengatasi: (1) batasi riwayat ke N giliran terakhir; (2) ringkas riwayat lama menjadi satu pesan ringkasan; (3) manfaatkan fitur prompt caching jika penyedia mendukungnya, untuk bagian prompt yang tetap seperti instruksi system dan dokumen.
Lampiran: contoh Python per penyedia
Ketiga contoh memanggil model dengan instruksi system yang sama. Ganti <nama-model> dengan model yang tersedia di akunmu (lihat halaman daftar model di dokumentasi penyedia). Instal SDK dengan pip install openai, pip install anthropic, atau pip install google-genai, lalu setel API key di environment variable (OPENAI_API_KEY, ANTHROPIC_API_KEY, atau GEMINI_API_KEY).
OpenAI (Responses API)
from openai import OpenAI
client = OpenAI() # membaca OPENAI_API_KEY
response = client.responses.create(
model="<nama-model>",
instructions="Kamu adalah asisten akademik. Jawab maksimal 100 kata.",
input="Apa bedanya skripsi dan tesis?",
max_output_tokens=500,
)
print(response.output_text)
Anthropic (Messages API)
import anthropic
client = anthropic.Anthropic() # membaca ANTHROPIC_API_KEY
message = client.messages.create(
model="<nama-model>",
max_tokens=500, # wajib
system="Kamu adalah asisten akademik. Jawab maksimal 100 kata.",
messages=[
{"role": "user", "content": "Apa bedanya skripsi dan tesis?"},
],
)
for block in message.content:
if block.type == "text":
print(block.text)
print(message.stop_reason) # "max_tokens" berarti jawaban terpotong
Google (Interactions API)
from google import genai
client = genai.Client() # membaca GEMINI_API_KEY
interaction = client.interactions.create(
model="<nama-model>",
system_instruction="Kamu adalah asisten akademik. Jawab maksimal 100 kata.",
input="Apa bedanya skripsi dan tesis?",
generation_config={"max_output_tokens": 500},
)
print(interaction.output_text)
Dokumentasi resmi:
- OpenAI: developers.openai.com/api/docs
- Anthropic: platform.claude.com/docs
- Google: ai.google.dev/gemini-api/docs
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.