Cara Membangun Smart AI Gateway dengan Node.js untuk Multi-LLM Routing
Pelajari cara membangun custom AI gateway menggunakan Node.js dan Express untuk melakukan routing cerdas ke berbagai Large Language Model secara efisien. Tingkatkan fleksibilitas aplikasi AI Anda tanpa terikat pada satu vendor saja.
- Penulis
- Dahono AI
- Terbit
- Waktu baca
- 4 menit
- Pembaca
- 143 pembaca

Halo, tech enthusiast! Saat ini, hampir setiap aplikasi modern mengintegrasikan Large Language Model (LLM) seperti OpenAI GPT-4, Anthropic Claude, atau model open-source seperti Llama 3. Namun, masalah klasik yang sering muncul adalah vendor lock-in, lonjakan latensi, dan biaya API yang tidak terkontrol.
Bagaimana jika terjadi rate limit atau downtime pada salah satu provider? Tentu kita tidak ingin aplikasi kita ikut tumbang. Solusinya adalah membangun sebuah AI Gateway mandiri yang bertindak sebagai jembatan cerdas (smart router) untuk mengelola request ke berbagai LLM.
Pada tutorial kali ini, kita akan membahas langkah demi langkah cara membangun custom AI Gateway sederhana menggunakan Node.js dan Express. Sambil menyelam minum air, kita juga akan melihat bagaimana solusi seperti Dahono Router dapat mengotomatisasi semua kerumitan ini di level production.
Prasyarat
Sebelum kita mulai menulis kode, pastikan Anda telah menyiapkan:
- Node.js versi 18 atau yang terbaru.
- Pemahaman dasar tentang Express.js dan asynchronous JavaScript (
async/await). - API Key dari minimal dua provider (misalnya OpenAI dan Anthropic).
Langkah 1: Inisialisasi Proyek Node.js
Mari kita buat direktori baru untuk proyek kita, lalu inisialisasi project Node.js serta install dependencies yang dibutuhkan.
mkdir smart-ai-gateway
cd smart-ai-gateway
npm init -y
npm install express dotenv axios
Buat file .env di root direktori untuk menyimpan API key Anda dengan aman:
PORT=3000
OPENAI_API_KEY=sk-your-openai-key-here
ANTHROPIC_API_KEY=sk-ant-your-anthropic-key-here
Langkah 2: Membuat Server Express Dasar
Buat file bernama server.js. Di sini kita akan menyiapkan kerangka dasar server Express yang nantinya akan menerima incoming payload dari klien, lalu meneruskannya ke LLM yang dipilih berdasarkan parameter tertentu.
require('dotenv').config();
const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json());
const PORT = process.env.PORT || 3000;
// Endpoint utama AI Gateway
app.post('/v1/chat/completions', async (req, res) => {
const { provider, model, messages } = req.body;
try {
if (provider === 'openai') {
const response = await callOpenAI(model, messages);
return res.json(response);
} else if (provider === 'anthropic') {
const response = await callAnthropic(model, messages);
return res.json(response);
} else {
return res.status(400.json({ error: 'Provider tidak dikenal atau tidak didukung.' }));
}
} catch (error) {
console.error('Error saat memproses request:', error.message);
res.status(500).json({ error: 'Gagal memproses request ke LLM.' });
</tr>
});
app.listen(PORT, () => {
console.log(`AI Gateway berjalan di port ${PORT}`);
});
Langkah 3: Implementasi Handler untuk Masing-Masing Provider
Selanjutnya, tambahkan fungsi helper untuk melakukan dispatch request ke OpenAI dan Anthropic dengan format payload yang sesuai dengan standar masing-masing API.
async function callOpenAI(model, messages) {
const payload = {
model: model || 'gpt-4o-mini',
messages: messages
};
const response = await axios.post('https://api.openai.com/v1/chat/completions', payload, {
headers: {
'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`,
'Content-Type': 'application/json'
}
});
return response.data;
}
async function callAnthropic(model, messages) {
// Mengubah format messages OpenAI ke format Claude jika diperlukan
const payload = {
model: model || 'claude-3-haiku-20240307',
max_tokens: 1024,
messages: messages
};
const response = await axios.post('https://api.anthropic.com/v1/messages', payload, {
headers: {
'x-api-key': process.env.ANTHROPIC_API_KEY,
'anthropic-version': '2023-06-01',
'Content-Type': 'application/json'
}
});
return response.data;
}
Langkah 4: Menguji Gateway Lokal Anda
Jalankan server Node.js Anda dengan perintah:
node server.js
Sekarang, Anda bisa mengirimkan HTTP POST request menggunakan cURL atau Postman ke http://localhost:3000/v1/chat/completions dengan payload berikut:
{
"provider": "openai",
"model": "gpt-4o-mini",
"messages": [
{"role": "user", "content": "Halo, berikan sapaan singkat dalam bahasa Indonesia!"}
]
}
Tantangan di Level Production
Meskipun kode di atas bagus untuk memahami konsep dasarnya, membangun AI Gateway untuk skala produksi (enterprise) membutuhkan banyak fitur tambahan yang kompleks, antara lain:
- Fallback Otomatis: Jika OpenAI mengalami rate limit atau down, gateway harus otomatis mengalihkan request ke Claude atau Llama.
- Caching: Menyimpan respons untuk prompt yang sering diulang guna menghemat biaya.
- Rate Limiting & Cost Tracking: Membatasi penggunaan per pengguna dan memonitor biaya token secara real-time.
- Load Balancing: Mendistribusikan beban kerja secara merata ke beberapa key atau endpoint.
Jika Anda tidak ingin repot membangun dan memelihara infrastruktur AI Gateway dari nol, Anda bisa langsung memanfaatkan solusi siap pakai dari kami, yaitu Dahono Router. Produk AI Gateway kami dirancang khusus untuk mengelola, mengamankan, dan melakukan load balancing ke berbagai LLM dengan latensi minimal dan keandalan tinggi.
Kesimpulan
Membuat AI Gateway sendiri dengan Node.js memberikan kontrol penuh atas bagaimana aplikasi Anda berinteraksi dengan Large Language Model. Namun, untuk kebutuhan enterprise yang membutuhkan fitur failover, caching, dan observability tingkat lanjut, menggunakan platform khusus seperti Dahono Router adalah pilihan yang jauh lebih efisien.
Selamat mencoba, dan semoga artikel ini bermanfaat untuk arsitektur aplikasi AI Anda selanjutnya!
Kategori
- AI Gateway
- Node.js
- Multi-LLM
- Express.js
- Load Balancing AI
- Dahono Router