AI Ajanları Nasıl Çalışır? Planlama, Araç ve Hafıza

Yayın tarihi:

13 dk okuma

Acar Diveroli
Yazar: Acar Diveroli
Hedef kartından ajan küpüne, araç çipine ve hafıza yığınına uzanan, üstte kesik bir geri besleme döngüsü olan çizim

Bir sohbet botuna "Türkiye'deki üç büyük e-ticaret sitesinde bu ürünün fiyatını karşılaştır" dediğinizde size ya eğitim verisinden hatırladığı eski bilgiyi verir ya da bunu yapamayacağını söyler. Aynı isteği bir AI ajanına verdiğinizde ise ajan işi adımlara böler: önce siteleri arar, sonra her ürün sayfasını açar, fiyatı çıkarır, bulamadığı yerde başka bir yol dener ve sonunda bir tablo hazırlar. İki sistemin arkasında aynı tür dil modeli olabilir; farkı, modelin etrafına kurulan döngü, araçlar ve hafıza yaratır.

Bu yazıda AI ajanının ne olduğunu ve sohbet botundan farkını, ajanın her adımda tekrarladığı algıla-planla-uygula-değerlendir döngüsünü, planlamanın, araç kullanımının (function calling) ve hafızanın nasıl çalıştığını anlatıyoruz. Ardından ajanların web'e hangi yollarla çıktığını, neden hata yaptıklarını ve bir işin ajan mı yoksa önceden tanımlı bir iş akışı mı gerektirdiğine nasıl karar verileceğini ele alıyoruz.

AI ajanı nedir, sohbet botundan farkı ne?

Sohbet botu, her mesaja tek bir yanıt üretir. Konuşma geçmişini hatırlayabilir, ama kendi başına bir eylem başlatmaz, bir işin sonucunu kontrol edip yeni bir adım atmaz. Siz sorarsınız, o cevaplar.

AI ajanı ise bir hedefle çalışır ve o hedefe ulaşmak için hangi adımları atacağına kendisi karar verir. Anthropic'in etkili ajanlar oluşturma yazısı bu ayrımı şöyle yapar: önceden kodla tanımlanmış yollarda dil modeli ve araçları birbirine bağlayan sistemler iş akışıdır (workflow); modelin kendi sürecini ve araç kullanımını dinamik olarak yönettiği sistemler ise ajandır.

ÖzellikSohbet botuİş akışıAI ajanı
Adımları kim belirler?Kullanıcı, her mesajdaGeliştirici, koddaModel, çalışma sırasında
Araç kullanımıYok veya tek seferlikÖnceden tanımlı sıraylaGerektiğinde, model seçer
Adım sayısıTek yanıtSabitDeğişken, hedefe göre
Hata karşısındaKullanıcı yeniden sorarTanımlı yedek yolModel başka yol dener
ÖngörülebilirlikYüksekYüksekDüşük
Maliyet ve gecikmeDüşükOrtaYüksek, adım sayısına bağlı
Uygun olduğu işSoru-cevap, metin üretimiTekrarlayan, iyi tanımlı süreçlerAdımları önceden bilinmeyen açık uçlu işler

Ajan döngüsü nasıl işler?

Bir ajanın çalışmasını tek bir döngünün tekrarı olarak düşünmek en doğru modeldir. Döngü, hedefe ulaşılana ya da bir durma koşulu gerçekleşene kadar sürer.

  1. Algıla. Ajan mevcut durumu toplar: kullanıcının hedefi, konuşma geçmişi, önceki adımların sonuçları, varsa hafızadan getirilen bilgiler. Bunların hepsi modelin bağlam penceresine girer.
  2. Planla. Model bu bağlama bakarak sıradaki eylemi seçer. Bu bazen "önce arama yapmalıyım" gibi tek bir adım, bazen de birkaç adımlık bir plandır.
  3. Uygula. Model bir araç çağrısı üretir: hangi aracı hangi parametrelerle çalıştırmak istediğini yapılandırılmış biçimde yazar. Uygulama bu çağrıyı gerçekten yürütür.
  4. Değerlendir. Aracın sonucu modele geri verilir. Model sonucun hedefe yaklaştırıp yaklaştırmadığına bakar: beklenen veri geldi mi, bir hata mı oluştu, plan değişmeli mi?
  5. Tekrarla ya da bitir. Hedefe ulaşıldıysa model son yanıtı üretir. Ulaşılmadıysa döngü birinci adıma döner. Maksimum adım sayısı, bütçe sınırı veya kullanıcı onayı gibi durma koşulları döngünün sonsuza kadar sürmesini önler.

Bu döngünün en bilinen ifadelerinden biri, 2022'de yayımlanan ReAct makalesidir. Makale, modelin "düşünme" (akıl yürütme metni) ile "eylem" (araç çağrısı) adımlarını art arda üretmesinin, yalnızca akıl yürütmeye veya yalnızca eyleme dayanan yaklaşımlara göre daha iyi sonuç verdiğini gösterir. Bugünkü ajan çerçevelerinin çoğu bu fikrin bir türevini kullanır.

Aşağıdaki iskelet, döngünün sağlayıcıdan bağımsız hâlini gösterir. call_model fonksiyonu kullandığınız modelin API'siyle değiştirilir:

python
MAX_STEPS = 10

def run_agent(goal, tools, call_model):
    messages = [{"role": "user", "content": goal}]
    for step in range(MAX_STEPS):
        reply = call_model(messages, tools)          # planla
        messages.append(reply.as_message())
        if not reply.tool_calls:                      # araç istemiyorsa iş bitti
            return reply.text
        for call in reply.tool_calls:                 # uygula
            try:
                result = tools[call.name](**call.arguments)
            except Exception as exc:                  # hatayı modele geri ver
                result = f"Araç hatası: {exc}"
            messages.append({"role": "tool", "tool_call_id": call.id, "content": str(result)})
        # değerlendirme bir sonraki call_model çağrısında yapılır
    return "Adım sınırına ulaşıldı, iş tamamlanamadı."

Döngünün iki kritik ayrıntısı koddan okunabilir: araç hataları programı çökertmez, modele geri verilir ki başka bir yol deneyebilsin; ve MAX_STEPS gibi bir durma koşulu her zaman vardır.

Planlama nasıl yapılır?

Planlama, ajanın büyük bir hedefi yürütülebilir adımlara bölmesidir. Yaygın yaklaşımlar şunlardır:

  • Adım adım (ReAct tarzı): Model her döngüde yalnızca bir sonraki eylemi seçer. Esnektir, çünkü her adımın sonucu bir sonrakini etkiler. Uzun işlerde yönünü kaybetme riski vardır.
  • Önce planla, sonra uygula: Model başta tam bir plan çıkarır, ardından adımları sırayla yürütür. İş öngörülebilir olduğunda verimlidir; beklenmedik bir sonuç çıktığında planın yeniden yapılması gerekir.
  • Görev ayrıştırma: Ana ajan işi alt görevlere böler ve her birini ayrı bir alt ajana veya ayrı bir model çağrısına verir. Paralel araştırma işlerinde kullanılır.
  • Öz değerlendirme (reflection): Model ürettiği sonucu ayrı bir adımda eleştirir ve gerekirse düzeltir. Kalite artar, ama her değerlendirme ek maliyet ve gecikme demektir.

Hangi yaklaşımın seçileceği işin yapısına bağlıdır. Adımları büyük ölçüde önceden bilinen bir iş için baştan plan, her adımın sonucu bir sonrakini belirleyen bir araştırma işi için adım adım yaklaşım daha uygundur.

Araç kullanımı (function calling) nasıl çalışır?

Dil modeli kendi başına bir web sayfasını açamaz, bir veritabanını sorgulayamaz, dosya yazamaz. Bunları yapabilmesi için uygulama modele araç tanımları verir. Model bir aracı kullanmak istediğinde, düz metin yerine o aracın şemasına uyan yapılandırılmış bir çağrı üretir. OpenAI'nin function calling belgesi ve diğer sağlayıcıların eşdeğer belgeleri bu akışı aynı mantıkla tanımlar.

Bir araç tanımı üç parçadan oluşur: ad, modelin aracın ne işe yaradığını anlayacağı açıklama ve parametrelerin JSON Schema biçimindeki tanımı. Örneğin bir ürün sayfasından fiyat getiren araç şöyle tanımlanabilir:

json
{
  "name": "urun_fiyati_getir",
  "description": "Verilen ürün sayfası adresini açar ve sayfadaki fiyatı ile para birimini döndürür. Yalnızca izin verilen alan adlarındaki adresler için kullanın.",
  "input_schema": {
    "type": "object",
    "properties": {
      "url": {
        "type": "string",
        "description": "Ürün sayfasının tam adresi, https:// ile başlar"
      },
      "ulke": {
        "type": "string",
        "enum": ["TR", "DE", "US"],
        "description": "Fiyatın hangi ülkeden görünen hâlinin istendiği"
      }
    },
    "required": ["url"]
  }
}

Parametre şemasının alan adı sağlayıcıya göre değişir; bazı API'ler input_schema, bazıları parameters kullanır. Mantık aynıdır.

Bir araç çağrısının akışı:

  1. Uygulama, kullanıcının isteğini ve araç tanımlarını modele gönderir.
  2. Model, aracı kullanması gerektiğine karar verirse urun_fiyati_getir adını ve {"url": "https://...", "ulke": "TR"} gibi argümanları içeren bir çağrı döner.
  3. Uygulama bu çağrıyı alır, argümanları doğrular ve kendi kodunda aracı çalıştırır.
  4. Aracın sonucu ({"fiyat": "...", "para_birimi": "TRY"} ya da bir hata mesajı) modele geri gönderilir.
  5. Model sonucu kullanarak ya yeni bir araç çağırır ya da kullanıcıya yanıt verir.

Buradaki en önemli nokta üçüncü adımdır: aracı çalıştıran her zaman uygulamadır. Model yalnızca çalıştırılmasını ister. Bu yüzden yetki, doğrulama ve güvenlik kontrolleri modelin değil, aracı yürüten kodun sorumluluğundadır. Araç açıklamalarının net yazılması da bu yüzden önemlidir: model aracı yalnızca açıklamadan anladığı kadarıyla doğru kullanır.

Araçları farklı uygulamalar arasında standart bir yolla paylaşmanın protokolü olan MCP'yi MCP (Model Context Protocol) Nedir? yazımızda anlattık.

Hafıza: kısa ve uzun süreli

Dil modelleri kendi başına bir çağrıdan diğerine hiçbir şey hatırlamaz. Ajanın "hafızası", uygulamanın her çağrıda modele ne verdiğinden ibarettir.

Kısa süreli hafıza bağlam penceresidir: kullanıcının hedefi, konuşma geçmişi, araç çağrıları ve sonuçları. Döngü uzadıkça bu pencere dolar. Bağlam penceresi sınırına yaklaşıldığında uygulama genellikle şu yollardan birini seçer:

  • Eski adımları özetleyip ayrıntıyı çıkarmak.
  • Büyük araç çıktılarını (örneğin bütün bir HTML sayfası) kısaltmak veya yalnızca gereken kısmı saklamak.
  • Tamamlanmış alt görevlerin yalnızca sonucunu tutmak.

Uzun süreli hafıza bağlam penceresinin dışında, bir veritabanında, dosyada veya vektör deposunda tutulur. Ajan gerektiğinde bir araçla bu depodan bilgi getirir. Kullanıcı tercihleri, önceki görevlerden öğrenilen bilgiler ve büyük belge koleksiyonları bu şekilde saklanır.

BileşenGöreviTipik uygulama
ModelDurumu yorumlamak, eylem seçmekBüyük dil modeli
Döngü (orkestrasyon)Modeli çağırmak, araçları yürütmek, durma koşulunu kontrol etmekUygulama kodu, ajan çerçevesi
AraçlarDış dünyada eylem yapmakArama API'si, HTTP istemcisi, tarayıcı, veritabanı
Kısa süreli hafızaMevcut görevin bağlamıMesaj geçmişi, bağlam penceresi
Uzun süreli hafızaGörevler arası bilgiVeritabanı, dosya, vektör deposu
KorumalarYetki, sınır ve onayİzin listeleri, hız sınırı, insan onayı

Ajan web'e nasıl çıkar?

Güncel bilgiye ihtiyaç duyan ajanların çoğu web'e üç yoldan biriyle erişir:

  • Arama API'si. Ajan bir arama sorgusu gönderir, başlık, adres ve kısa özet listesi alır. Hızlı ve ucuzdur, ama yalnızca özetleri görür.
  • HTTP istemcisi. Ajan belirli bir adresi çeker ve sayfanın HTML'ini veya metnini alır. Statik sayfalarda iyi çalışır; içeriği JavaScript ile yüklenen sayfalarda boş döner.
  • Tarayıcı. Ajan gerçek bir tarayıcıyı yönetir: sayfa açar, tıklar, form doldurur, ekran görüntüsü alır. En yetenekli ama en yavaş ve en maliyetli yoldur.

Bu araçların arkasında ağ tarafında sıradan HTTP istekleri vardır ve web scraping'deki bütün kurallar burada da geçerlidir: hız sınırları, robots.txt, site şartları, oturum yönetimi. Bir ajan saniyeler içinde onlarca sayfa açabildiği için bu kurallar ajanlar için daha da önemlidir.

Proxy bu yapıda ağ katmanında durur ve üç iş için kullanılır:

  • Konum: Ajanın bir ürünün Türkiye'deki ve Almanya'daki fiyatını ayrı ayrı görebilmesi.
  • Çıkış kontrolü: Ajanın hangi alan adlarına, hangi hızla eriştiğinin tek bir noktadan sınırlanması ve kaydedilmesi.
  • İzolasyon: Ajan trafiğinin şirketin ana IP adreslerinden ayrı tutulması.

Bu katmanın nasıl tasarlanacağını, prompt injection riskine karşı alınacak önlemlerle birlikte LLM'e Güvenli Web Erişimi: Hız Sınırı ve İzinler yazımızda anlattık. Web sitelerinin ajan trafiğine nasıl yaklaştığını ve ajanların neden engellendiğini ise AI Alışveriş Ajanları Neden Sitelerde Engelleniyor? yazımızda ele aldık. Bir dil modelinin web sayfalarından yapılandırılmış veri çıkarmada nasıl kullanılabileceğine bir örnek GPT-6 Astra ile Web Scraping yazımızda.

Ajanlar neden hata yapar?

Ajan sistemlerinin başarısızlıkları, tek bir model çağrısının hatalarından farklıdır, çünkü hatalar adımlar boyunca birikir.

  • Hata birikmesi. Her adımın küçük bir hata olasılığı olsa bile, on adımlık bir işte bu olasılıklar çarpılır. Erken bir adımda yanlış sayfanın açılması, sonraki bütün adımları yanlış veriye dayandırır.
  • Yanlış araç argümanları. Model var olmayan bir parametre, yanlış biçimli bir adres veya uydurulmuş bir kimlik numarası üretebilir. Araç tarafında doğrulama yapılmazsa bu hata sessizce ilerler.
  • Döngüye girme. Aynı başarısız aracı aynı argümanlarla tekrar tekrar çağırmak. Adım sınırı ve tekrar tespiti olmadan maliyet kontrolsüz artar.
  • Bağlamın dolması. Büyük araç çıktıları bağlam penceresini doldurur ve model görevin başındaki talimatları gözden kaçırmaya başlar.
  • Belirsiz hedef. "En uygun ürünü bul" gibi ölçütü tanımsız bir hedef, ajanın durma noktasını belirleyememesine yol açar.
  • Güvenilmeyen içerik. Web sayfaları, belgeler ve e-postalar modele talimat gibi görünen metinler içerebilir. Ajan bu metinleri kullanıcının isteğiyle karıştırırsa beklenmeyen eylemler yapabilir. Bu risk dolaylı prompt injection olarak adlandırılır.
  • Hata mesajlarının kaybolması. Araç hatası modele anlaşılır biçimde geri verilmezse model işin başarıyla bittiğini varsayabilir.

Bu hataların çoğu modelden değil sistem tasarımından kaynaklanır ve tasarımla azaltılır: araç argümanlarını doğrulamak, adım ve bütçe sınırı koymak, araç çıktılarını kısaltmak, kritik eylemlerden önce insan onayı istemek ve web içeriğini talimat değil veri olarak işlemek.

İş akışı mı, ajan mı?

Ajanlar etkileyicidir, ama her iş için doğru araç değildir. Anthropic'in yazısındaki öneri, işi çözen en basit yapıyla başlamak ve karmaşıklığı yalnızca ölçülebilir bir fayda sağladığında eklemektir. Pratikte bu şu anlama gelir:

  • Adımları önceden bilinen, her seferinde aynı sırayla yapılan bir iş (her gün aynı 50 sayfadan fiyat çekip tabloya yazmak) için kodla tanımlanmış bir iş akışı daha ucuz, daha hızlı ve daha öngörülebilirdir. Dil modeli bu akışın içinde yalnızca belirli bir adımda, örneğin düzensiz metinden veri çıkarmada kullanılabilir.
  • Adımları duruma göre değişen, hangi kaynağa bakılacağının önceden bilinmediği bir iş (yeni bir pazar hakkında dağınık kaynaklardan bilgi derlemek) için ajan mantıklıdır.

Klasik bir scraping hattı ile ajan tabanlı bir yaklaşımın maliyet ve güvenilirlik farkı da bu çerçevede değerlendirilmelidir. Seçicilerle yapılan veri çıkarma her sayfada aynı sonucu verir; ajan ise sayfa yapısı değiştiğinde uyum sağlayabilir ama her sayfa için model çağrısı maliyeti taşır.

Kullanım senaryoları

  • Pazar ve rakip araştırması: Ajan farklı kaynaklardan ürün, fiyat ve kampanya bilgisi derler, tutarsızlıkları işaretler. Araştırma tarafındaki kurgu pazar araştırması çözümü sayfamızda.
  • Veri toplama hattının istisna yönetimi: Klasik scraping hattı sayfaların büyük kısmını işler; seçicilerin başarısız olduğu sayfalar bir ajana devredilir. Genel veri toplama kurgusu veri kazıma çözümü sayfamızda.
  • İç bilgi asistanı: Ajan şirket içi belgelerde arama yapar, ilgili bölümleri getirir ve kaynak göstererek yanıt verir.
  • Yazılım geliştirme: Ajan kod tabanında arama yapar, dosyaları okur, değişiklik önerir ve testleri çalıştırır.
  • Müşteri destek ön işlemi: Ajan talebi sınıflandırır, sipariş durumunu sorgular ve yalnızca gerektiğinde insana devreder.

Sık yapılan hatalar

  • Basit bir iş akışıyla çözülecek işe ajan kurmak. Maliyet, gecikme ve öngörülemezlik gereksiz yere artar.
  • Durma koşulu koymamak. Adım sınırı, bütçe sınırı veya zaman aşımı olmayan bir ajan kontrolsüz maliyet üretebilir.
  • Araç açıklamalarını kısa ve belirsiz yazmak. Model aracı yanlış durumda veya yanlış argümanla çağırır.
  • Araç argümanlarını doğrulamamak. Modelin ürettiği her değer güvenilmeyen girdi olarak ele alınmalıdır.
  • Web içeriğini talimat gibi işlemek. Sayfadaki metin kullanıcının isteğiyle aynı yetkiye sahip olmamalıdır.
  • Kritik eylemleri onaysız bırakmak. Ödeme, e-posta gönderme, veri silme gibi geri alınamayan işlemler insan onayı gerektirmelidir.
  • Site kurallarını ajan için askıya almak. Ajanın açtığı her sayfa, bir scraper'ın açtığı sayfayla aynı hız sınırı ve şartlara tabidir. Hukuki çerçeve için Web Scraping Yasal mı? yazımıza bakabilirsiniz.

Karar rehberi

İşinizin yapısıÖneri
Tek soru, tek yanıtTek model çağrısı
Adımlar sabit ve önceden biliniyorKodla tanımlı iş akışı
Sabit akış, bir adımda düzensiz metinİş akışı + o adımda model çağrısı
Adımlar duruma göre değişiyorAjan, adım ve bütçe sınırıyla
Ajan web'e erişecekİzin listesi, hız sınırı, kayıt ve çıkış kontrolü
Geri alınamayan eylemler varAjan + insan onayı
Araçları birden fazla uygulamada paylaşmakMCP sunucusu

Sık sorulan sorular

AI ajanı ile sohbet botu arasındaki temel fark nedir?

Sohbet botu her mesaja tek yanıt üretir ve kendi başına eylem başlatmaz. AI ajanı ise bir hedefe ulaşmak için birden fazla adım planlar, araç çağırır, sonuçları değerlendirir ve hedefe ulaşana kadar döngüyü sürdürür.

Ajan araçları kendisi mi çalıştırır?

Hayır. Model yalnızca hangi aracın hangi argümanlarla çalıştırılmasını istediğini yapılandırılmış biçimde yazar. Aracı çalıştıran, sonucunu modele geri veren ve güvenlik kontrollerini yapan her zaman ajanı çalıştıran uygulamadır.

Ajanın hafızası nerede tutulur?

Mevcut görevin bilgileri modelin bağlam penceresinde, yani her çağrıda modele gönderilen mesaj geçmişinde tutulur. Görevler arasında korunması gereken bilgiler ise uygulamanın yönettiği bir veritabanında veya dosyada saklanır ve gerektiğinde bir araçla getirilir.

Ajan web sitelerinden veri toplarken hangi kurallara uymalı?

Bir scraper'ın uyduğu kuralların aynısına: robots.txt, site şartları, hız sınırları ve kişisel veri mevzuatı. Ajanın bir yapay zeka sistemi olması bu kuralları değiştirmez; hızlı çalışabildiği için sınırların sistem düzeyinde uygulanması daha da önemlidir.

Ajanlar neden aynı işte farklı sonuçlar verebilir?

Dil modelleri her çağrıda birebir aynı çıktıyı üretmeyebilir ve ajanın her adımda seçtiği yol bir sonraki adımı etkiler. Ayrıca web gibi dış kaynaklar değiştiği için aynı sorgu farklı veriye ulaşabilir. Tekrarlanabilirliğin önemli olduğu işlerde iş akışı yaklaşımı daha uygundur.

Bir işin ajana uygun olup olmadığını nasıl anlarım?

İşin adımlarını önceden bir akış şeması olarak çizebiliyorsanız, büyük olasılıkla bir iş akışı yeterlidir. Adımlar ancak ara sonuçlar görüldükçe belirlenebiliyorsa ve bu esnekliğin sağladığı fayda ek maliyete değiyorsa ajan mantıklıdır.

Özetle

AI ajanı, bir dil modelinin algıla-planla-uygula-değerlendir döngüsünde hedefe ulaşana kadar çalıştığı sistemdir. Planlama işi adımlara böler, araç kullanımı modelin dış dünyada eylem yapmasını sağlar, hafıza ise bağlam penceresi ve dış depolarla yönetilir. Araçları her zaman uygulama çalıştırır; bu yüzden yetki, doğrulama, hız sınırı ve insan onayı sistem tasarımının parçasıdır. Adımları önceden bilinen işler için iş akışı, açık uçlu işler için ajan seçin. Ajanlarınızın web erişimini konum ve çıkış kontrolüyle yönetmek için proxy hizmetlerimize göz atabilirsiniz.

ChatGPT'ye sorClaude'a sor