Ketika Atasan Bilang "Tambahkan AI, Ya"
Banyak developer sekarang menerima permintaan yang sama: aplikasi web yang sudah bertahun-tahun berjalan di produksi diminta "punya fitur AI" — pencarian yang lebih pintar, ringkasan otomatis, atau chatbot yang paham data internal. Godaan pertamanya adalah menulis ulang sistem dengan framework AI terbaru. Hampir selalu, itu keputusan yang mahal dan berisiko.
Kabar baiknya, kemampuan AI bisa ditambahkan secara bertahap. Artikel ini membahas lima pola arsitektur yang memungkinkan aplikasi existing mendapat fitur AI tanpa rombak total: sidecar service, queue asinkron, pgvector di database yang sudah ada, server MCP untuk API internal, serta feature flag dan kuota untuk rilis bertahap.
1. Sidecar Service: Pisahkan Logika AI dari Aplikasi Utama
Prinsip pertama: jangan biarkan panggilan ke model AI berada di jalur kritis aplikasi utama. Panggilan LLM lambat, latensinya tidak stabil, dan bisa gagal karena rate limit penyedia. Jika kode itu menyatu dengan monolit, satu timeout bisa menahan worker web dan memperlambat seluruh situs.
Pola sidecar menempatkan logika AI di layanan terpisah — misalnya service kecil berbasis Python atau Node — yang dipanggil aplikasi utama lewat HTTP internal. Keuntungannya:
- Isolasi kegagalan: jika service AI mati, aplikasi utama tetap melayani fitur lama dan cukup menampilkan fallback.
- Dependensi terpisah: library AI yang berat tidak mencemari dependensi aplikasi utama.
- Skala independen: service AI bisa ditambah instansinya tanpa ikut menggandakan aplikasi web.
Aplikasi utama cukup tahu satu kontrak sederhana, misalnya POST /summarize dengan timeout ketat beberapa detik.
2. Queue dan Job Asinkron untuk Proses Lama dan Mahal
Tidak semua pekerjaan AI perlu dijawab seketika. Membuat ringkasan artikel, menghasilkan gambar, atau menghitung embedding ribuan dokumen sebaiknya dilempar ke queue. Pengguna mendapat respons cepat ("sedang diproses"), sedangkan worker di belakang mengerjakannya.
Pola ini memberi beberapa kontrol penting:
| Kebutuhan | Cara queue membantu |
|---|---|
| Biaya API | Batasi jumlah worker agar pengeluaran terkendali |
| Rate limit penyedia | Retry dengan backoff tanpa membebani request web |
| Keandalan | Job gagal bisa diulang atau dipindah ke dead-letter queue |
| Pengalaman pengguna | Halaman tetap responsif, hasil muncul saat siap |
Satu catatan: job yang memanggil layanan eksternal tidak selalu aman untuk di-retry otomatis. Jika operasinya punya efek samping (mengirim pesan, misalnya), simpan penanda "sudah diproses" agar tidak terjadi duplikasi.
3. Menambahkan pgvector ke Database Existing
Pencarian semantik dan RAG (Retrieval-Augmented Generation) butuh penyimpanan vector. Anda tidak wajib memasang vector database baru. Jika sudah memakai PostgreSQL, ekstensi pgvector (mendukung Postgres 13 ke atas) memungkinkan embedding disimpan berdampingan dengan data yang ada:
CREATE EXTENSION vector;
ALTER TABLE articles ADD COLUMN embedding vector(1024);
Kolom baru ini bersifat nullable, sehingga query lama tidak terganggu. Isi kolomnya secara bertahap lewat job di queue. Untuk pencarian, pgvector menyediakan operator jarak seperti <-> (L2), <#> (negative inner product), dan <=> (cosine distance).
Secara default pgvector melakukan exact search dengan recall sempurna. Saat data membesar, tambahkan indeks HNSW (performa query lebih baik, build lebih lambat) atau IVFFlat (build lebih cepat). Dokumentasi pgvector menyarankan CREATE INDEX CONCURRENTLY di produksi agar proses pembuatan indeks tidak memblokir operasi tulis. Perhatikan juga batas dimensi: tipe vector bisa diindeks hingga 2.000 dimensi, sedangkan halfvec hingga 4.000 dimensi dengan presisi setengah.
Kualitas retrieval juga penting. Riset Anthropic tentang Contextual Retrieval menunjukkan bahwa menambahkan konteks singkat (sekitar 50–100 token) pada setiap chunk sebelum di-embed menurunkan kegagalan retrieval hingga 35%, menjadi 49% bila dikombinasikan dengan BM25 kontekstual, dan 67% bila ditambah reranking. Mereka juga mencatat: jika basis pengetahuan Anda di bawah 200.000 token, memasukkan seluruhnya ke dalam prompt bisa lebih sederhana daripada membangun RAG.
4. Bungkus API Internal sebagai Server MCP
Daripada menulis integrasi khusus untuk setiap asisten atau model, pertimbangkan Model Context Protocol (MCP). MCP adalah protokol terbuka untuk memberi LLM akses aman ke tools dan sumber data. Repositori modelcontextprotocol/servers berisi implementasi referensi seperti Fetch, Filesystem, Git, Memory, dan Time, sementara SDK resminya tersedia dalam banyak bahasa — termasuk PHP, Python, TypeScript, Go, dan Java.
Artinya, endpoint internal yang sudah ada (cek status pesanan, cari produk, ambil laporan) bisa dibungkus sebagai tools MCP. Setiap klien yang mendukung MCP langsung bisa memakainya tanpa integrasi tambahan. Logika bisnis tetap tinggal di API lama; server MCP hanya menjadi lapisan tipis di atasnya.
Repositori tersebut sendiri menegaskan bahwa server di sana adalah implementasi referensi, bukan solusi siap produksi. Terapkan autentikasi, batasi tools yang hanya-baca bila memungkinkan, dan audit setiap pemanggilan.
5. Feature Flag, Rollback Plan, dan Kuota
Fitur AI sebaiknya tidak dirilis ke semua pengguna sekaligus. Gunakan feature flag untuk mengaktifkannya bagi admin, lalu sebagian kecil pengguna, baru kemudian semua. Siapkan juga rencana rollback yang jelas:
- Mematikan flag harus mengembalikan perilaku lama tanpa deploy ulang.
- Migrasi database bersifat aditif (kolom baru, tabel baru), sehingga tidak ada yang perlu di-revert.
- Simpan log setiap panggilan AI — model, latensi, token, status — untuk evaluasi.
Terakhir, pasang kuota: batas panggilan per pengguna per hari dan batas anggaran bulanan. Tanpa itu, satu skrip iseng atau bug loop bisa menghabiskan anggaran API dalam semalam.
Penutup
Menambahkan AI ke aplikasi yang sudah jalan bukan soal menulis ulang, melainkan soal menambah lapisan dengan batas yang jelas: logika AI di sidecar, pekerjaan berat di queue, embedding di PostgreSQL lewat pgvector, akses data lewat MCP, dan semuanya dijaga feature flag serta kuota. Dengan pola ini, sistem lama tetap stabil sementara fitur baru diuji secara bertahap dan aman.
Referensi
- Anthropic — Introducing Contextual Retrieval: https://www.anthropic.com/engineering/contextual-retrieval
- Model Context Protocol Servers: https://github.com/modelcontextprotocol/servers
- pgvector: https://github.com/pgvector/pgvector