deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

AWS Lambda durable functionlardaki replay hatası, ajanların onaylanmamış aksiyonları çalıştırmasına izin veriyor

Bir dev.to yazısı, Lambda durable function replay mekanizmasının, insan onayından sonra deterministik olmayan bir ajan çağrısını yeniden çalıştırarak onaylayan kişinin hiç görmediği bir aksiyonu icra edebildiğini gösteriyor.

AWS Lambda durable functionlardaki replay hatası, ajanların onaylanmamış aksiyonları çalıştırmasına izin veriyor

dev.to üzerinde yazan bir geliştirici, AWS Lambda'nın durable functionlarındaki bir hata modunu belgeledi; bu hata, human-in-the-loop bir ajanın onaylayan kişinin hiç onaylamadığı bir aksiyonu gerçekleştirmesine olanak tanıyor: bir insan bir "refund" önerisini inceleyip onayladı ve workflow bunun yerine bir "escalate" aksiyonu gerçekleştirdi. Gönderiye göre hiçbir şey kurcalanmadı ve iş mantığı doğruydu — suçlu, durable execution'ı çalışan bir mekanizma yapan replay mekanizmasının kendisiydi.

Durable functionlar nasıl devam ediyor

Yazıya göre, 2025'in sonlarında tanıtılan ve şu anda birçok bölgede kullanılabilen Lambda durable functionlar, tek bir sıradan handler'ın; insan veya harici bir olayı beklerken boşta bekleyen hesaplama için ödeme yapmadan bir yıla kadar duraklayabilen, uzun soluklu, çok adımlı bir workflow'u ifade etmesine imkân veriyor. Bu işi iki primitive üstleniyor: context.step bir iş birimini sarar ve sonucunu checkpoint'e alır, context.wait_for_callback ise tüm execution'ı, dışarıdan biri bir cevapla geri dönene kadar askıya alır.

Asıl mesele, devam etmenin nasıl olduğunda. Lambda duraklatılmış Python kodunu fonksiyonun ortasından sürdürmüyor; handler'ı en baştan yeniden çalıştırıyor ve step ile sarılmış her işlem için o kodu yeniden çalıştırmak yerine saklanan checkpoint'i enjekte ediyor. Yazar bunu doğrudan ölçtü: tek bir askıya alma ve devam etme döngüsü boyunca, herhangi bir step'in dışına yerleştirilmiş bir sayaç iki kez, bir step'in içindeki sayaç ise bir kez arttı. Yani sözleşme tam olarak geçerli — bir step içindeki kod bir kez çalışır ve hatırlanır, step dışındaki kod her replay'de yeniden çalışır.

Onay kapısı nerede kırılıyor

Demo workflow, artık yaygın olan ajan desenini izliyor: ajan bir aksiyon önerir, bir insan onu onaylar ya da reddeder ve sistem uygular. Hata, ajanın önerisi bir step dışında üretildiğinde ortaya çıkar. Ajanlar deterministik değildir — aynı soruyu iki kez sormak farklı cevaplar verebilir; bu, bir ajanın doğasında var olan bir şeydir.

İlk geçişte ajan bir refund önerir, insan bu öneriyi görür ve onaylar, fonksiyon askıya alınır. Onay geldiğinde replay, handler'ı en baştan yeniden başlatır; checkpoint'e alınmamış ajan çağrısı ikinci kez çalışır ve farklı bir aksiyon döndürür; execute step'ine akan da bu ikinci değerdir. Yazar, gerçekten her çalıştığında farklı bir aksiyon döndüren bir mock ajanla bunu yeniden üretti ve güvensiz ile güvenli varyantları yan yana inşa etti. Güvensiz varyantta insan "refund" önerisini onayladı ve sistem "escalate" aksiyonunu çalıştırdı; güvenli varyantta ikisi örtüşüyordu. Gönderi, bu uyuşmazlığın eşlik eden repoda geçen bir testle doğrulandığını ve kurulumun gerçek Lambda üzerinde olduğu gibi AWS hesabı olmadan da yerel olarak çalıştığını belirtiyor.

Çözüm yapısal

Çare, deterministik olmayan çağrıyı bir step içine taşımak — çıplak bir agent_proposes(amount) yerine context.step(agent_proposes(amount), name="agent") kullanmak. Öneri bir kez checkpoint'e alındığında, replay ajana yeniden danışmak yerine saklanan değeri enjekte eder; böylece insanın incelediği değer ile executor'ın harekete geçtiği değerin aynı olduğu garanti altına alınır. Yazarın bu olaydan çıkardığı kural şu: deterministik olan ya da yan etkisi olan her şey — ajan çağrıları, API istekleri, zaman damgaları, rastgele değerler — bir step içinde olmalı; step dışındaki kod yalnızca saf, deterministik yapıştırıcı kod için güvenlidir.

İşaret edilen diğer tuzaklar

Gönderi ayrıca yazara gerçek zaman kaybettiren daha küçük sürprizleri de listeliyor. Handler'ın girdisi geçişler arasında tip değiştiriyor: ilk çalışmada bir JSON string olarak, replay'de ise zaten decode edilmiş bir dict olarak geldiğinden, saf erişim yalnızca devam ettirmeden sonra TypeError fırlatıyor; yazar bunu debug etmenin çok can sıkıcı bir şey olduğunu söylüyor. Önerilen önlem, girdi yalnızca string olduğunda decode etmek. Callback sonuçları ise raw bytes olarak geri geliyor.

Neden önemli

İnsan onay kapıları; iade işlemleri, moderasyon kararları ve altyapı değişiklikleriyle uğraşan ajansal sistemlerde varsayılan güvenlik desenidir. Bu hata özellikle kirli, çünkü o kapıyı sessizce devre dışı bırakıyor: kod yukarıdan aşağıya doğru okunuyor, insan her şeyi doğru yapıyor ve sistem yine de kimsenin vermediği bir karara dayanarak hareket ediyor. Durable functionlar Step Functions makinesini — ayrı state machine'ler, task token'ları, JSONPath tesisatı — gerçekten okunabilir düz bir koda indiriyor, ama doğruluk yükünü sessizce geliştiricinin üzerine yükleyerek replay sözleşmesini içselleştirmesini gerektiriyor. Bu model üzerinde ajan çıktısını bir onay akışına bağlayan her ekip önerinin kendisini checkpoint'e almalı ve ideal olarak, orijinal yazarın sonunda yaptığı gibi onaydan icraya uyuşmazlık için test yazmalı.

  • #aws-lambda
  • #serverless
  • #durable-functions
  • #ai-agents
  • #human-in-the-loop

İlgili yazılar