Ana içeriğe geç

Dayanıklı Yürütme, Dayanıklı Akıl Yürütme Değildir: Agent Durumunu Niyeti Kaybetmeden Checkpoint'lemek

Bir agent'ın adım indeksini kalıcı hale getirmek, görev durumunu kalıcı hale getirmek değildir. Yürütmeyi checkpoint'leyip niyeti checkpoint'lemeyen sistemler, akıcı ama tutarsız çalışmalara geri döner.

Durum LED'lerini ve bir switch'e bağlanmış etiketli ağ kablolarını gösteren bir sunucu rafının yakın çekimi.

State denilen iki şey

Bir agent runtime'ındaki checkpoint genellikle bir çalışmanın mekaniğini kaydeder: graph'ın hangi node'u yürütüldü, hangi tool çağrıldı, tool ne döndürdü, hangi edge bekliyor. Bu, execution state'tir. "Makine neredeydi?" sorusunu yanıtlamak için yeterlidir.

"Makine ne yapmaya çalışıyordu ve hangi koşullar altında?" sorusunu yanıtlamak için yeterli değildir. Bu ikinci şey, intent state'tir: şu anda anlaşıldığı haliyle hedef, çalışmanın kabul ettiği kısıtlar, hâlihazırda taahhüt ettiği varsayımlar ve henüz yerine getirmediği yükümlülükler. Execution state bir imleçtir. Intent state bir sözleşmedir.

Dayanıklı yürütme motorları imleç konusunda iyidir. Bir adımlar jurnalini yeniden oynatır, tamamlanmış işleri atlar ve kontrolü ilk tamamlanmamış adımda geri verir. Bu, anlamı tanım anında sabitlenmiş bir workflow için doğru davranıştır. Bir agent böyle değildir. Anlamı, her adımda görebildiği geçmişten yeniden inşa edilir ve geçmiş, onu üreten niyetle aynı şey değildir. Sözleşme olmadan imleci geri yüklerseniz çalışma çökmez. Aynı kendinden emin tonla, yanlış yönde, akıcı biçimde devam eder.

Bayat hedeften yeniden planlama

Bir çalışma başlangıçta bir kısıt kabul eder: bir üretim veri kümesine karşı salt okunur çalışmak ya da kapsamı tek bir tenant ile sınırlamak. Çalışma sırasında operatör kapsamı genişletir ve kısıt orchestrator'ın yapılandırmasında güncellenir. Süreç bir sonraki adımdan önce ölür. Devam ettiğinde, checkpoint adım indekslerini ve tool çıktılarını içerir ama yürürlükte olan kısıtı içermez. Agent planını hayatta kalan geçmişten ve güncel yapılandırmadan yeniden türetir ve ikisi çelişir. Transkriptteki hiçbir şey bu dikişi işaretlemez. Ortaya çıkan plan kendi içinde tutarlı, dışarıdan yanlıştır.

Yinelenen yan etkiler

Klasik durum: son tool çağrısı başarılı oldu ama onay kayboldu. İlk tamamlanmamış adımda devam eden bir dayanıklı yürütme motoru çağrıyı yeniden yapar. Çağrı charge_card ya da send_email ya da create_ticket ise, çalışmanın artık iki tane vardır. Bu bir akıl yürütme arızası değildir; bir checkpoint sözleşmesi arızasıdır. Jurnal, etkinin olgusunu değil, çağrı niyetini kaydetti ve ikisi ancak etkinin kendisi downstream sistemin tanıdığı bir anahtar taşıyorsa ayırt edilebilir.

Close-up of a modern building facade with geometric design and reflective windows

Varsayım kayması

Aynı geçmişler verildiğinde, bir agent her zaman aynı planları yeniden türetmez. Örnekleme, context kısaltma ve model sürümü değişiklikleri dağılımı kaydırır. Geçmişi yeniden oynatıp modelden devam etmesini isteyen bir devam, geçmiş göz önüne alındığında makul ama yürürlükte olan plan olmayan bir plan üretir. Varsayım kayması, bayat hedef arızasının sessiz versiyonudur: hiçbir yapılandırma değişmedi, yalnızca yeniden inşa değişti. Çalışma sağlıklı görünür ve sapar.

Uygulanabilir bir checkpoint sözleşmesi

Çözüm, checkpoint'i bir niyet serileştirmesi olarak ele almaktır; execution state de birkaç alandan biridir. Güvenle devam edilebilecek bir checkpoint, birlikte ve atomik olarak şunları taşımalıdır:

  • Hedefi, başlatıldığı haliyle değil, çalışmanın şu anda taahhüt ettiği haliyle.
  • Kabul edilen kısıtları, her biri çalışmada kabul edildiği nokta ve onu ileri süren kaynakla birlikte.
  • Tool sonuçlarını, çağrı sırasına göre değil bir idempotency key'e göre anahtarlanmış olarak.
  • Çözülmemiş yükümlülükleri: çalışmanın yapmayı vaat ettiği ama henüz yapmadığı şeyler.
  • Bir schema sürümünü, böylece daha eski bir runtime tarafından yazılmış bir checkpoint bu şekilde tanınabilir.

Bunu pratikte işler kılan mekanizma, wall-clock ya da sıradan değil kararlı girdilerden türetilen çalışma kapsamlı bir idempotency key'dir:

key = hash(run_id, step_name, canonical_args)

Yan etkisi olan her tool çağrısı bu anahtarı taşır. Downstream sistem ya da önündeki ince bir adaptör, hâlihazırda yürüttüğü anahtarları kaydeder ve yeniden oynatmada etkiyi tekrar gerçekleştirmek yerine önceki sonucu döndürür. Anahtar, yeniden denemeler arasında kararlı ve farklı niyetler arasında benzersiz olmalıdır; onu bir sayaçtan değil adım adından ve kanonikleştirilmiş argümanlardan türetmek, adımları yeniden sıralayan ya da atlayan bir yeniden başlatmadan sonra yeniden oynatmayı güvenli kılan şeydir.

İkinci mekanizma reddetmedir. Bir checkpoint bir schema sürümü taşır ve runtime, en iyi çaba ile bir geçiş denemek yerine uyumsuz sürümler arasında devam etmeyi reddeder. Niyetin geçişi bir yeniden plandır ve bir yeniden plan, döngüde bir insan ya da gözetleyici agent bulunan ![Colorful absIridescent swirls in a soap bubble texture, resembling an oil slickCircuit board macro

Ne zaman devam edilmemeli

Dayanıklı yürütme bir varsayılandır, evrensel bir iyi değildir. Üç durum, devam yerine yeniden girişi savunur.

Yetkilendirme sınırını aşan çalışmalar. Çalışma bir izin aldıysa, bir bütçe harcadıysa ya da verdiği yetki bir oturuma kapsamlandırılmış bir principal adına hareket ettiyse, devam etmek artık var olmayabilecek bir yetkiyi sürdürür. Bu çalışmalar onaya yeniden girmelidir. Checkpoint kanıt olarak saklanabilir; kimlik bilgisi olarak kullanılmamalıdır.

Uzun boşluklar. Dış olguların bir yarı ömrü vardır. Bir fiyat, bir ticket durumu, bir deployment durumu, bir envanter sayısı — her biri, checkpoint'in kaydetmediği örtük bir son kullanma tarihine sahip önbelleğe alınmış bir gözlemdir. Çalışma kümesindeki en kısa yarı ömürden daha uzun bir boşluktan sonra devam eden bir çalışma, bayat olgulardan akıl yürütürken onları güncelmiş gibi sunar. Dürüst hamle, bayatlığı bir yeniden plan tetikleyicisi olarak ele almaktır: önbelleğe alınmış gözlemleri geçersiz kıl, bir sonraki adımın bağlı olduklarını yeniden çek ve ancak ondan sonra devam et.

Artık geçerli olmayan varsayım kümeleri. Kabul edilen herhangi bir kısıt kaynağında geri çekildiyse, çalışmanın geçerli bir devamı yoktur. Geçerli bir yeniden başlatması vardır.

Ödünleşim

Niyeti kalıcı hale getirmek bedava değildir. Checkpoint'in büyümesi anlamına gelir, her kısıtın bir provenance alanına ihtiyaç duyması anlamına gelir ve runtime'ın "başlatıldığı haliyle hedef" ile "değiştirildiği haliyle hedef"i ayırt edebilmesi gerektiği anlamına gelir — bu da hedef değişikliğinin bir prompt düzenlemesinin yan etkisi değil, log girdisi olan birinci sınıf bir işlem olması gerektiği anlamına gelir. Ayrıca, naif bir motorun tamamlayacağı bazı devamların reddedileceği anlamına gelir ve reddedilen çalışmalar, sessiz devamların olmadığı yerde görünür arızalardır.

Bu görünürlük asıl meseledir. Yalnızca yürütmeyi checkpoint'leyen bir runtime, tutarlı, kendinden emin, yanlış bir plana devam eden ilk çalışmaya kadar mükemmel kurtarma özelliklerine sahip görünür — ve o noktada arıza logda değil, dünyadadır.

Ne kaydedilmeli

Pratik bir kural: checkpoint fonksiyonunu yazmadan önce, yeni bir operatörün orijinal operatöre hiçbir şey sormadan çalışmayı uçuş ortasında devralmak için neye ihtiyaç duyacağını yazın. Bu liste intent state'tir. Adım indeksi bu listede yoktur. Listede olan her şey checkpoint'te, sürümlenmiş olarak ve çalışmanın dış dünya üzerinde yapabileceği her etki için bir idempotency key ile eşleştirilmiş olarak bulunmalıdır. Dayanıklı akıl yürütme, yeniden başlatmadan sağ çıkan özelliktir; dayanıklı yürütme ise yalnızca yeniden başlatmayı mümkün kılan mekanizmadır.

İlgili okumalar

Bunun yanıtladığı sorular

What is the difference between execution state and intent state in an agent run?

Execution state is the cursor: which step ran, which tool returned what, what is pending. Intent state is the goal, the accepted constraints, the assumptions committed to, and the unresolved obligations. A checkpoint that stores only the cursor can resume the machine but not the reasoning.

Why do resumed agents produce duplicate side effects?

Because the journal records the intent to call a tool, not the fact of the effect. If the call succeeded but the acknowledgement was lost, replay re-issues it. Run-scoped idempotency keys derived from stable inputs let the downstream system recognise the replay and return the prior result instead of repeating the effect.

When should a run not be resumed?

When it crossed an authorisation boundary, when the gap since the last checkpoint exceeds the half-life of the external facts it depends on, or when an accepted constraint has been withdrawn at its source. These cases call for re-approval or re-planning, not continuation.

Should checkpoints be migrated across schema versions?

No. Migration of intent is a re-plan and should be an explicit, logged operation. The runtime should version the checkpoint schema and refuse to resume across incompatible versions rather than attempting a silent best-effort migration.