Lompat ke konten
← Semua tulisan

Membangun AI Agent yang Benar-benar Dipakai

N Nicholaus Verdhy Putranto 17 Juli 2026 · 3 menit baca · 10 dilihat

Saya sudah membangun beberapa AI agent. Sebagian dipakai setiap hari. Sebagian lagi ditinggalkan dalam dua minggu.

Perbedaannya hampir tidak pernah soal model.

Pertanyaan sebelum menulis kode

Sebelum membangun agent, jawab empat hal ini dengan jujur:

  • Apakah tugasnya memang sulit dijabarkan? Kalau langkahnya bisa ditulis lengkap sebagai if-else, tulis saja sebagai kode. Lebih murah, lebih cepat, dan bisa dites.
  • Apakah hasilnya sepadan? Agent lebih lambat dan lebih mahal daripada kode biasa.
  • Apakah kesalahan bisa dideteksi? Kalau agent salah dan tidak ada yang tahu, kamu sedang membangun mesin pembuat masalah diam-diam.
  • Apakah kesalahan bisa dibatalkan? Agent yang bisa menghapus data tanpa konfirmasi adalah kecelakaan yang menunggu waktu.

Kalau ada satu saja yang jawabannya "tidak", pertimbangkan ulang.

Tiga tingkat, dari yang paling sederhana

1. Satu panggilan. Klasifikasi, ringkasan, ekstraksi. Satu permintaan, satu jawaban. Ini menyelesaikan lebih banyak masalah nyata daripada yang orang kira.

2. Alur terkendali. Beberapa langkah, tapi kamu yang menentukan urutannya. Model mengerjakan bagian yang butuh pemahaman bahasa; kode mengurus alurnya.

def proses_tiket(tiket):
    kategori = klasifikasi(tiket.isi)              # LLM
    if kategori == "teknis":
        konteks = cari_dokumentasi(tiket.isi)      # kode
        balasan = susun_balasan(tiket, konteks)    # LLM
    else:
        balasan = teruskan_ke_manusia(tiket)       # kode
    return balasan

Sebagian besar yang orang sebut "AI agent" sebenarnya cukup di tingkat ini. Bisa diprediksi, bisa dites, bisa di-debug.

3. Agent sebenarnya. Model yang memutuskan sendiri langkah apa berikutnya, memakai alat yang kamu sediakan, sampai tugasnya selesai. Paling fleksibel, paling sulit dikendalikan.

Merancang alat yang baik

Kualitas agent sangat ditentukan oleh alat yang kamu berikan. Beberapa prinsip yang saya pegang:

Deskripsinya harus menjelaskan kapan dipakai, bukan cuma apa fungsinya. "Cari data pelanggan berdasarkan email — gunakan ketika pengguna menyebut alamat email atau menanyakan riwayat akun" jauh lebih efektif daripada "Cari pelanggan".

Alat yang berbahaya harus dipisah dan dijaga. Jangan beri satu alat jalankan_sql. Buat alat spesifik: cari_pesanan, ubah_status — masing-masing dengan validasi sendiri.

Sedikit tapi jelas lebih baik daripada banyak. Dua puluh alat membuat model bingung memilih.

Contoh sederhana

from anthropic import Anthropic, beta_tool

client = Anthropic()

@beta_tool
def cari_pesanan(email: str) -> str:
    """Cari pesanan terakhir seorang pelanggan.

    Gunakan ketika pengguna menanyakan status pesanan
    dan menyebutkan alamat email.

    Args:
        email: Alamat email pelanggan.
    """
    pesanan = Pesanan.objects.filter(email=email).order_by("-dibuat")[:5]
    if not pesanan:
        return "Tidak ada pesanan untuk email tersebut."
    return "\n".join(f"{p.kode}: {p.get_status_display()}" for p in pesanan)

runner = client.beta.messages.tool_runner(
    model="claude-opus-5",
    max_tokens=8000,
    tools=[cari_pesanan],
    messages=[{"role": "user", "content": pertanyaan_pengguna}],
)

for pesan in runner:
    ...

Pelajaran termahal saya

Agent pertama saya diberi akses tulis ke database sejak hari pertama. Berhasil sembilan dari sepuluh kali. Yang kesepuluh menghabiskan satu hari penuh untuk membereskannya.

Sekarang aturannya tetap: mulai dari hanya-baca. Amati keputusannya selama beberapa minggu. Baru berikan izin menulis satu per satu, masing-masing dengan konfirmasi.

Kecerdasan model bukan bagian yang sulit. Yang sulit adalah membangun pagar pengaman di sekelilingnya.

Bagikan ke WhatsApp Bagikan ke X

Komentar (0)

Belum ada komentar. Jadilah yang pertama!

Tinggalkan Komentar

Komentar akan tampil setelah disetujui.

Baca Juga