Lompat ke konten
← Semua tulisan

Menyambungkan LLM ke Aplikasi Django

N Nicholaus Verdhy Putranto 27 Juni 2026 · 2 menit baca · 9 dilihat

Menambahkan LLM ke aplikasi Django itu mudah. Menambahkannya tanpa merusak pengalaman pengguna — itu bagian yang perlu dipikirkan.

Masalah utamanya: waktu tunggu

Panggilan ke LLM bisa memakan 2 sampai 30 detik. Kalau kamu melakukannya di dalam view biasa, pengguna menatap layar kosong dan koneksi HTTP-mu tertahan selama itu.

Ada tiga pola untuk mengatasinya.

Pola 1: Async view untuk respons cepat

Untuk tugas ringan seperti klasifikasi atau ekstraksi, async view sudah cukup.

from anthropic import AsyncAnthropic
from django.http import JsonResponse

client = AsyncAnthropic()

async def klasifikasi(request):
    pesan = request.POST.get("pesan", "")
    respons = await client.messages.create(
        model="claude-opus-5",
        max_tokens=1024,
        messages=[{
            "role": "user",
            "content": f"Klasifikasikan pesan ini sebagai keluhan/pertanyaan/pujian. "
                       f"Jawab satu kata saja.\n\n{pesan}",
        }],
    )
    teks = next(b.text for b in respons.content if b.type == "text")
    return JsonResponse({"kategori": teks.strip()})

Pola 2: Streaming untuk jawaban panjang

Kalau hasilnya panjang, jangan buat pengguna menunggu sampai selesai. Alirkan per potongan.

from django.http import StreamingHttpResponse

async def tulis_draf(request):
    async def aliran():
        async with client.messages.stream(
            model="claude-opus-5",
            max_tokens=8000,
            messages=[{"role": "user", "content": request.GET["topik"]}],
        ) as stream:
            async for teks in stream.text_stream:
                yield teks

    return StreamingHttpResponse(aliran(), content_type="text/plain")

Teks mulai muncul dalam hitungan detik, bukan puluhan detik. Perbedaan yang dirasakan pengguna sangat besar.

Pola 3: Antrean untuk tugas berat

Untuk pekerjaan yang butuh menit — menganalisis dokumen, memproses banyak baris — jangan tahan permintaan HTTP sama sekali. Lempar ke antrean.

@shared_task
def analisis_dokumen(dokumen_id):
    dok = Dokumen.objects.get(pk=dokumen_id)
    respons = client.messages.create(
        model="claude-opus-5",
        max_tokens=16000,
        thinking={"type": "adaptive"},
        output_config={"effort": "high"},
        messages=[{"role": "user", "content": dok.isi}],
    )
    dok.ringkasan = next(b.text for b in respons.content if b.type == "text")
    dok.save(update_fields=["ringkasan"])

View-nya cukup memanggil analisis_dokumen.delay(dok.pk) dan langsung membalas. Pengguna dapat notifikasi ketika selesai.

Tiga hal yang mudah terlupa

Simpan hasilnya. Panggilan LLM tidak gratis dan tidak cepat. Kalau pertanyaan yang sama bisa muncul lagi, simpan jawabannya di database atau Redis.

Batasi lajunya. Tanpa rate limit, satu pengguna iseng bisa menghabiskan kuota API-mu dalam hitungan menit.

Siapkan jalur gagal. API eksternal bisa lambat, penuh, atau menolak permintaan. Tentukan apa yang terjadi pada pengguna ketika itu terjadi — jangan biarkan halamannya sekadar error.

try:
    hasil = panggil_llm(teks)
except Exception:
    logger.exception("LLM gagal")
    hasil = None  # tampilkan versi tanpa AI, jangan matikan fiturnya
Bagikan ke WhatsApp Bagikan ke X

Komentar (0)

Belum ada komentar. Jadilah yang pertama!

Tinggalkan Komentar

Komentar akan tampil setelah disetujui.

Baca Juga