Fonksiyon Çağırma (Function Calling) Nedir?
Kısa tanım
Fonksiyon çağırma (function calling ya da tool use), bir dil modelinin düz metin yerine, uygulamanın tanımladığı bir fonksiyonu hangi argümanlarla çağırmak istediğini yapılandırılmış biçimde, genellikle JSON olarak bildirmesidir. Fonksiyonun adı, açıklaması ve parametreleri JSON Schema ile tanımlanır. Çağrıyı model değil uygulama çalıştırır ve sonucu modele geri verir. Sipariş sorgulama, takvime kayıt ekleme ve veritabanı araması tipik örneklerdir.
Diğer adları: function calling, tool use, tool calling, araç kullanımı, araç çağırma

Model fonksiyonu çalıştırmaz, ister
En yaygın yanlış anlama, modelin sizin sunucunuzda kod çalıştırdığını düşünmektir. Gerçekte model yalnızca “şu fonksiyonu şu argümanlarla çağırmak istiyorum” diyen yapılandırılmış bir mesaj üretir. Bu mesajı okuyan, doğrulayan, gerçekten çalıştıran ve sonucu modele geri gönderen sizin uygulamanızdır. Bu ayrım, güvenliğin ve hata ayıklamanın da temelidir: Kontrol her zaman uygulamada kalır.
Sağlayıcılar aynı fikre farklı adlar verir. OpenAI function calling der ve bunu “tool calling” olarak da anar; Anthropic aynı mekanizmaya tool use der. Alan adları değişse de yapı aynıdır: ad, açıklama ve JSON Schema ile tanımlanmış parametreler.
Bir araç tanımı: JSON Schema örneği
Aşağıdaki tanım, bir mağaza asistanının sipariş durumunu sorgulayabilmesi için hazırlanmıştır. Parametre şeması standart JSON Schema'dır; Anthropic API'sinde input_schema, OpenAI'da parameters alanına yazılır:
{
"name": "siparis_durumu_getir",
"description": "Sipariş numarasına göre kargo ve teslimat durumunu döndürür. Yalnızca kullanıcı bir sipariş numarası verdiğinde kullan.",
"input_schema": {
"type": "object",
"properties": {
"siparis_no": {
"type": "string",
"description": "TR- ile başlayan sipariş numarası, ör. TR-48213"
}
},
"required": ["siparis_no"]
}
}Kullanıcı “TR-48213 numaralı siparişim nerede?” diye sorduğunda model metin yazmak yerine şuna benzer bir çağrı döndürür:
{ "name": "siparis_durumu_getir", "input": { "siparis_no": "TR-48213" } }Açıklama alanı süs değildir. Model bir aracı ne zaman kullanacağına büyük ölçüde bu metne bakarak karar verir; belirsiz bir açıklama, aracın yanlış durumda çağrılmasına ya da hiç çağrılmamasına yol açar.
Çağrı döngüsü adım adım
- Uygulama, kullanıcının mesajını kullanılabilir araçların tanımlarıyla birlikte modele gönderir.
- Model ya doğrudan cevap verir ya da bir (bazen birden fazla) araç çağrısı döndürür.
- Uygulama argümanları doğrular ve fonksiyonu kendi tarafında, genellikle bir API veya veritabanı sorgusu olarak çalıştırır.
- Sonuç, çağrının kimliğiyle eşleştirilerek modele geri gönderilir.
- Model sonucu kullanarak cevabı yazar ya da yeni bir araç çağrısı ister.
Bu döngü birden çok kez tekrarlandığında ve model hangi aracı hangi sırayla kullanacağına kendisi karar verdiğinde ortaya bir yapay zekâ ajanı çıkar.
Güvenli kullanım için kurallar
- Argümanları her zaman doğrulayın. Bazı API'ler çağrının şemaya birebir uymasını zorlayan katı (strict) bir mod sunar; yine de iş kurallarını (ör. sipariş gerçekten bu kullanıcıya mı ait?) sunucu tarafında kontrol etmek size düşer.
- Yetkiyi modelin sözüne değil, oturuma dayandırın. Kullanıcı kimliği argüman olarak modelden alınmamalı, oturumdan okunmalıdır.
- Yan etkili işlemlerde onay isteyin. Para çeken, kayıt silen veya e-posta gönderen araçlar kullanıcı onayı olmadan çalışmamalıdır. Tekrar denemelerde aynı işlemin iki kez yapılmaması için idempotency anahtarları kullanılabilir.
- Araç sonuçlarına güvenmeyin. Bir web sayfasından ya da e-postadan dönen metin, modele talimat vermeye çalışan ifadeler içerebilir; bu risk prompt enjeksiyonu olarak bilinir.
Fonksiyon çağırma, model ile tek bir uygulama arasındaki sözleşmedir. Araçların farklı sunuculardan standart bir yolla keşfedilip sunulması ise Model Context Protocol'ün konusudur.

