Prompt Engineering

Üretken Ortamlarda LLM Araç Kullanımı İçin Hata Yönetimi ve Yeniden Deneme Stratejileriyle Başarma

Büyük Dil Modelleri'ni (LLM) harici araçlarla—API'ler, veritabanları veya kod yorumlayıcılar gibi—entegre etmek, basit sohbet botlarını güçlü ajan sistemlere dönüştürür. Ancak bu entegrasyon yeni bir karmaşıklık katmanı getirir: güvenilirlik. Deterministik yazılımların aksine, LLM'ler olasılıksaldır. Bir LLM bir aracı çağırmaya çalıştığında, ağ zaman aşımı, hız sınırlamaları, hatalı JSON çıktısı veya aracın şemasının semantik olarak yanlış anlaşılması dahil olmak üzere birçok nedenle başarısız olabilir.

Üretim ortamlarında bu başarısızlıkların uygulamanızı çökertmesine izin veremezsiniz. Başarısızlıkları öngören, akıllıca yeniden deneme yapan ve anlamlı yedekleme (fallback) mekanizmaları sunan sağlam bir mimariye ihtiyacınız vardır. Bu yazı, bu başarısızlıkları etkili bir şekilde yönetmek için en iyi uygulamaları incelemektedir.

Araç Kullanımında Başarısızlık Modlarını Anlamak

Yeniden denemeler uygulamadan önce, başarısızlık türlerini kategorize etmemiz gerekir. LLM araç kullanımında hatalar genellikle üç kategoriye ayrılır:

  1. Altyapı Hataları: Ağ zaman aşımı, 5xx sunucu hataları veya API hız sınırlaması (429 durum kodları).
  2. Biçimlendirme Hataları: LLM, ayrıştırılamayan geçersiz JSON çıktılar veya gerekli parametreleri eksik bırakır.
  3. Semantik Hatalar: LLM doğru aracı seçer ancak yanlış argümanlar iletir (örneğin, bir tamsayı beklenen yerde bir dize kullanır).

Her kategori farklı bir azaltma stratejisi gerektirir. Altyapı hataları genellikle üstel geri çekilme (exponential backoff) yönteminden faydalanırken, biçimlendirme hataları modelin kendi çıktısını düzelttiği bir "kendini iyileştirme" döngüsü gerektirir.

Yeniden Deneme Döngüsünün Uygulanması

Üretimdeki yaygın bir desen, araç yürütmesini bir yeniden deneme mekanizmasıyla sarmalamaktır. Ancak, naif yeniden denemeler (örneğin, herhangi bir değişiklik yapmadan aynı eylemi beş kez denemek) genellikle semantik hatalar için işe yaramaz. LLM büyük olasılıkla aynı hatayı tekrar yapacaktır.

Çözüm, iteratif iyileştirmedir. Bir araç yürütmesi başarısız olduğunda, hata mesajını konuşma bağlamının bir parçası olarak LLM'e geri iletin ve eylemini düzeltmesini isteyin. İşte Python ve sahte bir çerçeve yapısı kullanılarak hazırlanmış kavramsal bir örnek:

def execute_tool_with_retry(tool_name, arguments, max_retries=3):
    for attempt in range(max_retries):
        try:
            # Aracı yürütmeyi dene
            result = run_tool(tool_name, arguments)
            return result
            
        except InvalidJsonError as e:
            # Hatayı günlüğe kaydet ve düzeltme istemi hazırla
            error_msg = f"Araç çağrısı geçersiz JSON nedeniyle başarısız oldu: {e}"
            # LLM, bir sonraki adımda bu hatayı içeren bir istemle karşılanacak
            raise CorrectionRequired(error_msg)
            
        except ToolExecutionError as e:
            # Araç tarafından döndürülen mantık hatası (örn. "Kullanıcı bulunamadı")
            # Yeniden denemek istiyoruz, ancak LLM'e başarısızlığı bildirmeliyiz
            raise ToolResponseError(e.message)

        except RateLimitError:
            # Altyapı sorunları için üstel geri çekilme uygula
            wait_time = 2 ** attempt
            time.sleep(wait_time)
            
    raise MaximumRetriesExceededError("3 denemeden sonra başarısız oldu")

Kendini İyileştiren Konuşma Döngüsü

LLM'e özgü başarısızlıklar için en etkili strateji, modeli döngüde tutmaktır. Bir araç hata verdiğinde, hatayı yakalayıp sessizce yutmayın. Bunun yerine, hata mesajını kullanıcının bir sonraki mesaj geçmişine enjekte edin. Bu, modelin başarısızlığı "görmesini" ve stratejisini ayarlamasını sağlar.

Örneğin, bir search_database aracı bir parametre yanlış yazıldığı için başarısız olursa, LLM hata mesajını alır ve bir sonraki adımda düzeltilmiş yazımla yeni bir araç çağrısı oluşturur. Bu, karmaşık harici doğrulama mantığına olan ihtiyacı azaltır ve modelin içsel akıl yürütme yeteneklerinden yararlanır.

Sonuç

Dayanıklı LLM uygulamaları oluşturmak, sadece "mutlu son" senaryosunun ötesine geçmeyi gerektirir. Başarısızlık modlarını anlamak ve yapılandırılmış yeniden deneme stratejileri—özellikle iteratif iyileştirme döngüleri—uygulayarak, araç kullanan ajanların güvenilirliğini önemli ölçüde artırabilirsiniz. Altyapı sorunları için üstel geri çekilme ile mantık hataları için semantik kendini düzeltmeyi birleştirmeyi unutmayın. LLM mimarileri gelişmeye devam ettikçe, bu desenler ciddi üretim seviyesindeki herhangi bir AI uygulamasının temelini oluşturacaktır.

Share: