AI Agents

Kendini Düzeltici Planlama: Yapay Zeka Ajanlarında Dinamik Hata Kurtarma İçin Reflexion Döngülerinin Uygulanması

Büyük Dil Modellerinin (LLM) yükselişi, karmaşık, çok adımlı görevleri gerçekleştirebilen gelişmiş yapay zeka ajanlarının oluşturulmasını mümkün kılmıştır. Ancak kalıcı bir zorluk devam etmektedir: LLM'ler olasılıksaldır, deterministik değildir. Halüsinasyon üretebilir, talimatları tam olarak takip edemeyebilir veya birim testlerinde başarısız olan kod üretebilir. Geleneksel ajan mimarileri genellikle sabit yeniden denemelere veya basit yedek çözümlere dayanır; bunlar verimsizdir ve karmaşık mantık hatalarını nadiren çözer.

İşte Reflexion devreye girer. Shinn ve ark. tarafından önerilen Reflexion, ajanların geçmiş başarısızlıkları hakkında sözlü olarak yansıma yaparak performanslarını geliştirmelerine olanak tanıyan bir çerçevedir. Ajan aynı istemi (prompt) sadece yeniden denemek yerine, başarısızlığının metinsel bir eleştirisini üretir ve bu geri bildirimi bir sonraki denemesini yönlendirmek için kullanır. Bu yazıda, yapay zeka ajanlarınızda dinamik hata kurtarma mekanizmaları oluşturmak için bu kendini düzeltici döngülerin nasıl uygulanacağını inceleyeceğiz.

Reflexion Mimarisini Anlama

Reflexion döngüsü, tek bir ajanın yaşam döngüsünde üç ayrı rol veya adımdan oluşur:

  1. Eylem: Ajan, mevcut bağlamını kullanarak görevi çözmeye çalışır.
  2. Değerlendirme: Çıktı, harici bir doğrulayıcı tarafından (örneğin, birim testleri, insan geri bildirimi veya ayrı bir LLM hakemi) değerlendirilir. Başarısız olursa, değerlendirme adımı belirli hata sinyallerini döndürür.
  3. Yansıma (Reflection): Ajan, hata sinyallerini kısa, doğal dilde bir "yansıma"ya dönüştürür. Bu yansıma, bir sonraki yineleme için ajanın belleğine veya bağlamına eklenir.

Sert kodlanmış hataları veya test başarısızlıklarını anlamsal geri bildirimlere dönüştürerek, ajan modelin yeniden eğitilmesine ihtiyaç duymadan akıl yürütme stratejisini ayarlayabilir.

Uygulama Stratejisi

Reflexion döngüsünü uygulamak, bağlamı ve geri bildirimi yönetmek için yapılandırılmış bir yaklaşım gerektirir. Aşağıda, temel mantığı gösteren basitleştirilmiş bir Python benzeri sözde kod (pseudocode) örneği verilmiştir. Spesifikler LLM sağlayıcınıza ve çerçevenize (LangChain veya LlamaIndex gibi) bağlı olsa da, kalıp tutarlı kalır.


import json
from llm_client import generate_response, execute_code

class ReflexionAgent:
    def __init__(self, max_iterations=3):
        self.max_iterations = max_iterations
        self.memory = []

    def run(self, task):
        for i in range(self.max_iterations):
            # 1. Context Oluşturma
            context = self._build_context(task, i)
            
            # 2. Eylem
            code_snippet = generate_response(
                prompt=f"Görev: {task}\nÖnceki Yansımalar: {self.memory}\nBunu çözmek için Python kodu yaz."
            )
            
            # 3. Değerlendirme
            error_msg = self._evaluate(code_snippet)
            
            if not error_msg:
                return code_snippet  # Başarı
            
            # 4. Yansıma
            reflection_prompt = f"""
            Görevi çözmeyi başaramayan bir yapay zeka ajanısınız.
            Görev: {task}
            Kodunuz: {code_snippet}
            Hata: {error_msg}
            
            Ne yanlış gittiğini ve bir sonraki denemede nasıl düzeltebileceğinize dair kısa, uygulanabilir bir yansıma üretin.
            """
            reflection = generate_response(prompt=reflection_prompt)
            self.memory.append(f"Yineleme {i+1} Başarısızlığı: {reflection}")
        
        raise Exception("Maksimum yineleme sayısından sonra görev çözülemedi")

    def _evaluate(self, code):
        try:
            execute_code(code)
            return None
        except Exception as e:
            return str(e)

    def _build_context(self, task, iteration):
        # Token sınırlarını aşmamak için dinamik bağlam yönetimi kritiktir
        recent_memories = self.memory[-3:] if len(self.memory) > 3 else self.memory
        return f"Mevcut Görev: {task}\nİlgili Geçmiş: {recent_memories}"

Dinamik Hata Kurtarma İçin En İyi Uygulamalar

1. Yansımalarınızı Yapılandırın

"Çalışmadı" gibi belirsiz yansımalar faydasızdır. LLM'inize spesifik olmasını talimat verin. Yansımaları şu formatta isteyin: Kök Neden: [X], Hata: [Y], Düzeltme Stratejisi: [Z]. Bu, sonraki üretimi daha etkili bir şekilde yönlendirir.

2. Bağlam Uzunluğunu Yönetin

Yinelemeler arttıkça, yansımaların birikmesi istemi şişirebilir. Daha eski, ilgisiz yansımaların tek bir özet cümleye sıkıştırıldığı bir kayan pencere veya özetleme adımı uygulayın.

3. Mümkünse Harici Doğrulayıcılar Kullanın

LLM'ler diğer LLM'lerin çıktılarını yargılayabilirken, nesnel doğrulayıcılar (birim testleri, linter'lar veya API kontrolleri) gerçek durumu (ground truth) sağlar. Mümkün olan her durumda "Değerlendirme" adımı için nesnel sinyalleri tercih edin, çünkü bu, ajanın kendi önyargılarını pekiştirme riskini azaltır.

Sonuç

Reflexion döngüleri aracılığıyla kendini düzeltici planlama, yapay zeka ajanlarını kırılgan betik çalıştırıcılarından uyumlu problem çözümcülerine dönüştürür. Ajanın bağlamına anlamsal geri bildirim entegre ederek, görev karmaşıklığıyla ölçeklenen dinamik hata kurtarmasını mümkün kılar. LLM yetenekleri büyümeye devam ettikçe, yansıma isteminin kalitesi ve değerlendirme döngüsünün yapısı, sağlam, üretim ortamına hazır yapay zeka sistemleri oluştururken kritik ayırt edici faktörler haline gelecektir. Basit kodlama görevleriyle küçük başlayın, yansıma istemlerinizi iyileştirin ve ajanlarınızın evrimini izleyin.

Share: