Yapay zeka ajani arac kullanimi

Bir dil modeli, eğitildiği veriyle dünyayı belli bir ana kadar "bilir" ama o anın hava durumunu söyleyemez, veritabanınızı sorgulayamaz, e-posta gönderemez. Saf bir LLM kapalı bir kutudur: metin alır, metin üretir. Yapay zeka ajanlarını ilginç kılan şey ise tam burada başlar; ajan, dış dünyaya uzanıp gerçek eylemler gerçekleştirebilen bir LLM'dir. Peki bu uzanmayı teknik olarak nasıl yapar? Bu yazıda mekanizmayı katman katman açıyoruz: function calling (araç kullanımı), API çağrıları, MCP standardı, ReAct akıl yürütme deseni ve ajan belleği.

Temel sorun: model çalıştırmaz, yalnızca ister

İlk ve en çok yanlış anlaşılan nokta şudur: dil modeli bir fonksiyonu kendisi çalıştırmaz. Model yalnızca "şu fonksiyonu, şu argümanlarla çağırmak istiyorum" diyen yapısal bir çıktı üretir. Gerçek çalıştırmayı modeli saran uygulama (ajan iskeleti) yapar. OpenAI'nin resmi dokümantasyonu bunu açıkça belirtir: model bir aracı çağırmaya karar verdiğinde, çağrıyı "bir id (sonuçları geri göndermek için kullanılır) ve bir name ile JSON kodlu argümanlar içeren" bir veri yapısı olarak döndürür. Yani model fonksiyonu icra etmez; niyetini makine-okunur biçimde bildirir.

Bu ayrım kritiktir, çünkü güvenlik ve kontrol burada yaşar. Model bir SQL silme komutu "istese" bile, çalıştırıp çalıştırmamaya karar veren sizin kodunuzdur. LLM beyin, ajan iskeleti ise elleri ve onay mekanizmasıdır.

Function calling ve MCP

Function calling: araçları modele tarif etmek

Bir ajana araç vermek, ona o aracın ne işe yaradığını ve hangi girdileri beklediğini anlatmakla başlar. Bu tarif bir JSON Schema ile yapılır. OpenAI'de her fonksiyon tanımı dört temel parçadan oluşur: bir name (örneğin get_weather), bir description (ne zaman ve nasıl kullanılacağı), parameters ("fonksiyonun girdi argümanlarını tanımlayan JSON şeması") ve isteğe bağlı strict modu.

Açıklama alanı sanıldığından çok daha önemlidir. Model, hangi aracı seçeceğine büyük ölçüde bu doğal dil açıklamasına bakarak karar verir. İyi yazılmış bir açıklama, modelin doğru anı yakalamasını sağlar; muğlak bir açıklama yanlış araç seçimine yol açar.

Anthropic'in Claude için tool use modeli de aynı mantıkla çalışır ama akışın evrelerini net biçimde isimlendirir. Varsayılan tool_choice değeri auto olduğunda Claude her turda bir araç çağırmak ile doğrudan yanıt vermek arasında kendisi karar verir: "istek o aracın tarif edilen yeteneğine karşılık geliyorsa ve cevap bağlamda zaten yoksa" aracı çağırır; sabit bilgi, yaratıcı görev veya sohbet için doğrudan yanıt verir.

Akışın evreleri

Claude'un dokümantasyonundaki istemci-taraflı (client tool) akış, ajan döngüsünün temel ritmini gösterir:

  • İstek + araç tanımları: Kullanıcı mesajıyla birlikte modele tools dizisi gönderilir.
  • Karar: Model bir aracı çağırmaya karar verirse yanıtı stop_reason: "tool_use" ile durur ve bir veya daha fazla tool_use bloğu döndürür. Bu blok aracın adını ve modelin ürettiği yapısal girdiyi (input) içerir.
  • Çalıştırma: Sizin kodunuz operasyonu gerçekleştirir (API çağrısı, dosya okuma, hesaplama).
  • Sonucun geri verilmesi: Sonuç, ilgili çağrıya referans veren bir tool_result bloğu olarak modele geri gönderilir. OpenAI tarafında bu eşleştirme call_id ile yapılır.
  • Nihai yanıt: Model sonucu bağlama katar ve ya nihai cevabı üretir ya da gerekirse yeni bir araç çağrısı yapar.

Buradaki en önemli kavram şudur: argümanların şemaya uyma garantisi. Şema ihlalleri ajanları kırar. Bu yüzden hem OpenAI hem Anthropic strict bir mod sunar; Claude dokümantasyonunda tanımlara strict: true eklemenin "araç çağrılarının şemanıza tam olarak uymasını garantilediği" söylenir.

İstemci araçları ve sunucu araçları

Her aracın icra yeri aynı değildir. Claude'un modeli bu ayrımı somutlaştırır: istemci araçları (client tools) sizin uygulamanızda çalışır; model tool_use döndürür, siz çalıştırır, tool_result ile yanıtlarsınız. Sunucu araçları (server tools — örneğin web araması, kod çalıştırma) Anthropic'in altyapısında çalışır ve sonucu doğrudan gelir, icra yükünü siz taşımazsınız. Bu, "araç" kavramının tek tip olmadığını, bir spektrum olduğunu hatırlatır.

ReAct deseni ve otonom ajanlar

API çağrıları: aracın altındaki gerçek iş

"Araç" çoğu zaman bir API çağrısının ince bir sarmalıdır. Modelin gördüğü get_weather(location) tanımının arkasında, ajan iskeletinin yaptığı sıradan bir HTTP isteği vardır. Modelin katkısı, doğal dildeki muğlak isteği ("yarın şemsiye lazım mı?") yapısal, doğrulanabilir bir argüman kümesine ({"location": "Ankara"}) çevirmektir. Dönen ham JSON yanıtı ise tekrar modele beslenir ve model bunu insana anlaşılır bir cümleye dönüştürür. Yani ajan, doğal dil ile katı API sözleşmeleri arasında iki yönlü bir çevirmen gibi çalışır.

MCP: araçları tek bir standartta birleştirmek

Her geliştirici kendi araçlarını kendi yöntemiyle tanımlarsa, ortaya N adet uygulama ile M adet araç arasında N×M tane ayrı entegrasyon çıkar. Model Context Protocol (MCP), Anthropic'in açık kaynak olarak başlattığı ve modelcontextprotocol.io'da belgelenen bu standardı çözmeyi hedefler. Resmî dokümantasyon MCP'yi "yapay zeka uygulamalarını dış sistemlere bağlamak için açık kaynaklı bir standart" olarak tanımlar ve onu "yapay zeka uygulamaları için bir USB-C portu"na benzetir.

MCP bir istemci-sunucu mimarisi kullanır ve üç katılımcı tanımlar:

  • MCP Host: Claude Desktop, VS Code gibi, bir veya birden çok istemciyi yöneten yapay zeka uygulaması.
  • MCP Client: Bir sunucuyla birebir bağlantı tutan ve ondan bağlam alan bileşen.
  • MCP Server: İstemcilere bağlam ve yetenek sağlayan program (yerel veya uzak).

İletişim, JSON-RPC 2.0 tabanlı bir veri katmanı üzerinden yürür ve sunucuların sunabildiği üç temel ilkel (primitive) vardır: Tools (çalıştırılabilir fonksiyonlar), Resources (bağlam sağlayan veri kaynakları) ve Prompts (yeniden kullanılabilir şablonlar). İşin zarif yanı keşif mekanizmasıdır: istemci önce tools/list çağrısıyla sunucunun hangi araçları sunduğunu sorar, dönen yanıttaki her araç name, description ve inputSchema alanlarını taşır; ardından tools/call ile aracı çalıştırır. Yani MCP araçları, function calling'in tanıdığı aynı JSON Schema biçimine oturur — MCP, araç kullanımının taşınabilir bir paketleme standardıdır. Üstelik araçlar değiştiğinde sunucu notifications/tools/list_changed bildirimi göndererek istemcinin listesini canlı tutabilir.

ReAct: akıl yürütme ile eylemi iç içe örmek

Araç çağırma mekaniğini bildikten sonra geriye şu soru kalır: model ne zaman ve neden bir aracı çağıracağına nasıl karar verir, üstelik çok adımlı bir görevde? Buradaki temel desen ReAct'tir. Shunyu Yao ve arkadaşlarının 2022'de yayımlayıp ICLR 2023'te sunduğu "ReAct: Synergizing Reasoning and Acting in Language Models" (arXiv 2210.03629) makalesi, bu yaklaşımın kaynağıdır.

ReAct'in fikri basit ama güçlüdür: o güne dek dil modellerinin akıl yürütme (chain-of-thought gibi düşünme izleri) ve eylem (eylem planı üretme) yetenekleri ayrı ayrı çalışılıyordu. ReAct bunları iç içe örer. Model, düşünce (Thought) ve eylem (Action) adımlarını dönüşümlü üretir. Makalenin ifadesiyle akıl yürütme izleri "modelin eylem planlarını çıkarmasına, izlemesine ve güncellemesine, ayrıca istisnaları ele almasına" yardım ederken; eylemler de "bilgi tabanları veya ortamlar gibi dış kaynaklarla arayüz kurarak ek bilgi toplamasına" izin verir.

Pratikte bir ReAct döngüsü şöyle akar:

  • Thought (Düşünce): "Kullanıcı yarınki havayı soruyor; önce konumu netleştirmem, sonra hava durumu aracını çağırmam gerek."
  • Action (Eylem): get_weather(location="Ankara") aracını çağır.
  • Observation (Gözlem): Araçtan dönen sonucu (örneğin sıcaklık ve yağış olasılığı) bağlama al.
  • Gerekirse döngü baştan başlar; model yeni bir düşünce üretir, yeni bir araç çağırır.

Bu "düşün – eylemde bulun – gözlemle" çevrimi, bugünkü ajan iskeletlerinin kalbidir. Function calling mekaniği bu döngünün "eylem" ve "gözlem" adımlarını teknik olarak gerçekleştiren motordur; ReAct ise modelin bu adımları akıllıca sıralamasını sağlayan düşünce çerçevesidir. Makale, yalnızca akıl yürüten veya yalnızca eylemde bulunan önceki yöntemlere kıyasla dört farklı benchmark'ta daha iyi sonuç verdiğini bildirir.

Ajan belleği: döngüyü bir bağlamda tutmak

Bir LLM'in kendiliğinden kalıcı hafızası yoktur; her çağrı, kendisine verilen bağlam penceresiyle sınırlıdır. O halde çok adımlı bir ajan, önceki düşüncelerini, çağırdığı araçları ve dönen gözlemleri nasıl "hatırlar"? Cevap, bu geçmişin her turda yeniden modele beslenmesidir. ReAct döngüsündeki her Thought–Action–Observation üçlüsü, bir sonraki adımın bağlamına eklenir; böylece model nereye geldiğini, neyi denediğini ve neyin işe yaramadığını görebilir.

Bu, belleğin iki düzeyini doğurur. Kısa vadeli bellek doğrudan bağlam penceresidir: o anki konuşma, araç çağrıları ve sonuçlar. Ancak bağlam penceresi sınırlı olduğundan uzun görevlerde bu yetmez. Uzun vadeli bellek ise bilginin dışarıda saklanıp ihtiyaç anında geri getirilmesidir — ki bu da çoğu zaman bir araçla yapılır. MCP'nin Resources ilkeli ya da bir arama aracı, ajanın geçmiş bilgiyi bağlam dışında tutup gerektiğinde çekmesinin yoludur. Yani ajan belleği büyülü bir bileşen değil, döngünün dikkatli biçimde kurgulanmış bağlam yönetimidir.

Sonuç

Yapay zeka ajanlarının "araç kullanması" tek bir sihirli yetenek değil, birbirine geçmiş birkaç sade mekanizmanın toplamıdır. Model bir fonksiyonu çalıştırmaz, JSON Schema ile tarif edilmiş bir aracı yapısal argümanlarla çağırmak ister; ajan iskeleti bu çağrıyı icra eder ve sonucu geri besler. MCP bu araç tanımlarını taşınabilir bir standarda oturtur, ReAct deseni modelin düşünce ile eylemi dönüşümlü örmesini sağlar, bellek ise tüm bu döngüyü tutarlı bir bağlamda tutar. LLM'in dış dünyayla teması, işte bu katmanların birlikte çalışmasıyla mümkün olur — kapalı kutu, böylece ellerini uzatabilen bir aktöre dönüşür.