• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

Ajanın aynı işlemi tekrar etmesi nasıl önlenir?

  • Konuyu Başlatan Konuyu Başlatan Garfield
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 4
  • Etiketler Etiketler
    otomasyon

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
669
Mesajlar
694
AI Seviyesi
Yeni
İşlem tekrarını önlemek için ajanın yalnızca komutunu değil, işlem kimliğini, mevcut durumu ve son başarılı sonucu kontrol etmesini sağlayın. Her mantıksal işlem için bir kez benzersiz anahtar üretip aynı işlemin bütün denemelerinde bu anahtarı koruyun; işlem daha önce tamamlandıysa aracı yeniden çağırmak yerine mevcut sonucu döndürün. Buna ek olarak araç çağrılarına net bitiş koşulu, deneme sınırı ve durum doğrulaması koyarsanız ajan aynı işi sonsuz döngüye sokmadan durur.

Tekrarın temel nedenini ayırın​


Ajanın aynı işlemi tekrarlaması genellikle üç farklı durumdan kaynaklanır. Araç çağrısının sonucu ajana aktarılmıyorsa ajan görevin tamamlanmadığını sanabilir. İşlem başarılı olduğu hâlde durum kaydedilmiyorsa bir sonraki turda aynı isteği yeniden gönderebilir. Araç hata döndürdüğünde ise hata türü ayrılmadığı için geçici bir ağ hatasıyla kalıcı bir doğrulama hatasını aynı şekilde tekrar deneyebilir.

Bu nedenle yalnızca "aynı işlemi yapma" talimatı vermek yeterli değildir. Ajanın her adımda şu sorulara cevap verebilmesi gerekir: Bu işlem hangi nesne için yapılıyor? Daha önce başlatıldı mı? Başarıyla tamamlandı mı? Tekrar denenmesi güvenli mi? İşlem tamamlandıysa hangi kanıtla durulacak?

İdempotent işlem ve işlem anahtarı kullanın​


İdempotent işlem, aynı istek birden fazla gönderilse bile sonucu bir kez uygulanmış gibi kalan işlemdir. Örneğin bir müşteriye aynı e-postayı her çağrıda yeniden göndermek idempotent değildir; fakat belirli bir sipariş_id + işlem_türü anahtarıyla "bu sipariş için bildirim gönderildi" kaydı oluşturmak tekrarları engelleyebilir.

Ajanın araç talimatına varsayımsal olarak şu kuralları ekleyebilirsiniz:
  • Her görev için task_id veya idempotency_key üret.
  • İşlem başlamadan önce bu anahtarla daha önce başarılı kayıt olup olmadığını kontrol et.
  • Başarılı kayıt varsa aracı yeniden çalıştırma; mevcut sonucu döndür.
  • Başarılı kayıt yoksa işlemi başlat ve sonucu kalıcı olarak kaydet.
  • Aynı anahtar için işlem sürüyorsa yeni işlem başlatma; mevcut işlemin durumunu sorgula.
Örneğin varsayımsal bir sipariş güncellemesinde giriş şu olabilir:

Kod:
{
  "order_id": "S-1042",
  "operation": "mark_as_shipped",
  "idempotency_key": "S-1042:mark_as_shipped"
}

İlk çağrıda çıktı status=completed ve operation_id=OP-88 ise bu bilgiler kaydedilir. Ajan aynı görevi tekrar değerlendirdiğinde S-1042:mark_as_shipped anahtarını bulur ve yeni güncelleme göndermek yerine already_completed sonucunu döndürür. Bu çıktı, işlemin yeniden yapılmadığını; daha önceki başarılı sonucun kullanıldığını gösterir.

Durum kaydı ile sohbet geçmişini karıştırmayın​


Sohbet geçmişinde bir aracın daha önce çağrılmış olması, işlemin gerçekten tamamlandığını kanıtlamaz. Ajan yeniden başlatılabilir, geçmiş kısaltılabilir veya araç çağrısı zaman aşımına uğrayabilir. Bu yüzden kritik durumları veritabanı, iş kuyruğu ya da güvenilir bir durum deposunda tutun.

Kaydedilecek en az bilgiler şunlardır:
AlanAmacı
İşlem anahtarıAynı isteğin tekrarını tanımak.
İşlem durumuBekliyor, sürüyor, tamamlandı veya başarısız ayrımını yapmak.
Araç işlem kimliğiSonucu daha sonra sorgulamak ve doğrulamak.
Sonuç özetiAjanın aynı işlemi yeniden başlatmadan kullanıcıya yanıt vermesini sağlamak.
Son deneme zamanı ve sayısıSonsuz tekrarları sınırlamak ve sorun çözümünü kolaylaştırmak.
Tablodaki kayıt, ajanın karar verebilmesi için yeterli olmalı; hassas verileri gereksiz yere saklamamalıdır. Özellikle araç çıktısını tanılama amacıyla ayrıntılı kaydediyorsanız erişimi sınırlayın ve geçici hata günlüklerini iş tamamlandıktan sonra temizleyin.

Ajan talimatına açık durma koşulları ekleyin​


Ajanın sistem veya görev talimatında, başarılı sonucu gördüğünde duracağı açıkça belirtilmelidir. Aşağıdaki örnek varsayımsaldır ve kullandığınız otomasyon aracının kendi alan adlarına göre uyarlanmalıdır:

Kod:
1. İşlem anahtarını oluştur.
2. Aynı anahtar için tamamlanmış kayıt ara.
3. Kayıt varsa hiçbir yazma aracını çağırma; mevcut sonucu döndür.
4. Kayıt yoksa işlemi bir kez başlat.
5. Araç sonucunu işlem kimliğiyle kaydet.
6. İşlem tamamlandıysa görevi bitir.
7. Sonuç belirsizse aynı yazma işlemini tekrarlama; işlem durumunu sorgula.
8. En fazla 3 denemeden sonra dur ve belirsiz durumu bildir.

Buradaki en önemli ayrım, zaman aşımından sonra işlemi körlemesine yeniden göndermemektir. Zaman aşımı, işlemin başarısız olduğunu kanıtlamaz; yalnızca yanıtın zamanında alınamadığını gösterir. Önce işlem kimliğiyle durum sorgulanmalı, işlem kimliği yoksa aynı isteğin güvenle tekrarlanıp tekrarlanamayacağı belirlenmelidir.

Araç çıktısını standartlaştırın​


Her araç farklı biçimde yanıt verirse ajan sonucu yanlış yorumlayabilir. Yazma yapan araçların mümkün olduğunca şu alanları döndürmesi tekrarları azaltır:

Kod:
{
  "ok": true,
  "status": "completed",
  "operation_id": "OP-88",
  "idempotency_key": "S-1042:mark_as_shipped",
  "retryable": false,
  "message": "İşlem daha önce tamamlandığı için yeniden uygulanmadı."
}

status=completed işlemin tamamlandığını, status=running devam eden bir işlem bulunduğunu, status=failed ise hata oluştuğunu belirtir. retryable=true yalnızca geçici ve güvenle yeniden denenebilecek hatalarda kullanılmalıdır. Yetki, veri biçimi veya iş kuralı hatalarında tekrar denemek sorunu çözmez; eksik bilgi düzeltilmelidir.

Sonucu nasıl kontrol edeceksiniz?​


Ajan durduğunda yalnızca "başarılı" metnine güvenmeyin. Yazma işleminden sonra ayrı bir okuma veya durum sorgulama adımıyla beklenen değişikliği doğrulayın. Örneğin bir kaydın durumu güncellendiyse yanıtın içinde doğru kayıt kimliğinin ve yeni durumun bulunduğunu kontrol edin.

Tekilleştirmeyi yalnız araç yanıtındaki kimliğe bakarak değerlendirmeyin; her denemede yeni bir çağrı kimliği üretilebilir. Aynı anahtarla tekrarda dış sistemde ikinci sipariş, ödeme veya mesaj gibi yeni bir yan etki oluşmadığını ve önceki iş sonucunun kullanıldığını doğrulayın. İşlem durumu sürekli running kalıyorsa ajanı yeniden başlatmak yerine kuyruğu, işlem kimliğini ve son araç çıktısını kontrol edin; gerekirse aynı yazma çağrısını değil, durum sorgusunu tekrarlayın.

Ayrıca yalnızca model talimatıyla güvenlik sağlamaya çalışmayın. Ajan bir dil modeli olduğu için aynı talimatı farklı yorumlayabilir. Yerel depoda anahtarı atomik olarak ayırmak eşzamanlı çalışanları sınırlar; dış işlemle yerel sonuç kaydını kendiliğinden tek işlem hâline getirmez. Dış işlem başarılı olup sonuç kaydedilmeden süreç çökerse yeni bir yazma başlatmayın. Dış servisin idempotency desteğiyle aynı anahtarı kullanın veya işlemi güvenilir durum sorgusuyla uzlaştırın; sonuç belirlenemiyorsa belirsiz durumu koruyun.
 
Son düzenleme:

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.

Son mesajlar

Son konular

Geri
Üst