Agent Systems · 21-c03
26 Haziran 2026 · State ve dayanıklılık
Bir agent'in üretimde güvenilir görünmesi çoğu zaman model kalitesinden önce state tasarımına bağlıdır. Sistem nerede kaldığını, hangi tool sonucuna güvendiğini, hangi dış etkiyi gerçekten yaptığını ve hata sonrası nereden devam edeceğini bilmiyorsa, akıllı davranış yalnızca iyi şans olur.
- Ana ayrım
- state != durability
- Kritik terim
- checkpoint
- Operasyon
- replay + redrive
- Risk
- yan etki tekrarı
Bu yazıdaki önemli terimler
- conversation state
- task state
- tool state
- checkpoint
- durable execution
- rollback
- idempotency
- compensation
Önceki yazılarda agent'i hedef, tool, loop ve mimari üzerinden okuduk. Şimdi daha az gösterişli ama daha belirleyici katmana geliyoruz: agent state. Bu katman, modelin ne hatırladığını değil, sistemin hangi gerçeği kanıtlanabilir biçimde taşıdığını anlatır.
Burada özellikle bir yanlış anlamayı ayırmak gerekiyor: sohbet geçmişini saklamak, durable execution değildir. Conversation state modele bağlam verir; durable execution ise çok adımlı bir işin crash, timeout, deploy, worker ölümü ya da tool hatası sonrasında hangi noktadan, hangi kuralla ve hangi yan etkileri tekrarlamadan devam edeceğini tanımlar.
State katmanları
State, sistemin bir sonraki karar için taşıdığı anlamlı durum bilgisidir. Agent dünyasında bu kelime tek bir kutu değildir; farklı dayanıklılık beklentileri olan birkaç katmandan oluşur. Conversation state modelin konuşmayı sürdürebilmesini sağlar. Task state işin hangi adımda olduğunu gösterir. Tool state hangi tool çağrısının ne döndürdüğünü saklar. External side-effect state ise e-posta gönderildi mi, ödeme alındı mı, ticket açıldı mı gibi dış dünyada oluşmuş gerçekleri izler.
Bu ayrım önemlidir çünkü her state aynı şekilde geri alınamaz. Yanlış bir mesaj özetini düzeltmek kolaydır; yanlış müşteriye iki kez fatura kesmek kolay değildir. İyi agent mimarisi state'i yalnızca belleğe değil, sorumluluğa göre sınıflandırır.
conversation state
Kullanıcı niyeti, mesaj geçmişi, özet, aktif bağlam. Modelin anlamlı devam etmesini sağlar.
task state
Plan, node, step, dependency, ara çıktı. İşin hangi aşamada olduğunu gösterir.
tool-result state
Tool input, output, hata, retry sayısı, kanıt. Aynı gözlemi tekrar üretmeden kullanmayı sağlar.
side-effect state
Dış dünyada gerçekleşen yazma eylemleri. Rollback yerine çoğu zaman compensation ister.
Conversation state
Conversation state, modelin kullanıcıyla aynı konuşmanın içinde kalmasını sağlayan bağlamdır. Mesaj geçmişi, özetlenmiş geçmiş, sistem talimatları, son response kimliği ya da session kaydı bu katmana girer. OpenAI Responses API'de previous_response_id ile cevaplar zincirlenebilir; bu, modelin önceki dönüşlerdeki bağlamı takip etmesine yardım eder.
Fakat bu katmanın sınırı nettir: conversation state, agent'in operasyonel ilerlemesini tek başına garanti etmez. Kullanıcıya “raporu hazırlıyorum” dedikten sonra sistem çökerse, sadece konuşma geçmişi raporun hangi sorguları çalıştırdığını, hangi dosyayı yazdığını, hangi tool sonucunun geçerli olduğunu ve hangi adımın güvenle tekrar koşulabileceğini söylemez.
Bu yüzden sohbet belleği ile yürütme belleğini karıştırmamak gerekir. Conversation state kullanıcı deneyimi için şarttır; ama durable execution için yalnızca bir girdidir.
Kullanıcının amacı ve önceki cevaplar korunur.
Uzayan geçmiş token ve context window baskısı yaratır.
Tool yan etkileri ve iş ilerlemesi ayrıca kaydedilmelidir.
Task state
Task state, agent'in işi yürütürken nerede olduğunu anlatan yapısal durumdur. Bir planın hangi maddesi tamamlandı? Hangi node sırada? Hangi dependency bekleniyor? Kullanıcı onayı hangi branch'i açtı? Bunlar sohbet geçmişine gömülürse okunabilir ama güvenilir çalıştırılamaz; bu yüzden task state'in makine tarafından tüketilebilir bir şema içinde tutulması gerekir.
LangGraph gibi graph tabanlı sistemlerde thread_id ve checkpoint kavramları tam da bu yüzden merkezde durur. Checkpointer, tek bir thread'in graph state snapshot'larını saklar; store ise thread'ler arası uzun ömürlü bilgi için kullanılır. Bu ayrım üretimde hayat kurtarır: aktif koşunun nerede kaldığı ile kullanıcının kalıcı tercihi aynı veri tipi değildir.
request
İstek task spec'e çevrilir.
plan
Adımlar ve dependency ilişkileri çıkarılır.
step
Aktif node ve ara çıktı güncellenir.
interrupt
Hata, insan onayı ya da bekleme noktası kaydedilir.
resume
Aynı thread güvenli noktadan devam eder.
Tool state
Tool state, agent'in dış dünya ile temasında oluşan kanıt defteridir. Tool çağrısının input'u, output'u, hata sınıfı, süre bilgisi, retry sayısı ve varsa operation id burada tutulmalıdır. Çünkü tool'lar model cevabından farklıdır: bir arama tool'u gözlem döndürür, bir ödeme tool'u ise gerçek dünyada sonuç üretir.
Bu katmanda en önemli terim idempotency. Bir operasyon idempotent ise aynı istek aynı anahtarla tekrar geldiğinde dış etki ikinci kez oluşmaz. Örneğin “invoice-123 için tahsilat başlat” çağrısı timeout verdiğinde agent tekrar denemek isteyebilir. Eğer ödeme tool'u idempotency key tanımıyorsa aynı ödeme iki kez alınabilir. Eğer tanıyorsa ikinci deneme önceki sonucu döndürür veya güvenli biçimde no-op olur.
Agent sistemlerinde retry çoğu zaman iyi niyetli bir felaket kaynağıdır. Model “deneyelim” der, orchestrator “retry edelim” der, ağ “cevap kayboldu” der; ama dış sistem işi çoktan yapmış olabilir. Tool state bu belirsizliği görünür kılar.
operation id
Aynı işin tekrarını ayırt eden kararlı anahtar.
input hash
Tool'a ne gönderildiğini karşılaştırılabilir yapar.
result payload
Modelin dayandığı gözlemi yeniden üretmeden kullanır.
side effect marker
Dış dünyada yazma eylemi oluştu mu sorusunu cevaplar.
retry policy
Neyi, kaç kez, hangi hata sınıfında tekrar deneyeceğini sınırlar.
Checkpoint
Checkpoint, çalışan sürecin ham RAM görüntüsü değildir; daha çok işin mantıksal bir durak fotoğrafıdır. Hangi thread'deyiz, state değerleri ne, hangi node tamamlandı, sıradaki node ne, hangi tool sonucu kaydedildi, parent checkpoint hangisi? Bunlar bilinirse sistem aynı noktadan devam edebilir, farklı bir branch açabilir ya da insan müdahalesinden sonra akışı sürdürebilir.
Checkpoint'i değerli yapan şey yalnızca “kaydetmek” değildir; geri okunabilirlik ve fork edilebilirliktir. Bir insan “bu tool sonucunu yanlış kabul etmişsin, buradan devam et” dediğinde sistem eski konuşmayı tekrar okutmak yerine belirli bir checkpoint'ten yeni bir çizgi açabilmelidir.
Bu nedenle checkpoint tasarımında isimler operasyonel kararlardır: thread id, checkpoint id, namespace, parent id, created_at, schema version ve source metadata ileride debug ekranının omurgası olur.
thread_id
Koşunun ait olduğu konuşma veya iş hattı.
checkpoint_id
Bu mantıksal fotoğrafın benzersiz kimliği.
parent_id
Fork, time travel ve audit için önceki durak.
state_snapshot
Task state'in şemalı ve serileştirilebilir hali.
tool_evidence
Bu noktaya kadar geçerli kabul edilen tool sonuçları.
schema_version
Kod değiştiğinde eski state'in nasıl okunacağını söyler.
Durable execution
Durable execution, uzun süren bir işin process ömründen bağımsız yaşamasıdır. Worker kapanabilir, deployment değişebilir, network kopabilir; ama işin ilerlemesi güvenilir bir kayıt üzerinden yeniden kurulabilir. Temporal'ın Event History yaklaşımı, Azure Durable Task'ın event sourcing düzeni ve Durable Functions literatüründeki record/replay modeli bu fikrin farklı olgunlaşmış biçimleridir.
Buradaki ana fikir event sourcing: sistem yalnızca son state'i saklamak yerine, state'i oluşturan olayları append-only bir geçmişe yazar. Sonra gerekirse bu geçmiş replay edilerek mantıksal state yeniden kurulur. Bu, “program belleğini dondurdum” demek değildir; programı deterministik sınırlar içinde yeniden çalıştırıp aynı kararlara varacak kanıtı saklamak demektir.
Agent bağlamında kritik nokta şudur: LLM çağrısı, HTTP isteği, rastgele sayı, saat bilgisi, shell komutu ve browser tıklaması nondeterministic olabilir. Durable orchestration içinde bu tür işler doğrudan karara karışırsa replay aynı yolu izlemeyebilir. Bu yüzden dış eylemler activity/tool sınırına alınmalı, sonuçları kaydedilmeli ve orchestrator mümkün olduğunca deterministik kalmalıdır.
command
Orchestrator yapılacak işi ister.
event
Runtime sonucu kalıcı geçmişe yazar.
replay
Kod geçmişten aynı state'i yeniden kurar.
resume
Yeni karar yalnızca son güvenli noktadan verilir.
Rollback ve redrive
Rollback kelimesi agent sistemlerinde çoğu zaman yanlış rahatlık verir. Veritabanı transaction'ı gibi her şeyi geri almak her zaman mümkün değildir. Bir e-postayı gönderdikten sonra onu “gönderilmemiş” yapamazsınız; ancak açıklama e-postası atabilir, ticket'ı kapatabilir, ödeme için refund başlatabilirsiniz. Bu ikinci tür işleme compensation denir.
Redrive, failed execution'ı baştan değil, başarısız adımdan veya güvenli bir ara noktadan yeniden yürütme fikridir. AWS Step Functions redrive davranışında başarılı adımlar korunur; başarısız state yeniden çalıştırılır. Agent tarafında bu karar açık olmalıdır: hangi tool sonuçları korunuyor, hangi step tekrar koşuyor, hangi side effect asla tekrar edilmiyor?
Rollback tasarımı bu yüzden üç kutudan oluşur: logical rollback, yani checkpoint'ten eski bir mantıksal state'e dönmek; retry/redrive, yani başarısız adımı kontrollü tekrar etmek; compensation, yani dış dünyada oluşmuş yan etkiyi yeni bir eylemle telafi etmek.
sadece okuma hatası
retry
Aynı tool input'u ile sınırlı tekrar denenir.
ara state yanlış
fork
Önceki checkpoint'ten yeni branch açılır.
yazma yapıldı
compensation
Geri alma yerine telafi eylemi kaydedilir.
şema değişti
migration
Eski checkpoint yeni state şemasına taşınır.
Üretim notları
State ve durable execution tasarımı iyi yapılınca agent daha gösterişli değil, daha hesap verebilir olur. Geliştirici “model neden böyle yaptı?” sorusuna konuşma geçmişinden değil; checkpoint, event history, tool evidence ve side-effect kayıtlarından cevap verir.
Benim pratik kuralım şu: conversation state kullanıcıya akıcı deneyim verir; task state işi yönetir; tool state kanıt üretir; durable execution ise tüm bunları process ömründen bağımsız hale getirir. Bu katmanlardan biri eksikse agent bazen çalışır, ama olay çıktığında anlatacak defteri olmaz.
Conversation
Geçmiş nasıl özetleniyor, context window dolunca ne atılıyor?
Task
Aktif step, dependency ve terminal state şemalı mı?
Tool
Tool input/output ve hata sınıfları kayıt altında mı?
Idempotency
Yazma tool'ları kararlı operation id kabul ediyor mu?
Checkpoint
Fork, inspect, resume ve migration mümkün mü?
Replay
Nondeterministic işler activity/tool sınırında mı?
Compensation
Geri alınamayan yan etkiler için telafi akışı var mı?
