Anda meneruskan pesan pengguna ke GPT API, dan alih-alih jawaban bahasa alami, model mengembalikan kepada Anda sebuah objek JSON terstruktur yang memberi tahu Anda secara persis fungsi mana yang harus dipanggil dan dengan argumen apa. Itulah pemanggilan fungsi — dan hal ini mengubah jenis aplikasi yang dapat Anda bangun dengan LLM.
Sebagian besar pengembang mendengar "function calling" dan berasumsi model mengeksekusi kode atas nama mereka. Padahal tidak.
Saat menggunakan function calling, LLM itu sendiri tidak mengeksekusi fungsi. Sebaliknya, model mengidentifikasi fungsi yang sesuai, mengumpulkan semua parameter yang diperlukan, dan menyediakan informasinya dalam format JSON terstruktur.
Aplikasi Anda tetap bertanggung jawab menjalankan logikanya. Model hanya memberi tahu apa yang harus dijalankan dan dengan input apa.
Perbedaan itu lebih penting daripada kedengarannya, dan hal tersebut membentuk segalanya mulai dari bagaimana Anda mengarsitektur integrasi hingga bagaimana Anda memikirkan keamanan.
Apa Sebenarnya Function Calling Itu — dan Apa yang Sering Disalahpahami
Function calling (juga dikenal sebagai tool calling) menyediakan cara yang kuat dan fleksibel bagi model OpenAI untuk berinteraksi dengan sistem eksternal dan mengakses data di luar data latihan mereka.
Penamaan adalah sumber kebingungan pertama. Orang mengira model mengeksekusi sesuatu. Tidak.
Ada banyak nama dan penjelasan untuk function calling, tetapi semuanya bermuara pada satu pernyataan: "function calling adalah salah satu kemampuan keluaran terstruktur dari model bahasa besar." LLM tidak memanggil fungsi apa pun sendiri; mereka menyarankan fungsi mana yang harus Anda panggil dari fungsi-fungsi yang sudah Anda definisikan dan berikan kepada LLM di dalam prompt.
Kebingungan kedua ada pada permukaan API lama.
Parameter functions dan function_call telah dipensiunkan sejak rilis versi API 2023-12-01-preview. Pengganti untuk functions adalah parameter tools.
Jika Anda mengikuti tutorial yang menggunakan parameter functions lama, berarti Anda sudah menggunakan sintaks yang usang. Gunakan tools dan tool_choice sebagai gantinya.
Sebuah fungsi adalah jenis khusus dari tool, yang didefinisikan oleh skema JSON. Definisi fungsi memungkinkan model mengoper data ke aplikasi Anda, di mana kode Anda dapat mengakses data atau mengambil tindakan yang disarankan oleh model.
Skema itulah yang memberi function calling keunggulan keandalan dibandingkan prompting biasa — Anda tidak berharap model memformat keluaran dengan benar; Anda menegakkan struktur di tingkat API.
Cara Kerja Function Calling di OpenAI API — Langkah demi Langkah
Tool calling adalah percakapan multi-langkah antara aplikasi Anda dan model melalui OpenAI API. Alur tool calling memiliki lima langkah tingkat tinggi: membuat permintaan ke model dengan tool yang bisa dipanggil...
Berikut bagaimana setiap langkah tersebut terlihat dalam praktik.
Langkah 1: Definisikan skema fungsi Anda. Anda menjelaskan setiap fungsi yang tersedia sebagai objek JSON di dalam parameter tools. Skema mencakup nama fungsi, deskripsi bahasa alami yang digunakan model untuk memutuskan kapan harus memanggilnya, dan blok parameters yang mengikuti konvensi JSON Schema.
Semakin terperinci description Anda — dalam hal situasi kapan fungsi dapat dan seharusnya dipanggil — semakin baik. Perhatikan, bagaimanapun, bahwa deskripsi fungsi adalah bagian dari prompt dan karenanya mengonsumsi token.
Langkah 2: Kirim permintaan. Anda memanggil Chat Completions API dengan pesan pengguna dan daftar tools Anda. Model melihat keduanya.
Langkah 3: Model memutuskan apakah akan memanggil fungsi.
Panggilan fungsi mengacu pada jenis respons khusus yang dapat Anda terima dari model jika model menilai bahwa, untuk mengikuti instruksi, ia perlu memanggil salah satu tool yang tersedia baginya. Jika model menerima prompt seperti "how is the weather in Paris?" ia bisa merespons dengan panggilan tool untuk tool get_weather, dengan Paris sebagai argumen lokasi.
Langkah 4: Kode Anda mengeksekusi fungsi. Anda mengurai respons model, mengekstrak nama fungsi dan argumennya, lalu menjalankan kode aktual di runtime Anda. API mengembalikan JSON terstruktur — Anda yang memutuskan apa yang harus dilakukan dengannya.
Langkah 5: Kirim hasilnya kembali.
Anda kemudian mengirim seluruh definisi tool, prompt asli, panggilan tool dari model, dan output panggilan tool kembali ke model untuk akhirnya menerima respons teks
— sesuatu seperti "Cuaca di Paris hari ini adalah 25°C."
Satu detail yang dilewatkan oleh sebagian besar tutorial:
ketika Anda menetapkan strict: true dalam definisi fungsi Anda, Structured Outputs menjamin bahwa argumen yang dihasilkan model untuk panggilan fungsi akan persis sesuai dengan JSON Schema yang Anda sediakan.
Mengatur strict ke true akan memastikan panggilan fungsi patuh terhadap skema fungsi secara andal, alih-alih sekadar upaya terbaik. OpenAI merekomendasikan agar selalu mengaktifkan strict mode.
Selalu. Tidak ada alasan yang baik untuk tidak melakukannya.
Ada juga parallel function calling yang perlu diketahui.
Bergantung pada kueri pengguna, model akan melakukan parallel function calling jika menggunakan model-model terbaru yang dirilis pada atau setelah 6 November 2023.
Ini berarti satu permintaan seperti "bagaimana cuaca di London dan Tokyo?" dapat memicu dua panggilan tool secara simultan daripada dirantai secara berurutan.
Penggunaan Nyata Function Calling
Contoh cuaca ada di mana-mana karena bersih. Kasus penggunaan produksi nyata lebih berantakan dan lebih menarik.
Pipeline dukungan pelanggan dengan data langsung
Function calling berguna untuk banyak kasus penggunaan — misalnya, asisten AI yang perlu mengambil data pelanggan terbaru dari sistem internal ketika pengguna bertanya "apa pesanan saya baru-baru ini?" sebelum dapat menghasilkan respons.
Model memahami maksud, mengekstrak ID pelanggan dari konteks, dan memanggil API internal CRM Anda. Tanpa regex rapuh. Tanpa templat prompt yang mudah rusak hanya karena koma hilang.
Ekstraksi data terstruktur dalam skala besar
Sebuah pipeline ekstraksi data yang mengambil teks mentah, mengonversinya menjadi data terstruktur, dan menyimpannya dalam basis data juga sangat cocok. Anda mendapatkan skema yang konsisten di ribuan dokumen tanpa harus menyetel logika parsing per jenis dokumen.
Terjemahan bahasa alami ke API
Solusi bertenaga LLM untuk mengekstrak dan memberi tag data, aplikasi yang dapat membantu mengonversi bahasa alami menjadi panggilan API atau kueri basis data yang valid, serta mesin pengambilan pengetahuan percakapan yang berinteraksi dengan basis pengetahuan — semuanya mendapatkan manfaat dari jaminan format keluaran function calling. Ketika Anda membutuhkan keluaran untuk menggerakkan sistem hilir, Anda tidak bisa mentolerir variabilitas.
Alur kerja agen dengan banyak tool
Bagi pengembang, function calling memungkinkan akses data real-time untuk mengatasi cutoff pelatihan dengan mengambil harga saham langsung, cuaca, atau entri basis data terbaru. Ini juga memungkinkan eksekusi tindakan — mengubah LLM dari pengamat pasif menjadi peserta aktif yang memodifikasi state, seperti mengirim email, memperbarui CRM, atau melakukan deployment kode.
Perbedaan utama dari chatbot biasa: model tidak hanya menghasilkan teks, tetapi mengorkestrasi operasi nyata di seluruh sistem Anda.
Praktik Terbaik Function Calling — Hal yang Biasanya Salah Dipahami Pengembang
Ini adalah bagian yang paling sering dilewatkan oleh tutorial, yang membuat tim akhirnya men-debug kegagalan produksi aneh pada jam 2 pagi.
Menulis deskripsi yang terlalu samar. Model menggunakan deskripsi fungsi Anda untuk memutuskan kapan harus memanggilnya. Jika deskripsi Anda generik — seperti "memproses permintaan pengguna" — model tidak memiliki sinyal andal tentang kapan harus memicunya. Bersikaplah spesifik tentang kondisi pemicu dan bentuk input yang diharapkan. Anggap deskripsi sebagai kontrak, bukan label.
Membuka terlalu banyak fungsi sekaligus
Deskripsi fungsi dapat mengonsumsi sejumlah besar token dalam prompt input.
Memuat definisi untuk 50+ tool ke dalam system prompt menciptakan dua masalah: biaya dan latensi, karena definisi tool mengonsumsi token input; dan degradasi akurasi, karena semakin banyak opsi tool, semakin turun kemampuan model untuk memilih yang benar.
Mulailah dengan himpunan fungsi terkecil yang benar-benar dibutuhkan kasus penggunaan Anda.
Mengasumsikan model tidak akan berhalusinasi parameter. Model akan melakukannya.
Model dapat berhalusinasi parameter
— terutama untuk field opsional yang tidak jelas dibatasi oleh sebuah enum. Inilah alasan mengapa strict: true penting: ini menghilangkan kemampuan model untuk menciptakan field di luar skema Anda.
Tidak menangani loop multi-giliran. Pengembang sering membangun jalur bahagia — pengguna bertanya, model memanggil fungsi, selesai.
Model dapat menghasilkan panggilan fungsi yang tidak sesuai dengan skema yang Anda definisikan atau mencoba memanggil fungsi yang tidak Anda sertakan. Jika model menghasilkan panggilan fungsi yang tidak terduga, coba sertakan satu kalimat dalam system message yang mengatakan "Hanya gunakan fungsi yang telah disediakan untuk Anda."
Bangun untuk menghadapi kasus tepi.
Melewati langkah konfirmasi sebelum operasi tulis.
Sadari dampak dunia nyata dari panggilan fungsi yang Anda rencanakan untuk dieksekusi, terutama yang memicu tindakan seperti mengeksekusi kode, memperbarui basis data, atau mengirim notifikasi. Untuk fungsi yang mengambil tindakan, sangat disarankan menerapkan langkah di mana pengguna mengonfirmasi tindakan sebelum eksekusi.
Jika panggilan fungsi dapat menghapus data, mengirim uang, atau memodifikasi state eksternal, manusia harus menyetujuinya terlebih dahulu.
Pertimbangan Keamanan dan Keandalan
Function calling memperluas apa yang dapat dilakukan LLM. Ini juga memperluas apa yang dapat penyerang lakukan terhadapnya.
Ancaman utama di sini adalah injeksi prompt.
Tujuan akhir injeksi prompt bervariasi tetapi dapat mencakup mengekfiltrasi data privat melalui panggilan tool hilir, mengambil tindakan yang tidak selaras, atau mengubah perilaku model dengan cara yang tidak diinginkan.
Ketika panggilan fungsi Anda dapat mengirim email, melakukan kueri basis data, atau memicu webhook, serangan injeksi bukan hanya sekadar chatbot yang keluar dari naskah — itu adalah potensi pelanggaran.
Seiring sistem AI bergerak melampaui chat dan mulai memanggil tool serta mengambil tindakan, injeksi prompt menjadi masalah yang jauh lebih serius. Instruksi berbahaya yang disembunyikan dalam halaman web, dokumen, atau tool eksternal dapat mencoba menimpa perilaku sistem, mengekspos informasi sensitif, atau memicu tindakan yang seharusnya tidak dilakukan model.
Strategi mitigasinya memiliki beberapa lapisan konkret.
Rancang alur kerja agar data yang tidak tepercaya tidak pernah secara langsung mengarahkan perilaku agen. Ekstrak hanya field terstruktur tertentu — seperti enum atau JSON tervalidasi — dari input eksternal untuk membatasi risiko injeksi mengalir di antara node.
Di atas itu,
selalu verifikasi panggilan fungsi yang dihasilkan oleh model. Ini termasuk memeriksa parameter, fungsi yang dipanggil, dan memastikan bahwa panggilan tersebut selaras dengan tindakan yang dimaksudkan.
Satu fakta yang tidak nyaman:
"Prompt injection, seperti halnya penipuan dan rekayasa sosial di web, kemungkinan tidak akan pernah sepenuhnya 'terselesaikan.'"
Itu adalah penilaian OpenAI sendiri. Implikasi praktisnya adalah Anda tidak boleh mengarsitektur sistem function-calling yang bersifat agen dengan asumsi model akan selalu berperilaku seperti yang diinginkan. Pertahanan berlapis — validasi, izin dengan cakupan ketat, manusia di dalam loop untuk operasi destruktif — adalah satu-satunya sikap yang masuk akal.
Function Calling vs. Prompt Engineering — Kapan Menggunakan yang Mana
Perbandingan ini sering muncul. Jawaban singkatnya: mereka menyelesaikan masalah yang berbeda, dan menyamakan keduanya mengarah pada prompt yang terlalu direkayasa ketika function calling sudah cukup, atau skema fungsi yang rapuh saat system prompt yang dirancang baik akan lebih sederhana.
Prompt engineering melibatkan perancangan input teks untuk membimbing penalaran internal LLM — memintanya untuk "berpikir selangkah demi selangkah", misalnya.
Ini membentuk bagaimana model bernalar. Function calling, di sisi lain, membentuk apa yang dihasilkan model sebagai keluaran dan merutekannya langsung ke sistem Anda.
Tool calling adalah kapabilitas yang memungkinkan LLM berinteraksi dengan sistem eksternal. Sementara Anda menggunakan prompt engineering untuk membantu model memutuskan tool mana yang digunakan, tool calling adalah mekanisme yang benar-benar mengeksekusi tindakan. Anda kemungkinan membutuhkan keduanya, tetapi mereka memiliki tujuan yang berbeda.
Keunggulan teknis utama function calling dibanding keluaran terstruktur berbasis prompt:
tool calling adalah konsep yang tertanam langsung ke dalam model. Tidak perlu membuang token dan energi untuk mencoba menjelaskan kepada model bahwa ia harus mengembalikan format tertentu.
Ketika Anda membuat prompt yang mengatakan "kembalikan jawaban Anda sebagai JSON dengan field X, Y, dan Z," Anda menghabiskan token untuk instruksi yang mungkin diikuti model secara inkonsisten. Dengan function calling, penegakan skema terjadi di tingkat API.
API function-calling, yang kini didukung secara native di banyak platform LLM, menyediakan antarmuka formal yang digerakkan oleh skema yang memungkinkan validasi data ketat dan integrasi dengan alur kerja terprogram.
Itulah alasan nyata untuk memilihnya dibanding prompt engineering bagi data yang harus mengalir ke sistem hilir: keandalan bukanlah opsional ketika Anda berada di produksi.
| Dimensi | Prompt Engineering | Function Calling |
|---|---|---|
| Tujuan utama | Membentuk penalaran dan nada model | Menghasilkan keluaran terstruktur untuk integrasi sistem |
| Format keluaran | Teks bebas (atau JSON berbentuk teks) | Skema JSON yang ditegakkan |
| Keandalan skema | Upaya terbaik; rentan melenceng | Dijamin dengan strict: true |
| Biaya token | Lebih rendah untuk keluaran sederhana | Lebih tinggi (definisi fungsi menambah token) |
| Kapan digunakan | Tugas penalaran, generasi teks, kontrol gaya | Ekstraksi data terstruktur, orkestrasi API, tindakan agen |
| Paparan injeksi prompt | Lebih rendah (tanpa eksekusi tool eksternal) | Lebih tinggi (panggilan fungsi dapat memicu tindakan nyata) |
Heuristik praktis: jika keluarannya perlu menggerakkan sistem hilir — penulisan basis data, panggilan API, cabang keputusan dalam kode Anda — gunakan function calling. Jika keluarannya untuk dibaca manusia, prompt engineering biasanya cukup dan lebih murah.
Inti yang Perlu Diingat
| Topik | Apa yang Perlu Diingat |
|---|---|
| Apa itu | Model mengeluarkan JSON terstruktur yang menjelaskan fungsi mana yang dipanggil — model tidak mengeksekusi fungsinya |
| Permukaan API saat ini | Gunakan tools dan tool_choice; parameter functions dan function_call sudah dipensiunkan |
| Strict mode | Selalu tetapkan strict: true dalam definisi fungsi untuk menegakkan kepatuhan skema |
| Parallel calling | Didukung pada model yang dirilis setelah November 2023; satu permintaan dapat memicu banyak panggilan tool sekaligus |
| Biaya token | Skema fungsi mengonsumsi token input; minimalkan jumlah fungsi yang diekspos |
| Keamanan | Validasi semua output panggilan fungsi; jangan pernah biarkan konten eksternal tak tepercaya langsung mengarahkan tool |
| vs. Prompt Engineering | Function calling menegakkan struktur keluaran di level API; prompt engineering membentuk penalaran internal |
| Langkah konfirmasi | Fungsi dengan efek dunia nyata (tulis, kirim, hapus) harus meminta konfirmasi pengguna sebelum eksekusi |
Jika Anda ingin bereksperimen dengan function calling di berbagai model — GPT-5.4, claude opus 4.7, gemini 3.1 pro — tanpa harus memelihara kredensial API terpisah untuk masing-masing, CometAPI memberi Anda akses ke semuanya melalui satu endpoint dan kunci, yang membuat pengujian lintas model menjadi jauh lebih ringan friksi.
CometAPI menyelesaikan overhead infrastruktur:
✅ Sintaks pemanggilan fungsi terpadu di 15+ model
✅ Satu kunci API — tanpa akun terpisah untuk OpenAI/Anthropic/Google
✅ Translasi skema otomatis — tulis sekali, uji di mana saja
✅ Pelacakan biaya bawaan — bandingkan penggunaan token per model secara real-time
Mulai uji dengan kredit gratis → Dapatkan Akses
