Kullanıcıdan gelen bir mesajı GPT API’sine iletirsiniz ve doğal-dil yanıtı yerine, model size hangi fonksiyonu hangi argümanlarla çağırmanız gerektiğini tam olarak söyleyen, yapılandırılmış bir JSON nesnesi döndürür. İşte buna fonksiyon çağırma denir — ve bu, LLM’lerle kurabileceğiniz uygulamaların türünü değiştirir.
Çoğu geliştirici “fonksiyon çağırma”yı duyduğunda, modelin kendi adlarına kod çalıştırdığını varsayar. Öyle değildir.
Fonksiyon çağırmayı kullanırken, LLM’in kendisi fonksiyonu çalıştırmaz. Bunun yerine, uygun fonksiyonu belirler, gerekli tüm parametreleri toplar ve bilgiyi yapılandırılmış bir JSON biçiminde sağlar.
Gerçek mantığı çalıştırmak hâlâ uygulamanızın sorumluluğudur. Model yalnızca neyi, hangi girdilerle çalıştırmanız gerektiğini söyler.
Bu ayrım, göründüğünden daha önemlidir ve entegrasyonunuzu nasıl tasarladığınızdan güvenlik yaklaşımınıza kadar her şeyi şekillendirir.
Fonksiyon Çağırma Gerçekte Nedir — ve İnsanların Sürekli Yanlış Anladığı Şeyler
Fonksiyon çağırma (araç çağırma olarak da bilinir), OpenAI modellerinin harici sistemlerle arayüz kurmasına ve eğitim verileri dışındaki verilere erişmesine yönelik güçlü ve esnek bir yol sağlar.
İsimlendirme ilk karışıklık kaynağıdır. İnsanlar modelin bir şeyleri çalıştırdığını sanır. Öyle değildir.
Fonksiyon çağırmaya dair birçok isim ve açıklama vardır, ancak hepsi şu ifadeye çıkar: “Fonksiyon çağırma, büyük dil modellerinin yapılandırılmış çıktı üretme yeteneğinin bir türüdür.” LLM’ler kendi başlarına herhangi bir fonksiyon çağırmaz; sizlerin önden sağladığı fonksiyonlar arasından hangisini çağırmanız gerektiğini önerirler.
İkinci karışıklık, eski API yüzeyiyle ilgilidir.
functions ve function_call parametreleri, 2023-12-01-preview sürümünün yayınlanmasıyla kullanımdan kaldırılmıştır. functions yerine tools parametresi kullanılmalıdır.
Eğer eski functions parametresini kullanan bir eğitici içeriği takip ediyorsanız, zaten kullanım dışı kalmış bir sözdizimiyle çalışıyorsunuz. Bunun yerine tools ve tool_choice kullanın.
Bir fonksiyon, JSON şemasıyla tanımlanan özel bir araç türüdür. Bir fonksiyon tanımı, modelin uygulamanıza veri iletmesine, böylece kodunuzun modelin önerdiği verilerle verilere erişmesine veya işlem yapmasına olanak tanır.
İşte bu şema, fonksiyon çağırmaya düz isteme göre güvenilirlik avantajını sağlar — modelin çıktıyı doğru biçimlendirmesini ummak yerine, yapıyı API düzeyinde zorlarsınız.
OpenAI API’de Fonksiyon Çağırma Nasıl Çalışır — Adım Adım
Araç çağırma, uygulamanız ile model arasında OpenAI API üzerinden gerçekleşen çok adımlı bir konuşmadır. Araç çağırma akışı beş üst düzey adımdan oluşur: modele çağırabileceği araçlarla birlikte bir istek gönderin...
İşte bu adımların her biri pratikte nasıl görünür.
Adım 1: Fonksiyon şemalarınızı tanımlayın. Her kullanılabilir fonksiyonu tools parametresi içinde bir JSON nesnesi olarak tanımlarsınız. Şema, fonksiyon adını, modelin ne zaman çağıracağına karar vermek için kullandığı doğal dilde bir açıklamayı ve JSON Schema geleneklerini izleyen bir parameters bloğunu içerir.
Açıklamanız ne kadar ayrıntılı olursa — fonksiyonun hangi durumlarda çağrılması gerektiği açısından — o kadar iyi. Ancak, fonksiyon açıklamalarının istemin bir parçası olduğunu ve aynı şekilde token tükettiğini unutmayın.
Adım 2: İsteği gönderin. Kullanıcının mesajını ve tools listenizi birlikte Chat Completions API’sine iletirsiniz. Model ikisini de görür.
Adım 3: Model bir fonksiyon çağırıp çağırmamaya karar verir.
Bir fonksiyon çağrısı, modelin bir istemi incelediğinde talimatları uygulamak için kullanılabilir araçlardan birini çağırması gerektiğine karar verirse, modelden alabileceğiniz özel bir yanıt türüne karşılık gelir. Örneğin model “Paris’te hava nasıl?” gibi bir istem alırsa, konum argümanı Paris olacak şekilde get_weather aracı için bir araç çağrısı döndürebilir.
Adım 4: Kodunuz fonksiyonu yürütür. Modelin yanıtını ayrıştırır, fonksiyon adını ve argümanlarını çıkarır ve gerçek kodu kendi çalışma zamanınızda çalıştırırsınız. API yapılandırılmış JSON döndürmüştür — ne yapacağınıza siz karar verirsiniz.
Adım 5: Sonucu geri gönderin.
Son olarak, araç tanımlarını, orijinal istemi, modelin araç çağrısını ve araç çağrısının çıktısını birlikte modele geri gönderirsiniz ve nihai metin yanıtını alırsınız
— örneğin “Bugün Paris’te hava 25°C.”
Çoğu eğitici içeriğin atladığı bir ayrıntı:
Fonksiyon tanımınızda strict: true ayarladığınızda, Structured Outputs modelin bir fonksiyon çağrısı için ürettiği argümanların sağladığınız JSON Şemasıyla birebir eşleşmesini garanti eder.
strict değerini true yapmak, fonksiyon çağrılarının en iyi çaba yerine şemaya güvenilir şekilde uymasını sağlar. OpenAI, katı modu her zaman etkinleştirmenizi önerir.
Her zaman. Bunu yapmamak için iyi bir neden yok.
Bilmeniz gereken bir konu da paralel fonksiyon çağırmadır.
Kullanıcı sorgusuna bağlı olarak, 6 Kasım 2023 veya sonrasında yayımlanan en yeni modelleri kullanırken, model paralel fonksiyon çağırmayı devreye alabilir.
Bu, “Londra ve Tokyo’da hava nasıl?” gibi tek bir isteğin, sıralı zincirleme yerine iki eşzamanlı araç çağrısını tetikleyebileceği anlamına gelir.
Fonksiyon Çağırmanın Gerçek Dünya Kullanım Alanları
Hava durumu örneği her yerde çünkü temizdir. Üretim ortamındaki gerçek kullanım alanları ise daha dağınık ve daha ilginçtir.
Canlı verilerle müşteri desteği hatları
Fonksiyon çağırma, birçok kullanım alanı için faydalıdır — örneğin, kullanıcı “son siparişlerim neler?” diye sorduğunda yanıt üretmeden önce en güncel müşteri verisini dahili bir sistemden çekmesi gereken bir yapay zekâ asistanı.
Model niyeti anlar, bağlamdan müşteri kimliğini çıkarır ve CRM’inizin dahili API’sini çağırır. Ne kırılgan regex’ler ne de eksik bir virgülle çöken istem şablonları.
Ölçekli yapılandırılmış veri çıkarımı
Ham metni alıp yapılandırılmış veriye dönüştüren ve bunu bir veritabanına kaydeden bir veri çıkarım hattı da güçlü bir uyumdur. Belge tipine özel ayrıştırma mantığını el yordamıyla yazmadan, binlerce belge boyunca tutarlı şemalar elde edersiniz.
Doğal dilden API’ye çeviri
Veri çıkarma ve etiketleme için LLM destekli çözümler, doğal dili API çağrılarına veya geçerli veritabanı sorgularına dönüştürmeye yardımcı olan uygulamalar ve bir bilgi tabanıyla etkileşime giren konuşmalı bilgi alma motorları — bunların hepsi, fonksiyon çağırmanın çıktı formatı garantisinden faydalanır. Çıktının aşağı akıştaki sistemleri sürmesi gerektiğinde, değişkenliğe tolerans yoktur.
Birden çok araçla ajantabanlı iş akışları
Geliştiriciler için fonksiyon çağırma, canlı hisse fiyatları, hava durumu veya son veritabanı kayıtlarını çekerek eğitim kesim tarihini aşmak üzere gerçek zamanlı veri erişimi sağlar. Ayrıca eylem yürütmeyi mümkün kılar — LLM’i durumu değiştiren, e-posta gönderen, CRM güncelleyen veya kod dağıtan aktif bir katılımcıya dönüştürür.
Sade bir sohbet botundan temel fark: model yalnızca metin üretmiyor, sistemleriniz arasında gerçek operasyonları orkestre ediyor.
Fonksiyon Çağırma En İyi Uygulamalar — Geliştiricilerin Genelde Yanlış Yaptıkları
Burası çoğu eğitici içeriğin tamamen atladığı bölüm; bu yüzden ekipler kendilerini sabaha karşı 2’de tuhaf üretim hatalarını ayıklarken buluyorlar.
Açıklamaları fazla muğlak yazmak. Model, fonksiyon açıklamanızı ne zaman çağıracağına karar vermek için kullanır. Açıklamanız “kullanıcı isteklerini işler” gibi jenerikse, modelin bunu tetiklemek için güvenilir bir sinyali yoktur. Tetik koşulu ve beklenen girdi yapısı konusunda net olun. Açıklamayı bir etiket değil, bir sözleşme gibi düşünün.
Tek seferde çok fazla fonksiyon ortaya koymak
Fonksiyon açıklamaları, giriş isteminde anlamlı miktarda token tüketebilir.
50+ aracı sistem istemine yüklemek iki sorun yaratır: maliyet ve gecikme, çünkü araç tanımları girdi token’larını tüketir; ve doğrulukta bozulma, çünkü araç seçeneklerinin sayısı arttıkça modelin doğru olanı seçme kabiliyeti azalır.
Kullanım senaryonuzun gerçekten ihtiyaç duyduğu en küçük fonksiyon setiyle başlayın.
Modelin parametre uydurmayacağını varsaymak. Uydurur.
Model parametre uydurabilir
— özellikle bir enum tarafından açıkça sınırlandırılmayan isteğe bağlı alanlar için. İşte tam da bu yüzden strict: true önemlidir: modelin şemanızın dışında alanlar icat etme imkânını ortadan kaldırır.
Çok turlu döngüyü ele almamak. Geliştiriciler sıklıkla mutlu yolu kurar — kullanıcı sorar, model fonksiyon çağırır, biter.
Modeller, tanımladığınız şemayla uyuşmayan fonksiyon çağrıları üretebilir veya dahil etmediğiniz bir fonksiyonu çağırmaya çalışabilir. Model beklenmedik fonksiyon çağrıları üretiyorsa, sistem mesajına “Yalnızca size sağlanan fonksiyonları kullanın.” gibi bir cümle eklemeyi deneyin.
Kenar durumlar için tasarlayın.
Yazma işlemleri öncesi onay adımını atlamak.
Özellikle kod çalıştırma, veritabanı güncelleme veya bildirim gönderme gibi eylemleri tetikleyen fonksiyon çağrılarının gerçek dünya etkilerinin farkında olun. Eylem alan fonksiyonlar için, yürütmeden önce kullanıcının işlemi onayladığı bir adımı uygulamak şiddetle tavsiye edilir.
Bir fonksiyon çağrısı veri silebiliyorsa, para gönderebiliyorsa veya harici durumu değiştirebiliyorsa, önce bir insanın onay vermesi gerekir.
Güvenlik ve Güvenilirlik Hususları
Fonksiyon çağırma, bir LLM’in yapabileceklerini genişletir. Aynı zamanda, bir saldırganın yaptırabileceklerini de genişletir.
Buradaki birincil tehdit, istem enjeksiyonudur.
İstem enjeksiyonlarının nihai hedefleri değişse de, aşağı akıştaki araç çağrıları yoluyla özel verilerin sızdırılması, uyumsuz eylemler alınması veya model davranışının istenmeyen şekilde değiştirilmesi gibi durumları içerebilir.
Fonksiyon çağrılarınız e-posta gönderebiliyor, veritabanı sorgulayabiliyor veya web kancalarını tetikleyebiliyorsa, bir enjeksiyon saldırısı yalnızca “senaryodan çıkan bir sohbet botu” değildir — potansiyel bir ihlaldir.
Yapay zekâ sistemleri sohbetin ötesine geçip araç çağırmaya ve eylem almaya başladıkça, istem enjeksiyonu çok daha ciddi bir sorun hâline gelir. Bir web sayfasına, belgeye veya harici araca gizlenmiş kötü niyetli bir talimat, sistem davranışını geçersiz kılmaya, hassas bilgileri açığa çıkarmaya veya modelin asla almaması gereken eylemleri tetiklemeye çalışabilir.
Azaltım stratejisi birkaç somut katmandan oluşur.
Güvenilmeyen verilerin asla doğrudan ajan davranışını yönlendirmeyeceği iş akışları tasarlayın. Düğümler arasında enjeksiyon riskinin akmasını sınırlamak için harici girdilerden yalnızca belirli yapılandırılmış alanları — örneğin enum’lar veya doğrulanmış JSON — çıkarın.
Bunun üzerine,
model tarafından üretilen tüm fonksiyon çağrılarını doğrulayın. Bu, parametrelerin kontrol edilmesini, çağrılan fonksiyonun gözden geçirilmesini ve çağrının amaçlanan eylemle uyumlu olduğunun sağlanmasını içerir.
Rahatsız edici bir gerçek:
“İstem enjeksiyonu, tıpkı web’deki dolandırıcılık ve sosyal mühendislik gibi, muhtemelen asla tamamen ‘çözülemeyecek.’”
Bu, OpenAI’nin kendi değerlendirmesidir. Pratikteki anlamı şudur: ajanik fonksiyon-çağırma sistemlerini modelin her zaman amaçlandığı gibi davranacağı varsayımıyla mimarlık etmeyin. Derinlemesine savunma — doğrulama, kapsamlı izinler, yıkıcı işlemler için insanın döngüde olması — tek makul duruştur.
Fonksiyon Çağırma vs. İstem Mühendisliği — Hangisini Ne Zaman Kullanmalı?
Bu karşılaştırma sürekli gündeme gelir. Kısa cevap: farklı problemleri çözerler ve ikisini karıştırmak, fonksiyon çağırma ile yapılabilecek bir iş için aşırı mühendislik istemlere, ya da iyi yazılmış bir sistem isteminin daha basit olacağı yerde kırılgan fonksiyon şemalarına yol açar.
İstem mühendisliği, modelin içsel muhakemesini yönlendirmek için metin girdileri tasarlamayı içerir — örneğin ondan “adım adım düşünmesini” istemek gibi.
Modelin nasıl düşündüğünü şekillendirir. Buna karşılık fonksiyon çağırma, modelin çıktıda ne ürettiğini şekillendirir ve bu çıktıyı doğrudan sisteminize yönlendirir.
Araç çağırma, LLM’in harici sistemlerle etkileşim kurmasını sağlayan yetenektir. Hangi aracı kullanacağına karar vermesine yardımcı olmak için istem mühendisliğini kullanırken, eylemi fiilen gerçekleştiren mekanizma araç çağırmadır. Muhtemelen ikisine de ihtiyacınız olacak, ancak amaçları farklıdır.
Fonksiyon çağırmanın, istem tabanlı yapılandırılmış çıktıya göre kilit bir teknik üstünlüğü:
araç çağırma modelin içine gömülü bir kavramdır. Modele belirli bir formatta yanıt döndürmesini açıklamak için token ve enerji harcamanıza gerek yoktur.
İstemde “yanıtını X, Y ve Z alanlarına sahip JSON olarak döndür” yazdığınızda, modelin tutarsız şekilde uyabileceği talimatlara token harcıyorsunuz. Fonksiyon çağırmada ise şema zorlaması API düzeyinde gerçekleşir.
Artık birçok LLM platformunda yerel olarak desteklenen fonksiyon-çağırma API’leri, katı veri doğrulaması ve programatik iş akışlarıyla entegrasyonu mümkün kılan, resmî ve şema odaklı bir arayüz sunar.
Bunu üretimde aşağı akış sistemlerine akacak veriler için istem mühendisliğine göre seçmenin gerçek nedeni budur: Bir kez üretime geçtiniz mi, güvenilirlik artık bir tercih değil, zorunluluktur.
| Boyut | İstem Mühendisliği | Fonksiyon Çağırma |
|---|---|---|
| Birincil amaç | Model muhakemesini ve tonu şekillendirmek | Sistem entegrasyonu için yapılandırılmış çıktı üretmek |
| Çıktı formatı | Serbest metin (veya metin biçimli JSON) | Zorlanan JSON şeması |
| Şema güvenilirliği | En iyi çaba; sapmaya eğilimli | strict: true ile garanti edilir |
| Token maliyeti | Basit çıktılar için daha düşük | Daha yüksek (fonksiyon tanımları token ekler) |
| Ne zaman kullanmalı | Muhakeme görevleri, metin üretimi, stil kontrolü | Yapılandırılmış veri çıkarımı, API orkestrasyonu, ajan eylemleri |
| İstem enjeksiyonu maruziyeti | Daha düşük (harici araç yürütme yok) | Daha yüksek (araç çağrıları gerçek dünya eylemlerini tetikleyebilir) |
Pratik sezgi: çıktı aşağı akıştaki bir sistemi sürmesi gerekiyorsa — veritabanı yazımı, bir API çağrısı, kodunuzda karar dalı — fonksiyon çağırmayı kullanın. Çıktı bir insanın okumasına yönelikse, istem mühendisliği genellikle yeterli ve daha ucuzdur.
Önemli Noktalar
| Konu | Unutulmaması Gerekenler |
|---|---|
| Nedir | Model, hangi fonksiyonun hangi argümanlarla çağrılacağını tanımlayan yapılandırılmış JSON üretir — fonksiyonu çalıştırmaz |
| Güncel API yüzeyi | tools ve tool_choice kullanın; eski functions ve function_call parametreleri kullanım dışıdır |
| Katı kip | Şema uyumunu zorlamak için fonksiyon tanımlarında her zaman strict: true ayarlayın |
| Paralel çağırma | Kasım 2023 sonrası yayımlanan modellerde desteklidir; tek bir istek birden çok araç çağrısını tetikleyebilir |
| Token maliyeti | Fonksiyon şemaları girdi token’ları tüketir; ortaya konan fonksiyon sayısını en aza indirin |
| Güvenlik | Tüm fonksiyon çağrısı çıktıları doğrulanmalıdır; güvenilmeyen harici içerik asla doğrudan araç çağrılarını yönlendirmemeli |
| vs. İstem Mühendisliği | Fonksiyon çağırma çıktı yapısını API düzeyinde zorlar; istem mühendisliği içsel muhakemeyi şekillendirir |
| Onay adımları | Gerçek dünya yan etkileri olan (yaz, gönder, sil) herhangi bir fonksiyon yürütmeden önce kullanıcı onayı gerektirmelidir |
Farklı modellerde fonksiyon çağırmayı denemek istiyorsanız — GPT-5.4, claude opus 4.7, gemini 3.1 pro — her biri için ayrı API kimlik bilgileri yönetmeden, CometAPI hepsine tek bir uç nokta ve anahtar üzerinden erişim sağlar; bu da modeller arası testleri anlamlı ölçüde daha az sürtünmeli kılar.
CometAPI altyapı yükünü ortadan kaldırır:
✅ 15+ modelde birleşik fonksiyon çağırma söz dizimi
✅ Tek bir API anahtarı — OpenAI/Anthropic/Google için ayrı hesap yok
✅ Otomatik şema çevirisi — bir kez yaz, her yerde test et
✅ Yerleşik maliyet takibi — model başına anlık token kullanımı karşılaştırması
Ücretsiz kredilerle test etmeye başlayın → Erişim Alın
