Mengapa Aplikasi Agen Membutuhkan AG-UI
Sebelum melihat kodenya, izinkan saya menjelaskan mengapa kita memerlukan protokol baru sejak awal. Ini bermuara pada perbedaan mendasar antara fungsi dan agen.
Keterbatasan request/response
Dalam pengembangan web tradisional, interaksi bersifat transaksional. Anda meminta profil pengguna, dan server mengirimkannya. Ini pertukaran satu kali.
Agen, bagaimanapun, tidak dapat diprediksi dan memakan waktu. Saat Anda meminta agen untuk "debug mengapa pipeline CI Anda tiba-tiba mulai gagal setelah penggabungan rekan tim," ia tidak langsung mengembalikan objek JSON. Sebaliknya, ia mungkin:
- Mengambil 50 log commit terakhir dari GitHub (Action).
- Menyadari ada dependensi baru ditambahkan tanpa memperbarui lockfile (Observation).
- Mencocokkan versi paket tersebut dengan CVE yang diketahui (Reasoning).
- Menanyakan apakah Anda ingin rollback merge atau melakukan patch ke depan (Human-in-the-loop).
Saya akan menjelaskannya nanti di bagian "Jenis Event", tetapi untuk saat ini, ketahuilah bahwa permintaan HTTP standar akan time-out menunggu semua ini terjadi. Anda memerlukan cara untuk melakukan streaming pembaruan parsial ini agar pengguna tidak menatap layar yang membeku.
Kebutuhan spesifik agen
Agen memerlukan aliran informasi dua arah yang melampaui teks. Mereka perlu menyinkronkan State.
Bayangkan agen membantu Anda menulis laporan. Ia tidak sekadar mengobrol; ia mengedit dokumen. Baik Anda maupun agen mungkin mengetik pada waktu yang sama. AG-UI menangani ini dengan memperlakukan "dokumen" sebagai state bersama, menggunakan pembaruan efisien untuk menjaga layar Anda dan memori agen tetap sinkron tanpa saling menimpa pekerjaan.
Bagaimana Agen dan UI Berkomunikasi
AG-UI menggantikan model Remote Procedure Call (RPC) lama dengan model Event-Sourcing. Alih-alih menunggu jawaban akhir, agen mengirim aliran event yang stabil yang menjelaskan apa yang sedang dilakukannya.
Event stream
Anggap stream AG-UI sebagai ticker berita untuk "otak" agen Anda. Aplikasi klien (frontend Anda) berlangganan ticker ini dan memperbarui UI berdasarkan apa yang terlihat. Pendekatan ini melepaskan keterikatan logika: frontend React Anda tidak perlu tahu bagaimana agen berpikir, ia hanya perlu tahu apa yang harus ditampilkan.

AG-UI menghindari jeda menunggu. Gambar oleh Penulis.
Jenis event inti
Protokol mendefinisikan jenis event standar yang mencakup hampir setiap skenario interaksi. Berikut yang utama yang akan Anda lihat:
-
TEXT_MESSAGE_*: Event yang melakukan streaming teks yang dihasilkan secara bertahap. Ini biasanya melibatkan_START,_CONTENT(aliran token), dan_ENDyang bersama-sama menciptakan efek "mengetik" yang familier. -
TOOL_CALL: Menandakan bahwa agen ingin melakukan sesuatu, seperti memeriksa cuaca atau mengkueri database. Yang penting, AG-UI dapat melakukan streaming argumen dari pemanggilan alat, memungkinkan UI Anda mengisi formulir terlebih dahulu bahkan sebelum agen selesai "berbicara." -
STATE_DELTA: Inilah penggerak utama untuk kolaborasi. Alih-alih mengirim ulang seluruh dokumen setiap kali satu huruf berubah, agen mengirim "diff" kecil (seperti "tambahkan 'hello' pada indeks 5"). -
INTERRUPT: Katup pengaman. Jika agen mencapai tindakan sensitif (seperti "Delete Database"), ia memancarkan event interrupt. Alur berhenti sampai pengguna mengirim kembali event persetujuan.
Multimodalitas dan langkah berpikir
Protokol ini tidak terbatas pada teks. Ia menangani multimodalitas, yakni melakukan streaming gambar, audio, dan lampiran file bersamaan dengan percakapan. Ini juga menstandarkan Thinking Steps, memisahkan pemikiran internal agen (jejak penalaran) dari respons publik akhir. Anda mungkin memperhatikan pola serupa saat menggunakan alat seperti ChatGPT, di mana indikator progres atau langkah perantara ditampilkan terpisah dari respons akhir. Ini memungkinkan Anda memutuskan apakah akan menampilkan progres eksekusi kepada pengguna atau hanya hasil akhirnya.
Blok Pembangun AG-UI
Sekarang setelah Anda memahami alurnya, mari lihat fitur spesifik yang membuat AG-UI andal bagi pengembang.
Generative UI
Teks itu bagus, tetapi terkadang bagan lebih baik. Generative UI memungkinkan agen memutuskan saat runtime bahwa ia sebaiknya menampilkan komponen UI alih-alih teks.

AG-UI melakukan streaming event; A2UI mendefinisikan komponen. Gambar oleh Penulis.
Ada pembedaan di sini yang sering mengecoh orang (akan saya singgung lagi di bagian framework): AG-UI adalah mekanisme pengiriman (lapisan transport), dan A2UI (Agent-to-User Interface) adalah definisi UI (payload). Agen dapat menggunakan event TOOL_CALL AG-UI untuk mengangkut payload A2UI, sebuah pohon JSON deklaratif yang mendeskripsikan komponen UI (seperti "Kartu Harga Saham"). Frontend Anda menerimanya dan merender bagan sebenarnya.
State bersama dengan JSON Patch
Menangani state bersama itu rumit. Jika agen mengirim objek konteks 5MB besar setiap detik, aplikasi Anda akan tersendat.
AG-UI menyelesaikannya dengan JSON Patch (RFC 6902). Seperti yang saya sebutkan sebelumnya terkait sinkronisasi state, ketika agen mengubah nilai dalam memorinya, ia menghitung perbedaannya dan mengirim STATE_DELTA.
[
{
"op": "replace",
"path": "/user/status",
"value": "active"
}
]
Klien menerima instruksi ringan ini dan menerapkannya ke state lokalnya. Efisiensi inilah yang membuat kolaborasi real-time dengan agen menjadi mungkin.
AG-UI di Lanskap Protokol
Anda mungkin pernah mendengar protokol lain seperti MCP (Model Context Protocol). Penting untuk mengetahui posisi AG-UI dalam tumpukan agar Anda tidak menggunakan alat yang salah untuk pekerjaan yang ada.
Tumpukan agen
Saya suka menganggapnya sebagai segitiga komunikasi:
- MCP (Agen ↔ Alat): Menghubungkan agen ke dunia backend: database, repo GitHub, dan API internal. Ini tentang mendapatkan informasi.
- A2A (Agen ↔ Agen): Memungkinkan agen saling berbicara, mendelegasikan tugas ke sub-agen.
- AG-UI (Agen ↔ Pengguna): Ini adalah "Mil Terakhir." Menghubungkan kecerdasan agen ke pengguna manusia.

Trinitas Protokol yang menghubungkan agen. Gambar oleh Penulis.
AG-UI tidak peduli bagaimana agen mendapatkan data (itu tugas MCP, seperti yang saya sebutkan di atas); yang dipedulikan hanyalah bagaimana menampilkannya kepada Anda.
Menerapkan AG-UI
Mari lihat seperti apa praktiknya. Pengembang biasanya berinteraksi dengan AG-UI dalam tiga cara: membangun 1) Aplikasi Agen (menghubungkan frontend ke agen), membangun 2) Integrasi (membuat framework kompatibel), atau membangun 3) Klien (membuat frontend baru). Kebanyakan dari Anda akan berada di kategori pertama.
Saya akan menjelaskan kodenya sebentar lagi, tetapi pahami dulu bahwa Anda biasanya tidak akan menulis handler protokol mentah sendiri. Pustaka yang menangani pengemasan. Namun memahami alurnya diperlukan untuk debugging.
Membangun kanal event
Kebanyakan implementasi menggunakan Server-Sent Events (SSE) karena sederhana, ramah firewall, dan sempurna untuk streaming satu arah dari server ke klien. Saya sudah menyinggung ini sebelumnya, tetapi SSE adalah kunci yang membuat protokol ini begitu ringan dibandingkan WebSocket.
Dalam penyiapan tipikal (seperti dengan Microsoft Agent Framework atau CopilotKit), server Anda mengekspos endpoint yang meng-upgrade koneksi menjadi stream.
Langganan event sederhana
Berikut contoh konseptual bagaimana klien frontend mendengarkan stream. Perhatikan bagaimana kita menangani berbagai jenis event untuk memperbarui UI.
// Connect to the AG-UI stream
const eventSource = new EventSource('/api/agent/stream');
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
switch (data.type) {
case 'TEXT_MESSAGE_CONTENT':
// Append text to the chat window
updateChatLog(data.content);
break;
case 'TOOL_CALL_START':
// Show a "Processing..." indicator or the specific tool UI
showToolIndicator(data.tool_name);
break;
case 'STATE_DELTA':
// Apply the JSON patch to our local state store
applyPatch(localState, data.patch);
break;
case 'INTERRUPT':
// Prompt the user for permission
showApprovalModal(data.message);
break;
}
};
Pola ini menyembunyikan kompleksitas logika internal agen. Frontend Anda hanyalah "pemutar" untuk event yang dikirim agen.
Integrasi dan Dukungan Ekosistem
Anda tidak harus membangun semuanya dari nol. Ekosistem berkembang pesat, dengan platform dan framework besar berkonvergensi pada pola interaksi berbasis event yang serupa.
"Segitiga Emas" alat
Microsoft menggambarkan "Segitiga Emas" untuk pengembangan agen:
- DevUI: Untuk memvisualisasikan proses berpikir agen (debugging).
- OpenTelemetry: Untuk mengukur performa dan biaya.
- AG-UI: Untuk terhubung ke pengguna.
Framework yang didukung
Ekosistem ini berkembang pesat. Di luar para pemain besar, dukungan meluas di berbagai lini:
-
Microsoft Agent Framework: Memiliki middleware native untuk ASP.NET Core (
Microsoft.Agents.AI.Hosting.AGUI). -
CopilotKit: Bertindak sebagai "Browser" untuk AG-UI, menyediakan frontend React lengkap yang tahu cara merender event ini secara langsung.
-
Ekosistem Python: Framework seperti LangGraph, CrewAI, Mastra, Pydantic AI, Agno, dan LlamaIndex dapat diekspos sebagai endpoint AG-UI.
-
SDK: Meskipun TypeScript dan Python dominan, SDK aktif atau dalam pengembangan untuk Kotlin, Go, Dart, Java, dan Rust.
Keandalan, Debugging, dan Keamanan
Membuka jalur komunikasi langsung antara AI dan browser menimbulkan risiko. Berikut cara menjaga aplikasi Anda tetap aman.
Trusted frontend server
Jangan pernah membiarkan klien terhubung langsung ke runtime agen mentah Anda. Seperti yang saya tekankan di bagian "Mengapa Aplikasi Agen Membutuhkan AG-UI", selalu gunakan Trusted Frontend Server (pola BFF). Server ini bertindak sebagai penjaga gerbang. Ia menambahkan autentikasi, pembatasan laju, dan validasi input sebelum meneruskan pesan pengguna ke agen.
Pertimbangan keamanan
Prompt injection
Pengguna berbahaya mungkin mencoba menimpa instruksi agen Anda melalui serangan prompt injection. Seperti yang saya sebutkan sebelumnya, middleware Anda harus menyanitasi input.
Pemanggilan alat tidak sah
Hanya karena agen bisa menghapus file bukan berarti pengguna saat ini boleh melakukannya. Server tepercaya Anda harus memfilter alat yang tersedia bagi agen berdasarkan izin pengguna.
Keamanan state
Karena state dibagikan melalui JSON patch, waspadalah terhadap prototype pollution. Pastikan pustaka patch Anda melarang perubahan pada properti terlindungi seperti __proto__.
Debugging dengan Dojo
Jika agen Anda bertingkah aneh, gunakan AG-UI Dojo. Ini adalah suite pengujian yang memungkinkan Anda memvisualisasikan stream event mentah. Ini membantu Anda menemukan masalah seperti JSON patch yang salah bentuk atau pemanggilan alat yang berjalan tetapi tidak mengembalikan hasil.
Kesimpulan
Kita telah membahas arsitektur, jenis event, dan pola implementasi AG-UI.
Saya menyadari bahwa pengembang individu atau seseorang di perusahaan kecil tidak serta-merta akan "mengadopsi AG-UI" lalu tiba-tiba "memisahkan frontend dari backend". Semua ini memerlukan keputusan arsitektural yang signifikan, dukungan dari banyak tim, dan sumber daya yang tidak dimiliki kebanyakan orang.
Namun memahami AG-UI tetap penting meskipun Anda tidak menerapkannya. Saat Anda mengevaluasi framework agen atau memutuskan untuk membangun sendiri atau menggunakan platform, mengetahui seperti apa komunikasi agen-UI yang "baik" akan menajamkan penilaian Anda. Anda akan menyadari saat suatu alat memaksa Anda ke pola yang rapuh.
Jika Anda ingin menyelami lebih dalam membangun sistem ini, lihat kursus kami Introduction to AI Agents dan Building Scalable Agentic Systems untuk meningkatkan keterampilan Anda ke level berikutnya.

Saya seorang data engineer dan pembangun komunitas yang bekerja lintas pipeline data, cloud, dan perkakas AI sambil menulis tutorial praktis dan berdampak tinggi untuk DataCamp dan pengembang yang sedang berkembang.
FAQ AG-UI
Apakah streaming benar-benar membuat agen lebih cepat?
Ini tidak membuat AI berpikir lebih cepat, tetapi membuatnya terasa lebih cepat bagi pengguna. Melihat kata pertama muncul dalam 200 ms membuat orang tetap terlibat, meskipun jawaban lengkap memakan waktu sepuluh detik. Ini adalah trik psikologis sekaligus teknis.
Bagaimana jika saya ingin menambahkan dukungan suara nanti?
Anda sudah setengah jalan. Karena AG-UI memisahkan konten dari tampilan, Anda bisa langsung memasang layanan Text-to-Speech untuk membaca event TEXT_MESSAGE_* saat tiba. Protokol menangani aliran data; Anda tinggal memilih cara merendernya.
Apakah ini sulit di-debug jika terjadi kerusakan?
Sebenarnya, ini bisa lebih mudah daripada kode tradisional. Karena semuanya berupa event, Anda secara harfiah bisa "memutar ulang" sebuah bug. Jika pengguna melaporkan crash, Anda cukup mengambil log event mereka dan menjalankannya di lingkungan pengembangan untuk melihat persis apa yang terjadi.
Apakah saya terkunci pada vendor tertentu dengan ini?
Tidak, dan itu bagian terbaiknya. AG-UI adalah standar terbuka, bukan produk. Anda dapat mengganti backend dari LangChain ke Microsoft Semantic Kernel tanpa menulis ulang logika koneksi frontend.
Bagaimana cara menangani pembaruan protokol?
Protokol menggunakan penomoran versi semantik. Sebagian besar pustaka dibangun agar kompatibel ke depan, artinya jika server mengirim jenis event baru yang tidak dikenal klien Anda, biasanya akan diabaikan alih-alih menyebabkan crash.
Bisakah saya menjalankan agen AG-UI secara lokal tanpa backend cloud?
Tentu. AG-UI hanyalah pola komunikasi, bukan layanan. Anda dapat menjalankan agen dan frontend di laptop Anda jika mau. Beberapa pengembang menggunakannya untuk demo offline atau aplikasi yang sensitif terhadap privasi.
Bagaimana jika server saya lambat dan event datang sangat lama?
Keindahan streaming adalah lambat tetap lebih baik daripada beku. Bahkan jika agen Anda butuh 30 detik untuk selesai, pengguna melihat progres setiap beberapa ratus milidetik. Bandingkan dengan panggilan REST di mana mereka menatap spinner selama 30 detik dan mengira aplikasi crash.
Bisakah banyak pengguna berbicara dengan agen yang sama sekaligus?
Ya, tetapi Anda perlu menangani isolasi sesi. Setiap pengguna mendapatkan stream event mereka sendiri (biasanya ditautkan ke session ID atau koneksi WebSocket). Agen dapat melayani ratusan pengguna secara bersamaan, seperti halnya server web menangani banyak permintaan HTTP.
Bagaimana cara mencegah seseorang membanjiri agen saya dengan permintaan?
Pembatasan laju standar berlaku di sini. Trusted frontend server Anda harus membatasi permintaan per pengguna (mis., maks 10 pesan per menit). Karena AG-UI berjalan di atas HTTP atau WebSocket, Anda dapat menggunakan alat yang sama dengan yang biasa dipakai untuk rate limiting API.
Bagaimana saya menulis pengujian terotomatisasi untuk agen AG-UI?
Anda dapat memalsukan stream event. Rekam event dari sesi nyata ke sebuah file, lalu putar ulang dalam suite pengujian Anda untuk memverifikasi frontend menangani dengan benar. Ini seperti snapshot testing, tetapi untuk percakapan alih-alih komponen UI.

Peralihan dari bot generasi teks sederhana ke agen otonom telah mematahkan cara tradisional kita membangun perangkat lunak. Dahulu, Anda mengirim permintaan dan mendapat respons. Namun model yang mampu menjadi agen (seperti GPT-5.2-Codex yang baru, sebagai salah satu contoh) tidak bekerja seperti itu. Mereka bernalar, merencanakan, menggunakan alat, dan mungkin memerlukan menit untuk menyelesaikan tugas. Mereka menampilkan sinyal progres dan meminta izin sebelum dapat memperbarui dasbor secara real-time.
Mencoba memaksa interaksi yang cair dan berjalan lama ini ke dalam API REST standar ibarat mencoba melakukan streaming video langsung melalui email. Hasilnya biasanya tumpukan kode kustom yang mengikat frontend Anda erat dengan backend, sehingga sulit mengganti alat atau melakukan skala.
Panduan ini memperkenalkan Anda pada Protokol Agent-User Interaction (AG-UI), sebuah standar nyata yang semakin mendapat dukungan dan dirancang untuk memperbaiki "silo interaksi" ini. Saya akan menunjukkan bagaimana AG-UI menciptakan bahasa universal bagi agen dan UI, bagaimana ia menangani keadaan yang kompleks, dan bagaimana Anda dapat mulai menggunakannya untuk membangun aplikasi agen yang tangguh.
Catatan sebelum kita mulai: Bahasa dalam artikel ini mungkin terasa asing kecuali Anda menguasai pengembangan web backend/frontend dan pola desain API.