Ana içeriğe geç

Durum Yönetimi Hafızayı Yener: Agent Kalıcılığı Üzerine Bir Tasarım Notu

Çoğu agent "hafıza" hatası aslında bir durum yönetimi hatasıdır. Geçmiş turlar üzerinde retrieval invariantları uygulayamaz; bir işlem günlüğü uygulayabilir.

Close-up of a sleek prosthetic hand interacting with a robotic arm in a high-tech environment.

Hafıza ile durum arasındaki karışıklık

Bir agent bir siparişin zaten verildiğini unuttuğunda, refleks olarak bir vector store eklenir. Bu genellikle yanlış çözümdür, çünkü sorun hatırlama değildir. Sorun yetki sorunudur.

Çoğu üründe "hafıza", geçmiş turlar üzerinde retrieval anlamına gelir: konuşmayı embed et, yeni sorguyu embed et, en yakın parçaları çek, context window'a yapıştır. Bu mekanizma ton sürekliliği için, kullanıcının üç oturum önce yaptığı referanslar için, bir kararı bilgilendiren arka plan gerçekleri için gerçekten faydalıdır. Yalnızca ekleme yapılan bir metin yığını üzerinde olasılıksal bir alaka filtresidir.

Durum farklı bir nesnedir. Durum, görevin neye taahhüt ettiğinin yetkili kaydıdır: hangi adımlar yürütüldü, hangi yan etkiler gerçekleşti, hangi yükümlülükler açık kaldı, hangi gerçekler şu anda doğru kabul ediliyor ve kimin kanıtıyla. Durumun invariantları vardır. Bir sipariş verildiyse, sipariş tam olarak bir kez vardır ve hiçbir anlamsal benzerlik bunu değiştirmez.

Retrieval hatırlamayı iyileştirir. Invariantları uygulayamaz. Bir retriever "4471 numaralı siparişi verdim" cümlesini yüzeye çıkarabilir ve aynı şekilde onu yüzeye çıkarmayabilir ya da siparişin iptal edildiğini iddia eden eski bir cümleyi yüzeye çıkarabilir. Agent daha sonra benzerlik yarışını hangi parçalar kazandıysa onlar üzerinde akıcı bir şekilde akıl yürütür. Pipeline'daki hiçbir şey bir taahhüdün tam olarak bir kez gerçekleştiğini iddia edemez.

Bu örüntü ekipler arasında tekrarlanır: ara sıra çift ücretlendiren, e-postayı yeniden gönderen veya kapatılmış bir ticket'ı yeniden açan bir iş akışı; "agent unuttu" sonucuna varan bir hata ayıklama oturumu; embedding modelinin kalitesini veya top-k'yı artırma önerisi. Gerçek eksik, kayıp bir işlem günlüğüdür. Embedding'lerden bir defterin işini yapması isteniyor ve bir defter benzerlik problemi değildir.

Bir durum katmanının garanti etmesi gerekenler

Bir durum katmanı, daha güzel bir adı olan bir veritabanı değildir. Sistemin geri kalanının varsaymasına izin verilen bir dizi garantidir. En çok üçü önemlidir.

Idempotency. Bir adımı yeniden çalıştırmak yan etkilerini çoğaltmamalıdır. Bu, dışarıdan görülebilen her eylemin görev kimliğinden ve adım kimliğinden türetilen kararlı bir anahtar taşıması ve executor'ın harekete geçmeden önce bu anahtarın zaten commit edilip edilmediğini kontrol etmesi anlamına gelir. Kontrol ve commit, eyleme göre atomik olmalı ya da en azından aralarındaki bir çökmenin kurtarılabilir olacağı şekilde sıralanmalıdır. Bu olmadan, her sağlam agent runtime'ının ihtiyaç duyduğu retry'lar bir bozulma kaynağı haline gelir.

Sıralama. Agent hangi taahhütlerin hangilerinden önce geldiğini bilmelidir. Bazı bağımlılıklar nedenseldir (ödeme temizlenmeden gönderemezsiniz), bazıları yalnızca sırasaldır (oluşturmadan bir günlüğe ekleme yapamazsınız). Sıralama, devam ettirilen bir çalışmanın neyin hâlâ yapılmasının meşru olduğuna karar vermesini sağlar. Çekilen gerçekler yığınının sıralaması yoktur; bir durum makinesinin vardır.

Detailed view of an ATEM Micro Panel used for video production control in a studio environment.

Kurtarılabilirlik. Çöken bir çalışma baştan değil, bir checkpoint'ten devam etmelidir. Bu, bir demoyu bir sistemden ayıran garantidir. Kurtarmanın tek yolu tüm yörüngeyi yeniden oynatmaksa, o zaman her adım idempotent olmalı ve her dış çağrı tekrarı tolere etmelidir — ve pratikte bunlardan biri etmeyecektir.

Bu garantiler bedava değildir. Bir durum katmanı yazma gecikmesi, şema bakımı ve görev modeli her değiştiğinde bir migrasyon yükü ekler. Ayrıca agent'ı kısıtlar: önceden serbest biçimli olan adımlar, girdilerini ve etkilerini bildirmek zorunda olan operasyonlar haline gelir. Bu kısıt asıl meseledir, ama gerçek bir maliyettir ve bunu gelişigüzel benimseyen ekipler kendilerini problemle değil şemayla boğuşurken bulacaktır.

Minimal bir durum şeması

En küçük kullanışlı durum modeli, genellikle tek bir context blob'una karıştırılan üç tür bilgiyi ayırır.

Episodik context — ne söylendi. Turlar, tool çıktıları, çekilen dokümanlar, özetler. Bu, embedding'lerin doğal yuvasıdır. Yüksek hacimli, düşük yetkili ve tasarım gereği kayıplıdır.

Kalıcı gerçekler — ne doğru. Her gerçek sürümlenir, bir kaynak taşır ve bir zaman damgası taşır. Bir gerçeğin üzerine asla yerinde yazılmaz; yeni bir sürüm eskisinin yerini alır ve eski sürüm okunabilir kalır. Çelişkiler sessiz güncellemeler değil, çözülmesi gereken çatışmalardır.

Bekleyen yükümlülükler — ne borçlu. Açık görevler, beklenen yanıtlar, planlanmış retry'lar, çözülmemiş çatışmalar. Bu, agent'ın sırada ne yapacağına karar verirken başvurduğu çalışma kümesidir.

Somut bir biçim, sözde şema olarak:

facts(id, subject, predicate, value, source, observed_at, superseded_by)
obligations(id, task_id, kind, key, state, created_at, deadline)
episodes(id, task_id, role, content_ref, created_at)

Bir obligation üzerindeki key, idempotency anahtarıdır. Bir fact üzerindeki superseded_by, çatışma çözümü bağlantısıdır. task_id her şeyi tek bir çalışmaya bağlar.

Tasarımın ikinci yarısı maruz bırakmadır. Durum okumaları ve yazmaları, runtime'ın örtük yan etkileri değil, açık araçlar olmalıdır. Agent state.read_facts(subject) veya state.commit(obligation_id, result) çağırdığında, bu çağrılar diğer tüm tool call'larla birlikte trace'te görünür. Bu, durum geçişlerini denetlenebilir ve her şey için kullanılan aynı mekanizmayla hata ayıklanabilir kılar. Ayrıca hata modunu görünür kılar: bir obligation'ı hiç commit etmeyen bir çalışma, onu

Close-up of a plastic bottle in a modern factory bottling production line.

Ödünleşim ayrıntılılıktır. Açık durum araçları context tüketir ve tur ekler. Durumu runtime'ın arkasına saklayan ekipler daha kısa trace'ler ve daha kötü teşhisler elde eder; onu açığa çıkaran ekipler token olarak öder ve gözlemlenebilirlik kazanır. Uzun ufuklu görevler için bu değişim genellikle buna değer.

Açığı ortaya çıkaran test durumları

Üç test, gerçek bir durum katmanını durum kostümü giymiş bir retrieval katmanından ayırır.

Öldür ve devam ettir. Süreci çalışma ortasında sonlandırın, yeniden başlatın ve devam etmesine izin verin. Sonuç kesintisiz bir çalışmadan farklıysa — farklı sayıda yan etki, farklı nihai durum, atlanan veya tekrarlanan bir adım — durum modeli yetersiz belirtilmiştir. Bu test yazması ucuz ve ortaya çıkardıkları bakımından acımasızdır. Bunu geçen çoğu sistem, görev baştan yeniden oynatılabilecek kadar kısa olduğu için geçer; bu, bir checkpoint'ten kurtarmakla aynı şey değildir.

Aynı tool call'ı iki kez yeniden oynat. Aynı idempotency anahtarıyla özdeş bir eylemde bulunun ve tam olarak bir yan etkinin var olduğunu doğrulayın. Ardından farklı bir anahtarla eylemde bulunun ve iki tane olduğunu doğrulayın. İkinci yarı önemlidir: her şeyi tekilleştiren bir idempotency şeması, hiçbir şeyi tekilleştirmeyen kadar yanlıştır.

Eski bir gerçek enjekte et. Bir gerçek yazın, onun yerine yenisini koyun, sonra agent'a yalnızca eski sürümü içeren bir context verin. Agent çatışmayı tespit etmeli ve eski değere göre hareket etmek yerine onu yetkili kayıtla uzlaştırmalıdır. Sürümlenmiş gerçekleri olmayan sistemler bu testi sessizce geçemez, çünkü eski değer tıpatıp yeni bir değer gibi görünür.

Çoklu agent kurulumları için dördüncü bir test eklemeye değer: iki agent aynı obligation'ı eşzamanlı olarak dener. Durum katmanı onları serileştirmelidir ve kaybeden, devam etmek yerine işin zaten yapıldığını gözlemlemelidir. Paylaşılan, işlemsel bir kaydın kendini kanıtladığı yer burasıdır; paylaşılan bir vector store böyle bir koruma sunmaz.

Retrieval'ın hâlâ ait olduğu yer

Bunların hiçbiri retrieval'a karşı bir argüman değildir. Episodik context gerçekten büyük, gerçekten bulanık ve özetlendiğinde ve arandığında gerçekten faydalıdır. Tartışma yetkiyle ilgilidir: retrieval bir kararı bilgilendirebilir, ama bir taahhüdün zaten var olup olmadığına karar veren şey o olmamalıdır.

Sonuç

Mevcut ürün anlamında hafıza bir hatırlama mekanizmasıdır. Durum bir taahhüt mekanizmasıdır. Farklı problemleri çözerler ve ikisini karıştırmak akıcı, iyi indekslenmiş ve yanlış sistemler üretir. Çözüm nadiren daha iyi bir embedding modelidir. Bir işlem günlüğü, bir idempotency anahtarı ve bir checkpoint'tir — bir agent'ın sonuçları olan işlerle güvenilmesini sağlayan gösterişsiz makine.

İlgili okumalar

Bunun yanıtladığı sorular

Why doesn't a vector store fix an agent that forgets commitments?

A vector store retrieves text by similarity. It cannot assert that a side effect happened exactly once, that one commitment precedes another, or that a resumed run should skip completed steps. Those are invariants, and invariants require an authoritative, ordered record.

What is the minimum viable state layer for an agent?

Three separated stores: episodic context for what was said, versioned durable facts for what is true, and pending obligations for what is owed. Each obligation carries a stable idempotency key, and state reads and writes are exposed as explicit tools so they appear in traces.

How do you test whether an agent has real state or just retrieval?

Kill the process mid-run and resume; replay the same tool call twice and assert one side effect; inject a superseded fact and require the agent to detect the conflict. Systems without versioned state fail the third test silently.