Function Calling & Tool Use: LLM’leri Gerçek Sistemlere Bağlamak
Yapay Zekâ Artık Sadece Cevap Vermiyor — Aksiyon Alıyor

Function Calling & Tool Use: LLM’leri Gerçek Sistemlere Bağlamak
Yapay Zekâ Artık Sadece Cevap Vermiyor — Aksiyon Alıyor
Bir önceki yazımda AI Agent’lardan — yani sadece konuşan değil, iş yapan sistemlerden bahsetmiştim. Peki bu agent’lar gerçek dünyada nasıl “iş yapıyor”? Bir müşterinin bakiyesini nasıl sorgulayabiliyor, bir siparişi nasıl oluşturabiliyor ya da bir veritabanına nasıl kayıt atabiliyor?
İşte bu sorunun cevabı iki kritik kavramda yatıyor: Function Calling ve Tool Use.
Bir yazılımcı olarak interface’ler, dependency injection ve API gateway’ler bizim günlük ekmeğimiz. Function Calling’i de tam olarak bu gözle düşünün: LLM ile dış dünya arasına koyduğunuz bir kontrat — bir interface tanımı. Siz modele “şu fonksiyonları çağırabilirsin” diyorsunuz, model de kullanıcının niyetini anlayıp doğru fonksiyonu, doğru parametrelerle çağırıyor.
Bu yazıda, function calling mekanizmasının nasıl çalıştığını, tool use ile farkını, gerçek dünya senaryolarını ve dikkat edilmesi gereken kritik noktaları bir yazılımcı gözüyle derinlemesine inceleyeceğiz.
Function Calling Nedir?
Function Calling, bir LLM’in (GPT-5, Claude, Gemini vb.) kullanıcı mesajını analiz edip, önceden tanımlanmış fonksiyonlardan hangisinin çağrılması gerektiğine ve hangi parametrelerle çağrılacağına karar vermesi sürecidir.
Kritik bir nokta: LLM fonksiyonu kendisi çalıştırmaz. Model sadece “şu fonksiyonu, şu parametrelerle çağır” der. Asıl çalıştırma sizin uygulamanızda — sizin kontrolünüzde gerçekleşir.
Klasik Yazılım Dünyası:
Kullanıcı → UI → Controller → Service → Repository → DB
Function Calling Dünyası:
Kullanıcı → LLM → Function Seçimi → Sizin API'niz → Service → Repository → DB
Gördüğünüz gibi LLM, klasik mimarideki Controller katmanının rolünü üstleniyor. Kullanıcının doğal dildeki isteğini yorumluyor, hangi endpoint’e gideceğine karar veriyor ve parametreleri hazırlıyor. Ancak iş mantığı (business logic) ve veri erişimi hâlâ tamamen sizin kontrolünüzde.
Neden Gerekli? Prompt Tek Başına Yetmiyor mu?
“Ama ben prompt ile her şeyi yaptırabiliyorum, neden function calling’e ihtiyaç duyayım ki?” diye düşünebilirsiniz. Haklısınız — bir yere kadar.
Prompt’un Sınırları
Diyelim ki bir bankacılık chatbot’u geliştiriyorsunuz ve kullanıcı şunu soruyor:
“123456 numaralı hesabımın bakiyesi ne kadar?”
Sırf prompt ile bu soruya gerçek bir cevap veremezsiniz. Çünkü:
- LLM’in veritabanına erişimi yoktur. Eğitim verisinde bu bilgi yoktur.
- LLM hallucinate edebilir. “Bakiyeniz 15.420 TL’dir” gibi uydurma bir cevap üretebilir.
- Gerçek zamanlı veri gerekir. Bakiye her an değişebilir.
Function Calling’in Çözümü
Function Calling ile modele şöyle dersiniz:
“Sana bir
getAccountBalancefonksiyonu tanımlıyorum. Kullanıcı bakiye sorarsa, bu fonksiyonu hesap numarasıyla çağır."
Model artık uydurma bir cevap üretmek yerine şunu döner:
{
"function_call": {
"name": "getAccountBalance",
"arguments": {
"accountNumber": "123456"
}
}
}
Siz bu JSON’u alırsınız, kendi API’nizi çağırırsınız, gerçek bakiyeyi çekersiniz ve sonucu modele geri verirsiniz. Model de bu gerçek veriyi kullanarak doğal dilde yanıt üretir:
“123456 numaralı hesabınızın güncel bakiyesi 15.420,00 TL’dir.”
İşte bu kadar. Artık LLM, gerçek veriyle konuşuyor.
Function Calling Nasıl Çalışır? Adım Adım
Adım 1: Fonksiyon Tanımı (Schema Definition)
İlk olarak, LLM’e hangi fonksiyonları kullanabileceğini söylersiniz. Bu tanım, bir interface tanımlamaktan farklı değildir:
{
"name": "getAccountBalance",
"description": "Verilen hesap numarasına ait güncel bakiye bilgisini getirir",
"parameters": {
"type": "object",
"properties": {
"accountNumber": {
"type": "string",
"description": "Sorgulanacak hesap numarası"
},
"currency": {
"type": "string",
"enum": ["TRY", "USD", "EUR"],
"description": "Bakiyenin gösterileceği para birimi"
}
},
"required": ["accountNumber"]
}
}
Burada dikkat edilmesi gereken birkaç nokta var:
**descriptionalanları kritik öneme sahiptir.** LLM, hangi fonksiyonu ne zaman çağıracağına bu açıklamalar sayesinde karar verir. Açıklama ne kadar net olursa, model o kadar doğru seçim yapar.**requiredalanı zorunlu parametreleri belirtir.** Kullanıcı para birimi belirtmezse model bu parametreyi göndermez ve siz default değeri kullanırsınız.**enumile seçenekleri kısıtlayabilirsiniz.** Model, kullanıcı "dolar" dese bile bunu"USD"olarak eşleştirir.
Adım 2: Kullanıcı Mesajı ve Model Kararı
Kullanıcı doğal dilde bir istek gönderir. Model bu isteği analiz eder ve iki karardan birini verir:
Karar A — Normal cevap: “Merhaba, nasıl yardımcı olabilirim?” gibi bir soru gelirse, fonksiyon çağırmaz, doğrudan metin üretir.
Karar B — Fonksiyon çağrısı: “Hesabımdaki parayı öğrenmek istiyorum, hesap numaram 123456” gibi bir istek gelirse, getAccountBalance fonksiyonunu seçer ve parametreleri çıkarır.
Bu karar süreci, LLM’in eğitim verisindeki milyarlarca örnekten öğrendiği niyet (intent) algılama yeteneğine dayanır. Prompt Engineering yazımda bahsettiğim gibi — model kelimeleri değil, niyeti anlar.
Adım 3: Fonksiyon Çalıştırma (Execution)
Model fonksiyon çağrısını döndürdükten sonra, top sizde. Bu JSON’u parse eder ve kendi sisteminizde ilgili fonksiyonu çalıştırırsınız:
// C# ile Function Call işleme örneği
public async Task<string> ProcessFunctionCall(FunctionCall functionCall)
{
return functionCall.Name switch
{
"getAccountBalance" => await HandleGetBalance(functionCall.Arguments),
"transferMoney" => await HandleTransfer(functionCall.Arguments),
"getTransactionHistory" => await HandleTransactionHistory(functionCall.Arguments),
_ => throw new NotSupportedException($"Unknown function: {functionCall.Name}")
};
}
Adım 4: Sonucu Modele Geri Verme
Fonksiyon sonucunu modele geri gönderirsiniz. Model bu gerçek veriyi kullanarak kullanıcıya doğal dilde, bağlama uygun bir cevap üretir:
Fonksiyon Sonucu: {"accountNumber":"123456","balance":15420.00,"currency":"TRY"}
Model Cevabı: "123456 numaralı hesabınızın güncel bakiyesi 15.420,00 TL'dir.
Başka bir işlem yapmak ister misiniz?"
Tool Use Nedir? Function Calling ile Farkı Ne?
“Function Calling” ve “Tool Use” terimlerini sıklıkla birbirinin yerine kullanıldığını görürsünüz. Teknik olarak aralarında ince ama önemli farklar vardır.
Function Calling (OpenAI Yaklaşımı)
OpenAI’ın popülerleştirdiği terim. Temel özellikleri:
- Modele fonksiyon tanımları (schema) verilir.
- Model, kullanıcı mesajına göre bir fonksiyon seçer.
- Tek seferde genellikle bir fonksiyon çağrısı yapılır (parallel function calling desteği sonradan eklendi).
- Dönüş formatı JSON’dur.
Tool Use (Anthropic / Genel Yaklaşım)
Anthropic’in Claude modeli ile öne çıkan terim. Daha geniş bir kavram:
- Function calling’i kapsayan bir üst kavramdır.
- Bir “tool” sadece fonksiyon değil; bir API, bir veritabanı sorgusu, bir dosya okuma işlemi, bir web araması veya bir kod çalıştırma ortamı olabilir.
- Çoklu araç kullanımı (multi-tool) doğal olarak desteklenir.
- Agent mimarilerinin temel yapı taşıdır.
Gerçek Dünya Senaryoları
Teoriyi yeterince konuştuk. Şimdi function calling’in gerçek dünyada nasıl kullanıldığına bakalım.
Senaryo 1: Akıllı Bankacılık Asistanı
Bir bankacılık uygulamasında müşteri temsilcisi chatbot’u düşünün:
Kullanıcı: “Dolar hesabımdan TL hesabıma 1000 dolar aktarmak istiyorum, güncel kur ne kadar?”
Bu tek cümlede model iki fonksiyonu sırasıyla çağırması gerektiğini anlar:
- Önce
getExchangeRate(from: "USD", to: "TRY")→ Kuru öğren - Sonra
transferMoney(fromAccount: "USD-xxx", toAccount: "TRY-xxx", amount: 1000)→ Transfer başlat
Hatta model, transferden önce kullanıcıya kuru gösterip onay isteyecek kadar “akıllı” davranabilir.
Senaryo 2: DevOps Asistanı
Kullanıcı: “Payment servisi yavaşlamış, son 1 saatteki hataları göster ve 3 instance’a çıkar.”
Model bu istekten üç fonksiyon çağrısı üretir:
getServiceHealth("payment-service")— Mevcut durumu kontrol etgetErrorLogs("payment-service", "1h")— Hata loglarını çekscaleService("payment-service", 3)— Ölçeklendir
Büyük Resim: Function Calling, Agent Ekosistemindeki Yeri
Bu seri boyunca anlattığım her kavram, aynı büyük resmin bir parçası:
- Attention Mekanizması → LLM’in “anlama” yeteneğinin temeli
- LLM Mimarisi → Tüm sistemin beyni
- Embeddings & Vector DB → Bilgi katmanının altyapısı
- RAG → Bilgi katmanının akışı
- Semantic Search → Bilgi katmanında arama
- Context Window & Memory → LLM’in çalışma belleği
- Prompt Engineering → LLM ile iletişim dili
- AI Agent’lar → Tüm parçaları birleştiren orkestratör
- Function Calling & Tool Use → Agent’ın dış dünyayla etkileşim köprüsü ← (Bu yazı)
Function Calling olmadan Agent sadece konuşur. Function Calling ile Agent iş yapar. Bu, tüm sistemin “kas gücü”dür.
✨ Makalenin Sonuna Geldik
Bir makalenin daha sonuna gelmiş bulunuyoruz. Umarım okurken hem öğrenmiş hem de keyif almışsınızdır! 🚀
Mutlu kodlamalar ve yeni keşiflerde görüşmek üzere! 😊
🌐 Takipte Kalın
메타데이터
- post_id
- b92d33dcbdc7
- slug
- function-calling-tool-use-llmleri-gerçek-sistemlere-bağlamak-b92d33dcbdc7
- url
- https://medium.com/@alifurkangokce/function-calling-tool-use-llmleri-ger%C3%A7ek-sistemlere-ba%C4%9Flamak-b92d33dcbdc7
- canonical_url
- https://medium.com/@alifurkangokce/function-calling-tool-use-llmleri-ger%C3%A7ek-sistemlere-ba%C4%9Flamak-b92d33dcbdc7
- author_url
- https://medium.com/@alifurkangokce
- status
- ok
- fetched_at
- 2026-06-09 15:37:30