- Sebagian besar tim yang membangun sistem berbasis LLM selalu mencoba membangun agen (Agent) lebih dulu, tetapi kebanyakan mudah runtuh karena kompleksitas, sulit dikendalikan, dan sulit di-debug
- Pola agen yang benar-benar membutuhkan memori, RAG, penggunaan alat, dan kontrol workflow sebenarnya jarang, dan sebagian besar masalah justru bisa diselesaikan lebih efektif dengan workflow sederhana (chaining, paralelisasi, routing, dll.)
- Disarankan untuk lebih dulu menerapkan 5 pola workflow LLM yang berguna di dunia nyata, dan hanya menggunakan agen dengan hati-hati saat benar-benar diperlukan
- prompt chaining, paralelisasi, routing, orchestrator-worker, evaluator-optimizer
- Bahkan ketika agen memang diperlukan, keterlibatan manusia, kontrol yang jelas, dan observabilitas (Observability) tetap menjadi inti
Apakah Agen AI Benar-Benar Diperlukan?
- Wawasan dari Hugo Bowne-Anderson, yang memberikan konsultasi dan pelatihan terkait pembangunan sistem LLM kepada berbagai engineer dan tim seperti Netflix, Meta, dan Angkatan Udara AS
Awal yang Salah: Mengapa Semua Orang Terobsesi dengan Agen
- Banyak tim saat memulai proyek LLM lebih dulu mengadopsi struktur kompleks seperti agen, memori, routing, penggunaan tool, dan karakter/persona
- Saat benar-benar dibangun, berbagai masalah seperti kolaborasi antaragen, pemilihan tool, dan memori jangka panjang sering memunculkan perilaku aneh dan kegagalan berulang
- Sebagai contoh, pada proyek agen riset berbasis CrewAI, setiap peran (peneliti, peringkas, koordinator) gagal bekerja sama sesuai harapan dan akhirnya runtuh tanpa daya
Apa Itu Agen?
- Empat karakteristik sistem LLM: memori, pengambilan informasi (RAG), penggunaan tool, dan kontrol workflow
- Bagian terakhir, yaitu kontrol workflow (LLM secara langsung memutuskan langkah berikutnya atau apakah akan menggunakan tool), disebut sebagai sifat keagenan
- Dalam sebagian besar pekerjaan nyata, workflow sederhana (chaining, routing, dll.) menunjukkan stabilitas yang lebih tinggi
Pola Workflow LLM yang Sebaiknya Dipakai sebagai Pengganti Agen dan Berguna di Praktik Nyata
1. Prompt Chaining
- Penjelasan: Membagi beberapa tugas menjadi rangkaian tahap (chain), lalu membiarkan LLM memproses tiap tahap secara berurutan
- Contoh: Mengekstrak nama, jabatan, dan nama perusahaan dari profil LinkedIn → menambahkan informasi tambahan tentang perusahaan tersebut (misi, rekrutmen, dll.) → menulis email yang dipersonalisasi berdasarkan profil + informasi perusahaan
- Kelebihan: Karena tiap tahap dipisahkan dengan jelas, penyebab bug lebih mudah dilacak/diperbaiki, sehingga menguntungkan untuk debugging dan pemeliharaan
- Panduan:
- Cocok untuk tugas yang saling terhubung secara berurutan
- Jika satu tahap saja gagal, seluruh chain bisa runtuh
- Dengan membaginya menjadi unit kerja kecil, hasil menjadi lebih dapat diprediksi dan debugging lebih mudah
2. Paralelisasi (Parallelization)
- Penjelasan: Menjalankan beberapa tugas independen secara bersamaan untuk meningkatkan kecepatan keseluruhan proses
- Contoh: Dari beberapa profil orang, mengekstrak item seperti pendidikan, pengalaman, dan skill secara paralel untuk mempersingkat total waktu pemrosesan
- Kelebihan: Efisien untuk ekstraksi/pemrosesan data independen, termasuk pada data skala besar, dan cocok dengan lingkungan pemrosesan terdistribusi
- Panduan:
- Setiap tugas harus saling independen, dan eksekusi paralel dapat sangat meningkatkan kecepatan keseluruhan
- Perlu waspada terhadap kondisi pengecualian seperti race condition dan timeout saat menjalankan paralel
- Cocok untuk pemrosesan data dalam jumlah besar dan analisis serentak dari banyak sumber
3. Routing
- Penjelasan: LLM mengklasifikasikan data masukan lalu otomatis mengarahkannya ke workflow yang sesuai
- Contoh: Dalam tool dukungan pelanggan, masukan diklasifikasikan apakah itu pertanyaan produk, masalah pembayaran, atau permintaan refund, lalu otomatis diproses melalui workflow yang sesuai; jika tipenya ambigu, diteruskan ke handler default
- Kelebihan: Memisahkan berbagai kasus dengan rapi dengan menerapkan logika pemrosesan yang terspesialisasi untuk tiap jenis input
- Panduan:
- Gunakan saat tipe input/situasi yang berbeda membutuhkan penanganan terpisah
- Pada kasus batas atau situasi pengecualian, routing bisa gagal atau ada kasus yang terlewat
- Wajib merancang handler catch-all untuk kasus tak terklasifikasi/pengecualian
4. Orchestrator-Worker
- Penjelasan: LLM yang berperan sebagai orchestrator memecah tugas/mengambil keputusan lalu mendelegasikan pekerjaan detail ke worker (LLM eksekutor), sambil mengendalikan sendiri alur dan urutan keseluruhan
- Contoh: Mengklasifikasikan profil target menjadi tech/non-tech → jika tech, mendelegasikan pembuatan email ke worker spesialis; jika non-tech, mendelegasikan ke worker lain
- Kelebihan: Memisahkan pengambilan keputusan (klasifikasi/penilaian) dan eksekusi (pemrosesan individual), sehingga baik untuk kontrol alur dinamis dan skalabilitas
- Panduan:
- Cocok bila setiap tugas memerlukan penanganan spesialis, serta untuk percabangan kompleks dan koordinasi bertahap
- Jika orchestrator salah memecah atau mendelegasikan tugas, seluruh alur bisa mengalami error
- Jaga logika tetap eksplisit dan sederhana, serta rancang pendelegasian/urutan/kondisi berhenti dengan jelas
5. Evaluator-Optimizer
- Penjelasan: LLM mengevaluasi hasil (skor/umpan balik), lalu jika belum memenuhi kriteria akan merevisi dan memperbaikinya secara berulang
- Contoh: Membuat draf email → evaluator memberi skor kualitas/umpan balik → jika sudah memenuhi ambang tertentu atau melebihi jumlah iterasi maksimum maka berhenti, jika belum maka direvisi lagi
- Kelebihan: Kualitas output akhir bisa ditingkatkan berulang kali hingga mencapai tingkat yang dituju, dan cocok untuk menggunakan kriteria kuantitatif
- Panduan:
- Cocok untuk situasi ketika kualitas lebih penting daripada kecepatan, dan workflow membutuhkan optimasi iteratif
- Tanpa kondisi berhenti, sistem bisa terjebak dalam loop tak berujung
- Wajib menetapkan kriteria kualitas yang jelas dan batas iterasi
Saat Agen Benar-Benar Diperlukan
- Agen menunjukkan nilai sebenarnya dalam lingkungan yang menjamin intervensi manusia secara real-time (Human-in-the-loop)
- Contoh 1: Pendamping data science - pada SQL query, visualisasi, rekomendasi analisis data, dll., LLM dapat mencoba pendekatan kreatif dan manusia yang menilai/memperbaiki hasilnya
- Contoh 2: Mitra kreatif - pada ide copywriting, usulan headline, rekomendasi struktur teks, dll., koreksi arah dan penilaian kualitas oleh manusia menjadi inti
- Contoh 3: Asisten refaktorisasi kode - pada usulan design pattern, deteksi edge case, optimasi kode, dll., developer memberikan persetujuan/penyempurnaan
- Karakteristik: Agen bukan menangani “semua hal sendiri”, tetapi paling efektif dalam lingkungan tempat manusia secara real-time mengoreksi error dan mengarahkan jalannya proses
Saat Agen Tidak Cocok
- Sistem enterprise dan mission-critical (keuangan, kesehatan, hukum, dll.):
- Karena keandalan otomasi dan perilaku yang deterministik sangat penting, struktur di mana agen LLM mengambil keputusan menjadi berisiko
- Gunakan pola kontrol yang jelas seperti orchestrator, routing, dan sejenisnya
- Semua situasi yang mengutamakan stabilitas dan prediktabilitas
- Contoh kasus abnormal: agen berulang kali salah memilih tool tanpa konteks/memori, atau pembagian kerja/koordinasi gagal sehingga seluruh alur runtuh
- Faktor kegagalan sistem agen yang sering muncul di praktik kerja
- Konteks hilang karena sistem memori eksplisit tidak dirancang
- Kurangnya batasan pemilihan tool (penggunaan tool yang tidak perlu/salah)
- Gagal mengoordinasikan kolaborasi karena hanya mengandalkan struktur delegasi yang terlalu bebas
Pelajaran untuk Perancangan di Dunia Kerja
- Bahkan saat mengadopsi agen, tetap diperlukan desain, observabilitas, dan sistem kontrol setara “sistem perangkat lunak yang matang”
- Dibanding framework agen yang kompleks, merancang dengan observabilitas (Observability), loop evaluasi yang jelas, dan struktur yang bisa dikontrol langsung lebih cepat dan lebih aman
Kesimpulan (TL;DR)
- Agen sering kali terlalu dibesar-besarkan dan digunakan berlebihan
- Sebagian besar tugas nyata lebih cocok dengan pola workflow sederhana
- Agen menunjukkan nilai terbaiknya dalam lingkungan dengan keterlibatan langsung manusia
- Dalam sistem yang stabil, agen justru bisa menjadi faktor risiko
- Rancang sistem dengan observabilitas, kontrol eksplisit, dan struktur evaluasi berulang
- Alih-alih framework agen yang kompleks, rahasia membangun layanan berbasis LLM yang lebih cepat dan aman di dunia nyata adalah merancang dengan observabilitas, loop evaluasi yang jelas, dan struktur yang bisa dikontrol langsung
6 komentar
Sebulan lalu, sambil menggunakan CURSOR untuk mempelajari apa itu AI coding, saya mulai mengembangkan framework pengembangan.
Selama sekitar 3 minggu, saya berulang kali mengalami situasi di mana source code yang sempat berhasil dan tervalidasi oleh AI Agent malah rusak kembali. Saya mencoba segala cara untuk mengendalikan AI Agent, tetapi gagal.
Lalu saya menyadari bahwa sebelum mengembangkan framework pengembangan, prioritas utamanya adalah mengembangkan source code untuk mengendalikan AI Agent.
Akhirnya, tepat 1 bulan setelah mulai karena ingin memahami apa itu AI pertama saya, saya berhasil menyelesaikan pengembangan software yang dapat diimplementasikan 100% dan dioperasikan 100% oleh AI dengan kendali sempurna atas AI Agent (lebih tepatnya, tidak memerlukan LLM eksternal maupun AI Agent).
Saat ini, selama 14 hari terakhir, saya sedang menjalankan proses peningkatan lanjutan dengan melatih tambahan META AI tersebut sambil membuat aturan operasional agar dipatuhi. Pada saat yang sama, saya juga sedang melakukan migrasi, perbaikan, dan standardisasi secara bersamaan terhadap tiga sistem MES yang sebelumnya dibuat secara tidak sempurna oleh manusia, dan kini sudah memasuki tahap akhir.
Dan sekarang saya sedang menyiapkan evolusi lainnya.
Namun, dalam prompt chaining, apakah tidak masalah jika masing-masing disebut agen, seperti LLM yang menjalankan prompt individual, worker eksekusi, worker orkestrator, evaluator LLM, dan sebagainya?
Ah, jadi ada konsep bahwa “kontrol alur kerja terakhir (LLM secara langsung memutuskan langkah berikutnya atau apakah akan menggunakan alat) disebut sebagai sifat agentik.” Saya paham. Berarti ini tulisan yang membahas dengan menargetkan autonomous agent. Saya sendiri masih belum terlalu paham soal agen...
Komentar Hacker News
https://github.com/astronomer/airflow-ai-sdk
Saya juga saat ini sedang membuat Computer-use Agent bernama UseDesktop.
https://youtu.be/aBkbsvMxP_A?si=uaugxKQEu4ZEz7jq
usedesktop.com
Karena itu, saya setuju dengan sebagian besar isi tulisan ini.
Tulisan ini lebih membahas gambaran besarnya daripada tips yang benar-benar praktis, jadi kalau menambahkan beberapa tips lagi saat mengembangkan agentic/agent berbasis LLM, pada akhirnya LLM itu berbasis transformer (yaitu penalaran berbasis probabilistik; berdasarkan token/state saat ini, ia bukan memahami konteks/semantik lalu mengucapkan kata berikutnya, melainkan menghasilkan output secara probabilistik). Karena itu, sebaik apa pun
sys promptyang kita berikan, cukup sering ia tidak memberikan jawaban yang kita inginkan (misalnya diminta menjawab dalam output JSON, tetapi kadang lupa menutup}dan sebagainya). Jadi, menambahkan beberapafallback fnberbasis regex selalu merupakan hal yang wajib.Lalu, kalau menulis
sys promptyang meminta structured output, biasanya lebih baik memakai non-reasoning model, dan semakin panjang context, semakin sering halusinasi muncul, jadi lebih baik membuat beberapasys promptlalu meng-chain-nya.Saat mengembangkan layanan, karena berbagai error bisa terjadi, kuncinya adalah merancang arsitektur layanan yang modular dan fault tolerant (misalnya
supervisor agentdibuat async dan agent lainnya sync), terutama untuk agentic/agent yang sering menghasilkan unexpected output.Karena itu, sejak awal sebaiknya menulis kode sambil menjaga SRP dan menulisnya secara declarative; saya ingin mengatakan bahwa pendekatan fungsional itu baik (= tidak ada side effect, dan flow-nya intuitif).
Lalu, tergantung apakah LLM dipakai lewat API atau kita akan melakukan model serving sendiri, tetapi jika Anda akan langsung men-serving SLM atau LLM, jangan lakukan model serving di server yang sama dengan backend hosting; akan lebih baik dan lebih fault tolerant jika IO bound task dan CPU bound tasks (yaitu task yang membutuhkan GPU, perkalian matriks, dan semacamnya) ditempatkan di server yang berbeda (misalnya hosting CPU bound task di runpod).
Masih ada banyak tips pengembangan lainnya, tetapi karena takut jadi terlalu panjang, saya tulis sampai di sini saja.
Semoga ini bisa membantu seseorang.
Terima kasih banyak telah berbagi pengalaman dan pendapat yang begitu berharga. Masukan dari orang yang benar-benar berada di lapangan seperti ini sangat membantu.