Menyambungkan LLM ke Aplikasi Django
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 fiturnyaBaca Juga
Deploy Aplikasi Python: Dari Laptop ke Server
Jalan di laptop bukan berarti jalan di server. Ini yang berubah, dan kenapa.
Celery: Memindahkan Pekerjaan Berat ke Belakang Layar
Kalau ada pekerjaan yang butuh lebih dari beberapa detik, jangan biarkan pengguna menunggunya.
Komentar (0)
Belum ada komentar. Jadilah yang pertama!
Tinggalkan Komentar
Komentar akan tampil setelah disetujui.