Praktik langsung memakai LLM API: memahami tokenization dan context window, struktur request/response, serta streaming. Kalian juga membangun aplikasi CLI sederhana berbasis LLM API sebagai pondasi seluruh produk AI berikutnyatype: text

Setelah di episode 2 kalian mengenal ekosistem model, episode ini masuk ke jantung praktik AI engineer: memanggil LLM API dengan benar. Ini bukan sekadar menyalin kode dari dokumentasi — kalian perlu memahami apa yang terjadi di balik layar agar bisa mendiagnosis masalah, memperkirakan biaya, dan membangun aplikasi yang robust.
Mengapa episode ini penting? Karena hampir semua produk AI dibangun di atas satu pola yang sama: kirim pesan → terima jawaban → olah hasil. Memahami pola ini secara mendalam — token, konteks, streaming — adalah fondasi yang dipakai ulang di 25 episode ke depan.
Model tidak membaca teks karakter demi karakter, melainkan token — potongan teks (kata atau sub-kata). Token penting karena tiga alasan: harga API dihitung per token, context window dihitung per token, dan hasil output juga dihitung per token.
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o")
tokens = enc.encode("Halo, ini contoh kalimat untuk menghitung token.")
print(f"jumlah token: {len(tokens)}")
print(tokens)Perhatikan: satu kalimat pendek bisa menjadi puluhan token, dan token bukan kata — kata langka atau istilah teknis sering dipecah jadi beberapa token. Ini menjelaskan mengapa biaya dokumen teknis sering lebih mahal dari perkiraan.
Context window adalah jumlah token maksimum yang bisa diproses model sekaligus — gabungan input dan output. Model 2026 umumnya punya konteks 128K-200K token, tapi ada tiga peringatan penting:
Konsekuensi praktisnya: jangan isi konteks dengan semua data. Strategi mengelola konteks inilah yang kita bahas mendalam di episode 8 (Context Engineering) — dan alasan mengapa RAG (episode 7) ada.
Semua LLM API modern mengikuti pola chat completion yang sama. Struktur dasarnya:
{
"model": "gpt-4o-mini",
"messages": [
{ "role": "system", "content": "Kamu asisten yang ringkas." },
{ "role": "user", "content": "Apa itu token?" },
{ "role": "assistant", "content": "Token adalah potongan teks yang dipahami model." },
{ "role": "user", "content": "Jelaskan lebih singkat." }
],
"temperature": 0.3,
"max_tokens": 200
}Tiga hal yang perlu dicermati:
system yang boleh diulang-ulang tanpa biaya percakapan; user/assistant adalah konteks.Response standar berisi choices[0].message.content (isi jawaban) dan usage (rincian token prompt/completion untuk kalkulasi biaya). Selalu baca usage di lingkungan produksi — itulah sumber data cost tracking di episode 17.
Untuk pengalaman pengguna yang responsif — terutama di chatbot — gunakan streaming agar jawaban tampil bertahap:
from openai import OpenAI
client = OpenAI()
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Ceritakan sejarah singkat AI dalam 3 kalimat."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
print()Streaming juga memungkinkan kalian membatalkan response lebih awal (jika user menekan stop) tanpa membayar token penuh. Di episode 16 kita implementasikan streaming yang benar di backend FastAPI.
Saatnya menggabungkan semuanya — aplikasi CLI tanya-jawab dengan riwayat percakapan:
from openai import OpenAI
client = OpenAI()
SYSTEM = "Kamu adalah asisten yang ringkas dan faktual."
def chat(messages: list[dict]) -> str:
r = client.chat.completions.create(
model="gpt-4o-mini", messages=messages, temperature=0.3
)
return r.choices[0].message.content
def main() -> None:
messages: list[dict] = [{"role": "system", "content": SYSTEM}]
print("Ketik 'exit' untuk keluar.")
while True:
user = input("\nKamu: ")
if user.lower() == "exit":
break
messages.append({"role": "user", "content": user})
reply = chat(messages)
print(f"\nAsisten: {reply}")
messages.append({"role": "assistant", "content": reply})
if __name__ == "__main__":
main()Jalankan dengan python app.py. Perhatikan bahwa riwayat percakapan dikirim penuh setiap kali — ini pola paling sederhana, dan kita optimalkan di episode 12 (memory & state).
Warning
Riwayat percakapan yang terus tumbuh akan membengkakkan biaya dan mendekati context window. Di produksi, kalian perlu trim, ringkas, atau arsipkan pesan lama — topik Context Engineering di episode 8.
usage: tanpa mencatat token, kalian tidak tahu biaya dan tidak bisa mengoptimasi.Inti yang harus dibawa pulang:
tiktoken.messages + temperature + max_tokens; selalu baca usage.Di episode 4 selanjutnya kita akan membahas prompt engineering dasar — system/user/assistant roles, zero-shot vs few-shot, iterasi prompt, dan cara menulis prompt yang konsisten dan hemat token. Sampai jumpa di episode 4!