Cara Membuat AI Memanggil API dengan Function Calling
Function calling memungkinkan aplikasi berbasis AI menggunakan data atau menjalankan fungsi dari sistem di luar model. Dengan mekanisme ini, AI dapat membantu mengecek status pesanan, mengambil data produk, membaca informasi dari database, atau menjalankan proses tertentu melalui API.
Namun, model AI sebenarnya tidak mengeksekusi API secara langsung. Model hanya menghasilkan permintaan terstruktur yang menjelaskan fungsi mana yang perlu dipanggil beserta argumennya, kemudian aplikasi kamu yang memvalidasi permintaan tersebut dan menjalankan API sebenarnya.
Panduan ini akan membahas cara membuat AI memanggil API dengan function calling, mulai dari menyiapkan endpoint dan function schema sampai menangani autentikasi, rate limit, serta error.
Bagaimana Function Calling Membuat AI Bisa Menggunakan API?
Bayangkan sebuah model AI sebagai resepsionis yang memahami banyak pertanyaan, tetapi tidak memiliki akses langsung ke sistem internal perusahaan. Model mungkin memahami arti pertanyaan seperti “pesanan saya sudah sampai mana?”, tetapi model tidak mengetahui status pesanan terbaru tanpa mengambil data dari sistem.
Function calling memberikan daftar fungsi yang boleh digunakan oleh model untuk mendapatkan informasi tersebut. Setiap fungsi memiliki nama, deskripsi, dan parameter yang menjelaskan data apa saja yang harus diberikan sebelum fungsi dapat dijalankan.
Alur sederhananya berjalan seperti berikut:
- Pengguna mengirim pertanyaan kepada aplikasi AI.
- Model menentukan apakah pertanyaan tersebut membutuhkan sebuah fungsi.
- Model menghasilkan tool call yang berisi nama fungsi dan argumen.
- Aplikasi memvalidasi argumen lalu memanggil API sebenarnya.
- Aplikasi mengirim hasil API kembali kepada model.
- Model menyusun jawaban akhir untuk pengguna.
Dengan pola tersebut, model tidak perlu mendapatkan akses langsung ke database, API key, atau infrastruktur backend. Aplikasi tetap menjadi lapisan yang mengontrol setiap tindakan yang boleh dijalankan.
Istilah function calling dan tool calling sering digunakan dalam konteks yang berdekatan. Nama dan format implementasinya dapat berbeda pada setiap provider AI, tetapi prinsip dasarnya tetap sama, yaitu model menghasilkan permintaan terstruktur untuk menggunakan fungsi atau tool yang telah disediakan aplikasi.
Cara Membuat AI Memanggil API dengan Function Calling
1. Siapkan API yang Akan Dipanggil AI
Langkah pertama adalah memastikan API sudah dapat digunakan secara konsisten sebelum menghubungkannya dengan model AI. Function calling tidak akan memperbaiki API yang memiliki respons tidak konsisten, dokumentasi tidak jelas, atau endpoint yang sering gagal.
Kalau kamu masih mempelajari konsep dasarnya, kamu dapat memahami terlebih dahulu apa itu API dan bagaimana aplikasi saling bertukar data melalui endpoint.
API yang akan digunakan untuk function calling setidaknya perlu memenuhi beberapa kondisi berikut:
- Respons memiliki struktur yang konsisten. Endpoint sebaiknya mengembalikan struktur JSON yang dapat diprediksi agar aplikasi mudah membaca hasilnya.
- Parameter memiliki aturan yang jelas. Dokumentasi perlu menjelaskan tipe data, format, nilai wajib, dan batas nilai yang diterima.
- Endpoint memiliki versi yang stabil. Perubahan struktur API sebaiknya menggunakan versioning agar function schema lama tidak langsung rusak.
- Error memiliki format yang konsisten. API perlu membedakan kegagalan autentikasi, input tidak valid, resource tidak ditemukan, dan gangguan server.
REST API sering menjadi pilihan yang praktis karena request dan responsnya mudah dipetakan ke struktur JSON. Namun, aplikasi tetap dapat menggunakan protokol lain selama terdapat lapisan yang menerjemahkan argumen dari model ke format yang dibutuhkan sistem tujuan.
Jika aplikasi menggunakan banyak service atau endpoint, kamu juga dapat mempelajari fungsi API Gateway dalam arsitektur microservices. API Gateway dapat membantu memusatkan routing, autentikasi, serta pengendalian request sebelum permintaan diteruskan ke service tertentu.
2. Buat Function Schema agar Model Memahami API
Setelah endpoint siap, kamu perlu mendeskripsikan fungsi yang tersedia kepada model. Deskripsi tersebut biasanya menggunakan schema terstruktur yang menjelaskan nama fungsi, tujuan fungsi, dan parameter yang dibutuhkan.
Contoh schema sederhana dapat terlihat seperti berikut:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "name": "get_order_status", "description": "Mengambil status pesanan berdasarkan nomor order.", "parameters": { "type": "object", "properties": { "order_id": { "type": "string", "description": "Nomor unik pesanan dengan format ORD-XXXXX." } }, "required": ["order_id"] } } |
Format persis schema dapat berbeda pada setiap platform AI. Namun, model tetap membutuhkan informasi yang cukup jelas agar dapat memilih fungsi dan menghasilkan argumen yang sesuai.
Deskripsi fungsi sebaiknya tidak terlalu umum. Kalimat seperti “mengambil data pesanan” tidak menjelaskan kapan model perlu menggunakan fungsi tersebut.
Deskripsi yang lebih baik dapat menjelaskan tujuan dan kondisi penggunaannya, misalnya:
Mengambil status pesanan berdasarkan nomor order. Gunakan fungsi ini ketika pengguna menanyakan status pemrosesan atau pengiriman dan telah memberikan nomor pesanan.
Parameter juga membutuhkan deskripsi yang jelas. Kamu perlu mencantumkan format, satuan, nilai yang diperbolehkan, atau batas tertentu jika API memiliki aturan khusus.
3. Kirim Function Schema Bersama Permintaan ke Model
Aplikasi selanjutnya mengirim prompt pengguna bersama daftar fungsi yang dapat digunakan. Model kemudian membaca konteks percakapan dan menentukan apakah jawaban membutuhkan salah satu fungsi tersebut.
Jika model dapat menjawab tanpa data eksternal, model dapat langsung menghasilkan respons biasa. Namun, jika pengguna bertanya tentang informasi yang hanya tersedia pada sistem internal, model dapat menghasilkan tool call.
Sebagai contoh, pengguna dapat mengirim pertanyaan berikut:
“Pesanan ORD-12345 sekarang statusnya apa?”
Model dapat menghasilkan permintaan terstruktur yang secara konseptual berisi data seperti berikut:
|
1 2 3 4 5 6 7 |
{ "name": "get_order_status", "arguments": { "order_id": "ORD-12345" } } |
Pada tahap ini, API belum dipanggil. Aplikasi masih harus memeriksa tool call tersebut sebelum menjalankan fungsi apa pun.
4. Validasi Argumen Sebelum Menjalankan API
Model dapat menghasilkan JSON yang valid secara sintaksis tetapi tetap salah secara bisnis. Model misalnya dapat menghasilkan nomor pesanan dengan format yang salah, tanggal yang tidak logis, atau identifier yang tidak dikenal sistem.
Aplikasi harus menjalankan validasi sebelum meneruskan argumen ke API produksi.
Beberapa validasi yang dapat diterapkan meliputi:
- memeriksa tipe dan format data;
- memastikan parameter wajib memiliki nilai;
- membatasi rentang angka atau tanggal;
- memeriksa enum atau daftar nilai yang diizinkan;
- melakukan sanitasi pada input teks;
- memastikan pengguna memiliki izin untuk menjalankan operasi tersebut.
Validasi tetap diperlukan walaupun argumen berasal dari model AI. Aplikasi sebaiknya memperlakukan output model seperti input dari sumber eksternal yang belum dapat dipercaya sepenuhnya.
Jika validasi gagal, aplikasi dapat mengirimkan informasi error yang terstruktur kepada model. Model kemudian dapat meminta informasi tambahan kepada pengguna atau menghasilkan argumen baru yang sesuai dengan aturan.
5. Eksekusi API di Layer Aplikasi
Setelah argumen dinyatakan valid, aplikasi dapat menjalankan fungsi yang sesuai dan memanggil API sebenarnya. API key, token, database credential, dan informasi rahasia lainnya hanya digunakan pada tahap ini.
Pseudocode berikut menggambarkan alur sederhananya:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
const toolCall = getToolCall(modelResponse); const arguments = validateArguments( toolCall.name, toolCall.arguments ); const apiResult = await executeFunction( toolCall.name, arguments ); const finalResponse = await sendToolResultToModel( apiResult ); |
Kode produksi tentu membutuhkan penanganan autentikasi, timeout, logging, retry, dan error yang lebih lengkap. Namun, struktur tersebut menunjukkan bahwa aplikasi bertugas menjembatani keputusan model dengan sistem sebenarnya.
Server yang menjalankan backend juga perlu disesuaikan dengan kebutuhan aplikasinya. Kamu dapat membaca berbagai konfigurasi server untuk aplikasi web jika ingin memahami perbedaan setup backend sebelum melakukan deployment.
Jika backend AI membutuhkan runtime, worker, database, caching, atau konfigurasi server yang lebih fleksibel, kamu dapat menggunakan Cloud VPS DomaiNesia untuk menjalankan komponen aplikasi sesuai kebutuhan sistem.
6. Kirim Hasil API Kembali kepada Model
Hasil dari API belum tentu dapat langsung ditampilkan kepada pengguna. Respons API biasanya menggunakan struktur yang dibuat untuk kebutuhan aplikasi, bukan untuk komunikasi dalam bahasa manusia.
Aplikasi perlu mengirim hasil tersebut kembali kepada model sebagai hasil dari tool call. Model kemudian menggunakan data itu sebagai konteks untuk menyusun jawaban akhir.
Misalnya, API dapat menghasilkan respons berikut:
|
1 2 3 4 5 6 |
{ "order_id": "ORD-12345", "status": "shipped", "estimated_delivery": "2026-09-24" } |
Model kemudian dapat mengubah data tersebut menjadi jawaban yang lebih mudah dipahami pengguna, misalnya bahwa pesanan sudah dikirim dan diperkirakan tiba pada tanggal yang tercantum.
Dengan cara ini, model tetap bertugas menyusun bahasa dan memahami konteks percakapan. Aplikasi tetap mengendalikan akses ke data serta proses yang benar-benar dijalankan.
Amankan API Key dari Model
API key tidak boleh dimasukkan ke prompt, function schema, atau konteks lain yang dikirim kepada model. Aplikasi sebaiknya menyimpan credential tersebut di sisi server melalui environment variable atau sistem pengelolaan secret.
Model hanya perlu mengetahui nama fungsi, kegunaan fungsi, dan parameter yang boleh digunakan. Layer aplikasi kemudian menambahkan credential ketika benar-benar mengirim request kepada API tujuan.
Pendekatan tersebut juga memudahkan rotasi token. Developer dapat mengganti credential tanpa mengubah prompt atau function schema yang digunakan model.
Batasi Hak Akses Setiap Function
Setiap fungsi sebaiknya hanya mendapatkan akses yang benar-benar dibutuhkan. Fungsi untuk membaca status pesanan, misalnya, tidak membutuhkan credential yang memiliki hak untuk menghapus atau mengubah pesanan.
Pemisahan tersebut mengurangi dampak ketika model menghasilkan tool call yang tidak sesuai harapan. Prinsip yang sama juga dapat ditemukan pada implementasi level akses tool dalam Model Context Protocol atau MCP.
Operasi yang dapat mengubah atau menghapus data membutuhkan perlindungan lebih ketat. Aplikasi dapat meminta konfirmasi pengguna sebelum menjalankan transaksi, menghapus resource, atau melakukan perubahan yang sulit dibatalkan.
Atur Rate Limit untuk Function Calling AI
Satu permintaan pengguna dapat menghasilkan beberapa tool call secara berurutan. Sistem yang tidak mengendalikan jumlah request dapat membebani API internal atau mencapai batas penggunaan API pihak ketiga.
Aplikasi dapat menggunakan beberapa strategi untuk mengendalikan jumlah request:
- Throttling membatasi jumlah pemanggilan fungsi dalam periode tertentu.
- Exponential backoff memberi jeda yang semakin panjang ketika API menolak request sementara.
- Caching menyimpan hasil yang masih relevan agar aplikasi tidak mengulang request yang sama.
- Concurrency limit membatasi jumlah request yang dapat berjalan secara bersamaan.
Strategi tersebut menjadi semakin penting ketika aplikasi digunakan oleh banyak pengguna. Pengendalian request dapat menjaga API tetap responsif sekaligus mencegah satu sesi AI menggunakan resource secara berlebihan.
Jalankan Backend AI dengan Resource yang Lebih Fleksibel
Cloud VPS Turbo DomaiNesia dapat menjadi opsi ketika aplikasi membutuhkan kontrol server dan resource yang dapat disesuaikan dengan perkembangan workload.
Tangani Error secara Terstruktur
API tetap dapat mengalami kegagalan meskipun schema dan argumennya sudah benar. Gangguan jaringan, timeout, perubahan status resource, atau masalah pada service tujuan tetap dapat menyebabkan request gagal.
Aplikasi sebaiknya tidak mengirim stack trace mentah kepada model. Sebaliknya, aplikasi dapat mengubah error menjadi struktur yang menjelaskan jenis masalah dan tindakan yang masih memungkinkan.
Contoh respons error dapat menggunakan format berikut:
|
1 2 3 4 5 6 |
{ "error": "order_not_found", "message": "Nomor pesanan tidak ditemukan.", "retryable": false } |
Model dapat menggunakan informasi tersebut untuk memberi tahu pengguna bahwa nomor pesanan perlu diperiksa kembali. Jika error berasal dari gangguan sementara, aplikasi dapat memberi informasi bahwa permintaan dapat dicoba kembali.
Developer juga perlu menetapkan timeout untuk setiap request. Timeout mencegah satu API yang tidak merespons menahan seluruh alur function calling terlalu lama.
Kesimpulan
Function calling memungkinkan aplikasi AI menggunakan data dan fungsi dari sistem lain tanpa memberikan akses langsung kepada model. Aplikasi tetap menjadi lapisan yang memvalidasi argumen, menjalankan API, mengelola credential, dan mengendalikan hak akses.
Implementasi yang baik membutuhkan endpoint yang konsisten, schema yang jelas, validasi ketat, autentikasi server-side, rate limit, dan error handling yang terstruktur. Setelah alur dasarnya berjalan stabil, kamu dapat menambahkan fungsi lain secara bertahap sesuai kebutuhan aplikasi AI yang sedang dikembangkan.
