AI Agents

Otonom Yapay Zeka Ajanları Oluşturma: Teoriden Üretime Hazır Mimarilere

Yapay zekanın manzarası, pasif soru-cevap modellerinden karmaşık, çok adımlı iş akışlarını yürütebilen aktif, otonom ajanlara dramatik bir şekilde kaydı. Geliştiriciler için bu, temel bir paradigma değişikliği anlamına geliyor: artık sadece modelleri yönlendirmiyoruz; algılayabilen, planlayabilen, harekete geçebilen ve yansıtabilen sistemler mühendislik yapıyoruz.

Otonom bir ajanın çekirdeğinde, basit ama güçlü bir döngü yatar: Gözlemle → Düşün → Hareket Et → Yansıt. Statik bir metin yanıtı döndüren geleneksel LLM uygulamalarının aksine, bir ajan, bir hedefe ulaşılana kadar dış araçlarla ve veri kaynaklarıyla iteratif olarak etkileşime girer. Bu blog yazısı, sağlam ajanlar oluşturmak için gereken mimari bileşenleri ele alır ve pratik bir uygulama kalıbı sunar.

Temel Mimari: ReAct Deseni ve Araç Orkestrasyonu

Güncel nesil ajanlar için en etkili mimari, ReAct (Muhakeme + Hareket) çerçevesidir. Bu yaklaşım, muhakeme adımları (LLM'in ne yapacağına karar verdiği) ve hareket adımları (ajanın bir araç veya işlevi yürüttüğü) arasında dönüşümlü olarak ilerler. Bu döngü, modelin gerçek verileri almak yerine araç sonuçlarını uydurduğu "halüsinasyonlu eylemleri" önlemek için kritiktir.

Üretime uygun bir ajan üç ana bileşen gerektirir:

  1. Planlayıcı: Yüksek düzeyli bir hedefi ayrık alt görevlere ayırır.
  2. Bellek: Kısa vadeli bağlamı (sohbet geçmişi) ve uzun vadeli semantik belleği (vektör depoları) korur.
  3. Araç Yürütücü: LLM'in niyetini gerçek dünya API çağrıları, veritabanları veya kod yürütme ortamlarıyla güvenli bir şekilde köprüler.

Python'da Temel Bir Otonom Döngünün Uygulanması

Aşağıda, varsayımsal bir LLM istemcisi ve basit bir arama aracı kullanarak ajan döngüsünü gösteren sadeleştirilmiş bir örnek bulunmaktadır. Bu kalıp, seçtiğiniz spesifik LLM sağlayıcısından veya çerçeveden bağımsız olarak temel niteliktedir.

import json
from typing import List, Dict, Any

class AutonomousAgent:
    def __init__(self, llm_client, tools: Dict[str, Any]):
        self.llm_client = llm_client
        self.tools = tools
        self.memory = []
        self.max_iterations = 10  # Güvenlik sınırı

    def think(self, user_query: str) -> str:
        """Muhakeme adımı: Sonraki eylemi üret."""
        prompt = f"""
        Siz bir yapay zeka ajanısınız. Geçmişe ve kullanıcı sorgusuna dayanarak sonraki adımı belirleyin.
        Kullanılabilir araçlar: {list(self.tools.keys())}
        
        Geçmiş:
        {self.memory}
        
        Kullanıcı Sorgusu: {user_query}
        
        JSON formatında yanıt verin:
        {{
            "thought": "iç muhakemeniz",
            "action": "araç_adi veya 'finish'",
            "action_input": "araç için parametreler"
        }}
        """
        response = self.llm_client.generate(prompt)
        return response

    def act(self, action: str, input_data: str) -> str:
        """Yürütme adımı: Aracı çalıştır ve sonuçları döndür."""
        if action == "finish":
            return input_data
        elif action in self.tools:
            try:
                result = self.tools[action](input_data)
                return str(result)
            except Exception as e:
                return f"Hata: {str(e)}"
        else:
            return "Hata: Bilinmeyen araç belirtildi."

    def run(self, query: str) -> str:
        """Ana yürütme döngüsü."""
        self.memory.append({"role": "user", "content": query})
        
        for i in range(self.max_iterations):
            # 1. Düşün
            thought_output = self.think(query)
            self.memory.append({"role": "assistant", "content": thought_output})
            
            try:
                decision = json.loads(thought_output)
            except json.JSONDecodeError:
                self.memory.append({"role": "system", "content": "Hata: Geçersiz JSON. Lütfen tekrar deneyin."})
                continue

            # 2. Hareket Et
            result = self.act(decision.get("action"), decision.get("action_input"))
            
            # 3. Yansıt/Belleği Güncelle
            self.memory.append({"role": "system", "content": f"Gözlem: {result}"})
            
            # Sonlanmayı kontrol et
            if decision.get("action") == "finish":
                return result

        return "Maksimum iterasyona ulaşıldı."

# Örnek Kullanım (Varsayımsal)
# search_tool = lambda q: f"Sonuçlar: {q}"
# agent = AutonomousAgent(llm_client, tools={"search": search_tool})
# answer = agent.run("Fransa'nın başkenti nedir?")

Durum, Bellek ve Hata Dayanıklılığı Yönetimi

Otonomi karmaşıklık getirir. Bir araç başarısız olursa, ajan istisnayı zarifçe ele almalıdır. Yukarıdaki döngüdeki "Yansıtma" adımı kritiktir: hata mesajını belleğe bir "Gözlem" olarak ekleyerek, LLM başarısızlığı tanıyabilir ve farklı bir yaklaşım deneyebilir (örneğin, arama sorgusunu yeniden formüle etmek veya farklı bir araç denemek). Bu öz-düzeltme yeteneği, temel bir sohbet botunu gerçek bir ajandan ayırır.

Ayrıca, her düşünce ve eylem için yapılandırılmış loglama uygulamanızı düşünün. Üretim ortamlarında gözlemlenebilirlik anahtardır. Özellikle pahalı veya beklenmedik API çağrılarını hata ayıklarken, bir ajanın neden belirli bir yolu seçtiğini tam olarak izlemeniz gerekir.

Güvenlik ve Koruyucu Önlemler

Ajanlar araçlara erişim kazandıkça, saldırı yüzeyi genişler. Yüksek riskli eylemler için insan-onaylı (human-in-the-loop) onay olmadan bir ajanın keyfi kod yürütmesine veya hassas verileri değiştirmesine asla izin vermeyin. LLM'in yalnızca beklenen parametreleri geçmesini sağlamak için araç girdilerinde sıkı şema doğrulaması uygulayın. Kod yürütme araçları için yalıtılmış (sandboxed) ortamlar kullanmayı düşünün.

Sonuç

Otonom yapay zeka ajanları, yazılım geliştirmenin bir sonraki sınırını temsil ediyor. Bunlar "kur ve unut" bir çözüm değil, dikkatli mühendislik, sağlam testleme ve sürekli izleme gerektiren yeni bir sistem sınıfıdır. ReAct desenini ustalaşarak, dayanıklı bellek sistemleri uygulayarak ve sıkı güvenlik koruyucuları uygulayarak, geliştiriciler insan verimliliğini güvenilir bir şekilde artıran ve karmaşık, dinamik sorunları çözen ajanlar oluşturabilir.

Yapay zeka entegrasyonunun geleceği sadece sohbet arayüzleri hakkında değil, eylem hakkında. Tek araçlı ajanlarla küçük başlayın, gözlem döngülerinizi iyileştirin ve sistemlerinizin otonomisini kademeli olarak genişletin.

Share: