LESSON 02 / 04
Memanggil API LLM dengan Benar
16 menit bacaLLM & API Fundamentals
API LLM itu API jaringan juga
Semua kebenaran tentang memanggil service eksternal berlaku — plus kekhasan LLM.
Pola pemanggilan yang sehat
async function callLLM(messages: Message[]) {
const res = await fetch(endpoint, {
method: "POST",
headers: { Authorization: `Bearer ${process.env.LLM_KEY}` },
body: JSON.stringify({ model, messages, temperature: 0.2 }),
signal: AbortSignal.timeout(30_000), // timeout eksplisit
});
if (res.status === 429) { // rate limited
await sleep(res.headers.get("retry-after") ?? 1000);
return callLLM(messages); // retry dengan backoff
}
if (!res.ok) throw new LLMError(res.status, await res.text());
return res.json();
}
Klasifikasi error yang harus kamu tangani
- 429 rate limit → backoff + retry, pertimbangkan antrian.
- 5xx provider → retry terbatas, lalu fallback model/provider lain.
- 400 context overflow → pangkas konteks, jangan retry buta.
- Timeout → batalkan, jangan biarkan request zombie menumpuk.
Prinsip idempotency
Kalau operasimu menyimpan efek samping (misal menulis notifikasi), pastikan retry tidak menduplikasi efeknya — gunakan kunci idempotency atau cek-dulu-tulis.