26  Bellek Mimarileri

Bölüm durumu: çevrildi. Kaynak metin: İngilizce 26. bölüm. Bölümde küçük bir yerel ölçüm var: ollama 0.24.0 üzerinden qwen3.5:9b ile koşturulan, kısa prompt’lardan (istemlerden) oluşan ve birkaç dakikada biten bir çelişki probe’u (küçük, hedefli bir test). Sorunun bu kitabın sağlayamayacağı bir ölçek gerektirdiği yerlerde yayımlanmış sonuçlara başvuruluyor. Bölüm 25 bir çalıştırmanın içinde olanı kapsıyor; bu bölüm çalıştırmalar arasında hangi bilginin korunduğuyla ilgili. Probe greedy (açgözlü) kod çözme (decoding) ile ve madde başına tek örnekle koştu; dolayısıyla geriye kalan tek örnekleme gürültüsü, otuz maddenin hangileri olduğundan geliyor. Ölçümü yeniden üretmek için gereken üç prompt şablonu ve cevapları sınıflara ayırma kuralı henüz ölçümle birlikte yayımlanmadı. Yazılım: NumPy 2.5.2, Python 3.14.5.

Öğrenme hedefleri. Bu bölümün sonunda:

26.1 Üç tür bellek, üç farklı problem

Ajanlarda “bellek” sözcüğü, adından başka neredeyse hiçbir ortak yanı olmayan üç şeyi kapsar. Bunları birbirinden ayırmak tasarım işinin büyük kısmıdır, çünkü her birinin ömrü, depolama çözümü ve kusur biçimi farklıdır.

Tek kelime, üç problem
ne tutar ömür nerede tutulur nasıl bozulur
Çalışma mevcut transkript — görev, son adımlar, canlı araç sonuçları bir çalıştırma bağlam penceresi dolar. Bölüm 25 tümüyle bununla ilgili
Epizodik ne olduğu ve ne zaman: geçmiş konuşmalar, yapılan eylemler, sonuçlar çalıştırmalar boyunca yalnızca eklenen, erişilebilir kayıt birikir. Hacim sınırsız büyür ve eski epizotlar işe yarar olanları dışarı iter
Anlamsal kalıcı olgular: tercihler, varlıklar, ilişkiler, öğrenilmiş kurallar yenisiyle çelişene ya da süresi dolana kadar güncelleyebildiğiniz ve silebildiğiniz bir depo bayatlar ve bayat olgular hiç olmayanlardan kötüdür

Pratikte en önemli ayrım son sütundur. Çalışma belleği genellikle kendini belli ederek (hata vererek) bozulur — pencerenin sınırına dayanırsınız ve bir şey hata verir. Her zaman değil: Bölüm 25’in bütün konusu bunun daha sessiz biçimidir; her şey sığar ama uzun bir bağlamın ortası artık iyi kullanılmaz. Epizodik bellek yavaş bozulur — sistem pahalılaşır ve getirdiklerinin alakası düşer.

Anlamsal bellek sessizce bozulur: martta kaydedilmiş bir olgu temmuzda hâlâ kendinden emin biçimde döndürülür ve sistemde hiçbir şey onun süresinin dolduğunu bilmez. Hacimce üçünün en küçüğü olmasına rağmen bu bölümün büyük kısmının anlamsal bellekle ilgili olmasının nedeni bu asimetridir.

Bu terimler insan belleği benzetmesinden geliyor, ama benzetmeye fazla yaslanmamak gerekir. Burada önemli olan mühendisliktir: epizodik bellek bir olay kaydıdır, anlamsal bellek ise provenance (kaynak geçmişi: bilginin nereden ve ne zaman geldiğinin kaydı) tutan, güncellenebilir bir anahtar-değer deposudur. İnsan belleğinin ikisini birbirine karıştırması, sisteminizin de karıştırması için bir neden değildir.

Literatürde dördüncü bir türle de karşılaşacaksınız: prosedürel bellek, yani işin nasıl yapılacağına dair bilgi. Yaygın kullanılan ajan sınıflandırması (CoALA, Sumers vd.) çalışma, epizodik, anlamsal ve prosedürel belleği sayar. Çoğu sistemde prosedürel bellek ayrı bir depo bile değildir: sistem prompt’u, araç tanımları ve koddur; siz dağıtım yaptığınızda değişir. Yalnızca ajanın kendi talimatlarını yeniden yazabildiği durumda bir bellek problemine dönüşür — her başlangıçta okuyup düzenlediği bir “öğrenilen dersler” dosyası gibi. Bunu bu bölümdeki en hassas yazma yolu sayın: oraya giren kötü bir kayıt tek bir cevabı değil, sonraki her çalıştırmayı değiştirir.

Neye bakacağız. Önce her tür belleğin nerede tutulması gerektiğine bakacağız; popüler cevabın — her şeyi göm, yani embedding’e (gömme vektörüne) çevir — üç türden tam olarak biri için yanlış varsayılan olduğu yer burası. Sonra neyin yazıldığına ve buna kimin karar verdiğine: bu, seçmeyerek zaten seçmiş olduğunuz bir politikadır. Sonra depo birbiriyle çelişen iki olgu tuttuğunda ne olduğunu ölçeceğiz; bu, bölümün ucuza cevaplayabildiği ve çoğu tasarımın hiç sorun yokmuş gibi geçiştirdiği sorudur. Sonra en baştan kurulması gereken unutma. Ardından üç pratik soru: bellek ajanın çağırdığı bir araç mı, yoksa ajanın hiç görmediği bir altyapı mı; bir çökmeden sonra ne sağ kalır; ve bir bellek nasıl sınanır. Son olarak da bir sistemin hatırladığı insanlara ne borçlu olduğu; bunların hepsi politika belgesi değil, şema kararı çıkıyor.

26.2 Depolama: hemen vektör veritabanına koşmayın

Üç tür bellek, üç depolama sorusu demektir ve yalnızca biri zordur. Çalışma belleği bağlam penceresinde durur, çünkü bağlam penceresi zaten odur. Epizodik bellek bir kayıttır (log) ve kayıt tutmak çözülmüş bir problemdir. İlginç olan, varsayılan içgüdünün her şeyi gömüp benzerlikle erişmek olduğu anlamsal bellektir.

Bu yanlış bir varsayılandır ve nedeni, Bölüm 25’in yapılandırılmış veri için gösterdiği nedenle aynıdır: benzerlik araması, belleğin gerçekten ihtiyaç duyduğu işlemleri ifade edemez.

İşlemler şunlardır: bu kullanıcının mevcut tercihini getir, onu güncelle, bu kişi hakkındaki her şeyi sil, marttan beri neyin değiştiğini listele. Bunlar anahtarlar üzerinde arama ve değiştirmedir. Hiçbiri en yakın komşu sorgusu değildir.

Dört depo ve her birinin gerçekte ne işe yaradığı
depo gerçekten neyde iyi bellek olarak nerede bozulur
İlişkisel tercihler, varlıklar, anahtarlanabilir bir kimliği olan her şey; gerçekten silen güncellemeler ve silmeler bir şema ister, dolayısıyla modelin hatırlamaya karar verdiği her şeyi soğuramaz
Vektör epizodik hatırlama — buna benzer bir şeyi daha önce konuştuk mu bir olgunun doğal güncellemesi ya da silinmesi yok; çelişen iki bellek de sorunsuzca erişilir ve doğruluğa göre değil benzerliğe göre sıralanır
Çizge varlıklar arası ilişkiler, onlar hakkında çok adımlı sorular işletmesi ağırdır ve çoğu proje buna ihtiyaç duyan bir soruyu hiç sormaz
Anahtar–değer / belge kullanıcı başına küçük, yapılandırılmış ve tek parça okunan bir profil kullanıcılar arasında sorgulamak istediğinizde kötü ölçeklenir

Çoğu sistem için işleyen mimari gösterişsiz ve melezdir:

  anlamsal bellek   →  bir tablo.   user_id, key, value, source, written_at
  epizodik bellek   →  bir kayıt; erişim için gömülür, tam kayda geri
                       işaretçiler taşır

Olgular satırlara, epizotlar vektörlere gider.

Bu alanda sık yapılan bir tasarım hatası, olguları bir kimlik vermeden vektörlere koymaktır. Sorun, depolama katmanının buna izin vermemesi değil: pgvector satırları sıradan SQL UPDATE, DELETE ve upsert (aynı anahtar varsa güncelleme, yoksa ekleme) kabul eder ve her yönetilen vektör deposu kimliğe göre silmeyi destekler. Asıl sorun, olgu için kararlı bir anahtarı olmayan, yalnızca ekleme yapılan bir koleksiyondur.

(user_id, key) başına tek satır olmasını — örneğin kullanıcı başına tek bir preferred_channel — hiçbir şey dayatmıyorsa, düzeltilmiş bir tercih birincisinin yanına oturan ikinci bir embedding olur. İkisi de erişilebilirdir ve benzerlik aramasının yenisini yeğlemesi için bir sebep yoktur. Güncelleme de silme de “olsa iyi olur” değil, zorunluluk çıkar — biri doğruluk, diğeri yasa gereği — ve ikisini de işler kılan, şemada dayatılan olgu kimliğidir. (user_id, key) üzerindeki bir tekillik kısıtı, embedding’i de saklayan bir pgvector tablosunda da aynı derecede iyi çalışır. Mesele vektörün nerede durduğu değil anahtardır; her benzerlik indeksi onun üzerinden türetilmiş bir görünümdür.

26.3 Yazma politikaları: kimsenin bilerek vermediği karar

Önceki alt bölüm, bir olguyu tutmaya karar verdikten sonra olgunun nereye gideceğiyle ilgiliydi. Bu alt bölüm o kararın kendisiyle, yani kimsenin yazıya dökmediği kararla ilgili.

Neyin hatırlanacağı bir politikadır ve birini seçmezseniz “model ne karar verirse” politikasını seçmişsinizdir; bu politikanın bilinen kusur biçimleri vardır.

Üç yazma politikası
kim karar verir nasıl davranır ne zaman kullanılır
Kural tabanlı çıkarıcıyı siz yazarsınız: şu olaylardan şu alanlar öngörülebilir ve denetlenebilir; önemli olan her şey için doğru varsayılan
Modelin kararıyla ajan bir şeyi kalıcı gördüğünde bir remember aracı çağırır esnektir ve sizin hatırlamayacağınız şeyleri hatırlar — hatırlamaması gerekenler dâhil
Kullanıcı onaylı sistem önerir, kişi onaylar en yüksek precision (kesinlik) ve gerçek rıza veren tek seçenek; her seferinde bir etkileşime mal olur

Tablonun göstermediği ikinci bir eksen daha var ve bu eksen precision’ınızı değil güvenlik duruşunuzu belirliyor: bu yazma yoluna neler ulaşabiliyor? Kural tabanlı politika yalnızca adını koyduğunuz şeyi yazar; kullanıcı onaylı politika yalnızca bir kişinin onayladığını. Modelin kararıyla yazma ise modelin okuduğu her şeyi yazabilir — araç çıktısı ve eline verilen her belge dâhil.

Üretimde ayakta kalan dört kural:

Konuşmayı değil kararları ve tercihleri hatırlayın. Kullanıcı faturalarının Levent ofisine gönderilmesini tercih ediyor raf ömrü olan bir olgudur. Bunu söylediği paragraf ise bir epizottur ve profile değil kayda aittir.

Her yazmayla birlikte provenance’ı kaydedin. Ne zaman yazıldığı, hangi olayın buna yol açtığı ve çıkarıcının ne kadar emin olduğu. Provenance olmadan çelişkileri çözemez, hiçbir şeyin süresini dolduramaz ve sistem benim hakkımda bunu neden düşünüyor sorusunu cevaplayamazsınız — ve bu soru size mutlaka sorulacaktır.

Tek seferlik bir çıkarsamaya dayanarak asla yazmayın. Bir kez çıkarsadığınız bir tercihle üç kez ifade edilmiş bir tercih farklı şeylerdir. İşe yarayan en ucuz politika, bilginin kaynağına göre ayrım yapar: açık ve kalıcı bir ifadeyi kullanıcı ilk söylediğinde yazın, çünkü bunu size kendisi söyledi; davranıştan çıkarsadığınız her şey için ise ikinci bir tekrarı ya da teyidi bekleyin.

Saldırganın kontrolündeki metni asla olgu olarak yazmayın. Bu, diğer üç kuraldan kendiliğinden çıkmayan kuraldır; belleğe yazılmış kötü bir cümleyi tek seferlik kötü bir prompt’tan nitelikçe daha tehlikeli kılan da budur: etkisi kalıcıdır. Modelin bir web sayfasını, bir belgeyi ya da bir destek kaydını okuduktan sonra çağırabildiği bir remember aracı, saldırganın sisteminizde hesabı olmadan ulaştığı bir yazma yoludur: saldırgan cümleyi içeriğe koyar, model onu kalıcı sayar ve o cümle sonraki her oturuma taşınır. Tek seferlik bir enjeksiyon kalıcı hâle gelir; Bölüm 36 de konuyu tam bu cümleden devralıyor. Önlem, elinizde zaten olan provenance alanıdır: source’u kaydedin, kaynağı bir kişinin ifadesi değil erişilmiş içerik olan yazmaları reddedin ve hatırlanan bir belleğin sistem prompt’una talimat taşımasına asla izin vermeyin.

Her şeyi hatırlamanın kusur biçimi depolama maliyeti değildir — depolama ucuzdur. Erişimin kötüleşmesidir: ilgisiz her bellek, ilgili olanla yarışan başka bir adaydır ve Bölüm 19’un ölçümleri doğrudan geçerlidir. Her şeyi hatırlayan bir bellek sistemi, indeksi bilerek bozulmuş bir erişim sistemidir. Bir retriever’ın başka bir derlemde ölçülmüş başarısı da kendi bellek kaydınıza kendiliğinden taşınmaz (Thakur vd. 2021); onu kendi epizotlarınızda ölçün.

26.4 Çelişki, ölçülmüş hâliyle

Olgu biriktiren bir depo eninde sonunda birbiriyle çelişen iki olgu tutacaktır. Tasarım sorusu şu: bunu sizin mi ele almanız gerekiyor, yoksa model ikisini birden okuyunca kendisi mi çözüyor?

Cevaplaması ucuz bir soru; cevap şöyle. Otuz kurgusal çelişki — kullanıcı martta e-postayı, temmuzda telefonu tercih etmiş — olgular birebir aynı tutularak üç koşulda denendi: çıplak (bare: iki olgu var, tarih yok), tarihli (dated: her olgu kayıt tarihini taşıyor) ve tarihli+kural (dated+rule: tarihlere ek olarak açık bir güncellik kuralı). Cevaplar, daha yeni değerle eşleşip eşleşmediklerine göre puanlandı. Maddelerin yarısında daha yeni olgu önce listelendi; böylece konumun etkisi güncelliğin etkisinden ayrıldı.

Puanlama. Her cevap üç sınıftan tam olarak birine atanıyor; dolayısıyla sütunların toplamı otuz maddenin %100’ünü veriyor: yalnızca temmuz değerini adlandırıyorsa daha yeni, yalnızca mart değerini adlandırıyorsa daha eski, ikisini birden ya da hiçbirini adlandırıyor veya cevap vermeyi reddediyorsa kaçamak (hedged: tek bir değer seçmeyen cevap). Çıplak satırdaki %0,0, küçük bir sayının yuvarlanmış hâli değil, 30’da 0’dır. O satırı zamansal akıl yürütmenin bir testi olarak değil, bir kontrol koşulu olarak okuyun: tarih de kural da yokken bağlamdaki hiçbir şey hangi olgunun daha yeni olduğunu söylemiyor. Dolayısıyla kaçamak cevap — burada %83,3 — savunulabilir cevaptır; dikkatli bir model burada ne yeniyi ne eskiyi seçer. Yeniyi 30’da 0 kez seçmesi bununla tutarlı; eskiyi 30’da 5 kez seçmesi ise değil (aşağıya bakın).

qwen3.5:9b, 30 contradictions per condition, n = 30
paired: the same thirty items run through all three conditions

 condition     chose newer   95% CI        hedged   newer listed first / last
 bare            0/30  0.0%   [ 0.0, 11.4]   83.3%          0.0%  /   0.0%
 dated          10/30 33.3%   [19.2, 51.2]   66.7%         33.3%  /  33.3%
 dated+rule     25/30 83.3%   [66.4, 92.7]   16.7%         66.7%  / 100.0%

Buradan çıkan sonuçları, kurduğunuz sistemi ne kadar değiştirmeleri gerektiğine göre sıralayalım.

Zaman damgaları tek başına yetmiyor. [12 Mart 2025’te kaydedildi] ve [28 Temmuz 2025’te kaydedildi] eklemek modeli, daha yeni olguyu hiç seçmemekten cevapların üçte birinde seçmeye taşıdı. Cevapların üçte ikisinde ise hâlâ seçim yapmadı. Bellek tasarımınız “tarihi sakla, gerisini model çözsün” ise bu ölçüm, modelin bunu çözmeyeceğini söylüyor.

Açık bir kural işin çoğunu yapıyor, ama hepsini değil. Tek bir cümle eklemek — olgular çeliştiğinde en son kaydedileni kullan — onu %83,3’e taşıdı. Bu büyük ve ucuz bir iyileşmedir. Yine de altı cevaptan biri daha yeni değeri söylemek yerine hâlâ kaçamak yapıyor; eski olguyu seçen ise hiç yok.

Tablodaki üç aralık birbiriyle örtüşmüyor; ama aralıkları karşılaştırmak burada zaten doğru test değil: üç koşul aynı otuz maddede koştu, dolayısıyla aralarındaki karşılaştırma eşleştirilmiş. Çıplak koşulda hiçbir cevap doğru değildi; dolayısıyla çıplaktan tarihliye geçişte on uyumsuz çiftin hepsi aynı yönde ve kesin (exact) McNemar testi p = 0,002 veriyor. Tarihliden tarihli+kurala geçiş net on beş doğru cevap ekliyor; bu marjinal toplamlarla tutarlı her uyumsuz çift dağılımında kesin p değeri 6 × 10⁻⁵ ile 0,004 arasında kalıyor. Tablodaki Wilson aralıkları her oranın belirsizliğini gösteriyor; farkın testi değiller.

Kural konumla etkileşiyor ve buradaki en rahatsız edici sayı bu. Tarihli+kural koşulunda model, daha yeni olgunun sonra listelendiği 15 maddenin 15’inde, önce listelendiği 15 maddenin 10’unda doğruydu — %100’e karşı %66,7, iki yönlü Fisher kesin testi p = 0,042. Hücre başına on beş madde var ve bu ayrım sonuçlara bakıldıktan sonra seçildi; bunu bir yasa olarak değil, kendi modelinizde denetlemeniz gereken bir uyarı olarak okuyun. Çıplak ve tarihli koşullarda iki grup arasında fark yok (0,0/0,0 ve 33,3/33,3); yani bu genel bir konum etkisi değil, yalnızca kural varken beliriyor. Temkinli okunduğunda: kural varken doğruluk, seçtiğinizin farkında bile olmadığınız bir sıralamaya bağlı olarak üçte iki ile %100 arasında bir yerde. Bu da aşağıdaki sonuç için bir argüman daha: erişimde çözün, tek bir olgu enjekte edin; yanlış yapılabilecek bir sıralama da kalmaz.

Çelişki çözümü prompt’unuza değil erişim kodunuza aittir. Enjekte etmeden önce çözün: tek bir olgu döndürün — politikanızın seçtiği olguyu — ve modelin tutarsızlık gösterebileceği bir şey kalmasın. Yayımlanmış sistemler de aynı kararı iki farklı yoldan cevap üreten prompt’un dışına taşıdı. Rasmussen vd. (2025) depoyu çift zamanlı (bi-temporal) bir çizge üzerine kuruyor — her olgu hem ne zaman doğru olduğunu hem de sistemin onu ne zaman öğrendiğini taşıyor — ve yeni bir olgu eskisiyle çeliştiğinde, iki geçerli olguyu yan yana tutmak yerine eski kenarın ne zaman doğru olmaktan çıktığını kaydederek onu geçersiz kılıyor. Chhikara vd. (2025) ise çelişkiyi yazma anında çözüyor: her yeni olgu için bir LLM çağrısı onu depodaki benzer belleklerle karşılaştırıp ekleme, güncelleme, silme ya da hiçbir şey yapmama arasında seçim yapıyor. Orada da bir model karar veriyor, ama bir kez, tek bir çift üzerinde, olgu yazılırken — her soru cevaplandığında değil. Bu ölçüm, başkalarının öbür yönden gelerek vardığı bir mimariyi destekleyen küçük ve yerel bir argüman.

Varsayılan davranış yanlış olanı seçmek değil, kaçamak yapmaktır. Çıplak koşulda model daha eski olguyu cevapların %16,7’sinde seçti, %83,3’ünde ise ikisini birden verdi ya da hiçbirini vermedi. Bu, kendinden emin biçimde yanlış seçmekten iyidir — ama “tercihiniz e-posta, ya da belki telefon” diye cevaplayan bir sistem kullanıcıyı aynı ölçüde yüzüstü bırakmıştır ve bunu, yanlış bir cevaptan saptaması daha zor bir biçimde yapar. Çıplak koşulda kaçamak cevap modelin verebileceği en dürüst cevaptır; kusur, modele karar verebileceği hiçbir şey sunmayan sisteme aittir.

Model çelişkileri çözmüyor; bir kural işin çoğunu görüyor
KOŞUL 30 CEVABIN DAĞILIMI YENİYİ SEÇTİ çıplak iki olgu, tarih yok %83,3 kaçamak %16,7 %0,0 tarihli her olgu tarihini taşıyor %33,3 %66,7 kaçamak %33,3 tarihli + kural artı bir güncellik cümlesi %83,3 %16,7 %83,3 daha yeni olguyu seçti kaçamak — ikisi ya da hiçbiri daha eski olguyu seçti EN ÇOK KURAL YARDIM EDİYOR, AMA AÇIĞI YİNE DE KAPATMIYOR altı cevaptan biri hâlâ kaçamak — erişimde çözün ve tek bir olgu enjekte edin

Gri bant, insanların hesaba katmadığı kusurdur. Yanlış bir cevap değil, hiç cevap olmamasıdır ve prompt’a düzenek ekledikçe yok olmuyor, yalnızca küçülüyor. Ayrıca daha eski olgunun yalnızca çıplak koşulda (30’da 5) seçildiğine dikkat edin; tarihler eklenince eskiyi seçen cevap kalmıyor. Tarih yokken hangi olgunun eski olduğunu model bilemez; bu beş seçimin hepsinin eskiye düşmesi şans olabilir (iki yönlü kesin binom testi p ≈ 0,06) ya da madde kurgusundan gelebilir. Bu probe ikisini ayırt etmiyor.

Küçük ölçüm, dar iddia: tek model, otuz madde, genişliği 32 puana varan aralıklar. Ortaya koyduğu şey sıralamadır — çıplak < tarihli < tarihli+kural — ve kesin rakamlara bağlı olmayan pratik sonuç: bir WHERE yan tümcesi ve öncelik sütunlarınız üzerinde bir ORDER BY … LIMIT 1 tam da bunu yapacakken çelişki çözümünü modele bırakmayın.

26.4.1 Peki erişim tarafı ne yapmalı?

Çözün, sonra enjekte edin. Somut olarak, neredeyse her durumu kapsayan dört kural:

  • Anahtar başına tek olgu. Depo tercih edilen kanal için iki değer tutabiliyorsa belirsizlik modele ulaşır. Yazma yolunu upsert olarak kurun; belirsizlik hiç ortaya çıkmasın. Ancak upsert eski değerin üzerine yazar; marttan beri neyin değiştiğini listele ise eski değere ihtiyaç duyar. Üzerine yazmadan önce eski değeri bir geçmiş tablosuna (ya da epizot kaydına) kopyalayın veya her sürümü valid_from ve valid_to sütunlarıyla ayrı bir satır olarak tutup yalnızca açık olanı okuyun — yukarıdaki çift zamanlı depoyla aynı fikir. Upsert aynı zamanda önceliği denetleme anıdır: yeni değer, saklanandan daha zayıf bir kaynaktan geliyorsa saklananı koruyun ve çelişkiyi kayda geçirin.
  • Varsayılan olarak güncellik kazanır, çünkü genellikle doğrudur ve kullanıcıların beklediği kuraldır. Ama neyin güncelliği? Olgunun doğru olduğu zamanı ve onu öğrendiğiniz zamanı ayrı kaydedin, çünkü eski bir olayın geç gelen bildirimi haber değildir. Güncelliğin yanlış kural olduğu yerde — ifade edilmiş bir tercih, tarih ne olursa olsun çıkarsanmış olanı yenmeli; yetkili bir kaynak da bir tahmini yenmeli — bunu yazma zamanına göre değil, kaynağa ve olay zamanına göre bir öncelik olarak açıkça kodlayın.
  • Süre dolumunu inanca değil takvime bağlayın. Zamana duyarlı her şey yazma anında bir TTL (time to live: bilginin geçerli sayılacağı süre) alır. Bir teslimat adresi yavaş eskir (TTL yerine ara sıra teyit yetebilir); mevcut bir proje hızla eskir.
  • Çözemediğiniz çelişkileri gösterin. Eşit öncelikli iki kaynak çelişiyorsa doğru hamle tahmin etmek değil sormaktır — ve bu, iki cevaptan da çok daha iyi bir kullanıcı deneyimidir.

26.5 Unutmak bir özelliktir

Yalnızca biriktiren sistemler zamanla kötüleşir ve bu bozulma göze çarpmaz, çünkü hiçbir şey hata vermez. Aşağıdaki üç mekanizmanın üçü de en başta eklendiğinde ucuz, sonradan eklendiğinde zahmetlidir:

  • Yazma anında TTL. Her olgu bir süre dolumu ya da açık bir “süresi dolmaz” taşır. Bu karar, çıkarıcıyı yazarken kolaydır, altı ay sonra ise imkânsızdır.
  • Epizotlar için sönüm. Erişimi hem alakaya hem yaşa göre sıralayın. Geçen haftaki bir epizot, geçen yılki birebir aynısından genellikle daha yararlıdır ve saf bir benzerlik sıralaması bunu ifade edemez. Bu fikrin çok anılan örneği Generative Agents (Park vd., 2023): her epizodun erişim puanı güncellik (üstel sönüm), önem ve alaka bileşenlerinin toplamıdır.
  • Gerçekten silen silme. Retriever’ın (erişim bileşeninin) süzmeyi unuttuğu bir deleted bayrağı değil. Bu, Bölüm 38’in gereksinimidir ve tek başına, olguları DELETE’in dediğini yaptığı bir depoda tutmak için iyi bir nedendir.

26.6 Ajanın çağırdığı bir araç mı, hiç görmediği altyapı mı?

Şimdiye kadarki her şey depoyla ilgiliydi. Bu alt bölüm depoyla ajan arasındaki bağlantıyla ilgili. Bu bağlantıyı kurmanın yalnızca iki yolu var ve ikisi arasındaki ödünleşim, Bölüm 23’teki özerklik düzeyleri arasındaki ödünleşimin aynısı: yeteneğe karşı öngörülebilirlik.

Araç olarak bellek. Ajana remember(fact) ve recall(query) araçları verilir ve bunları ne zaman kullanacağına ajan karar verir. Bellek işlemleri transkriptte görünür, dolayısıyla neyin neden yazıldığını denetleyebilirsiniz; ama ajan hiç zahmet etmemeyi de seçebilir. Bedeli, bunun modelin yanılabileceği bir karar daha olmasıdır — ve Bölüm 24 kötü tanımlanmış bir aracın başına ne geldiğini ölçtü: vakaların %41,7’sinde sessizce çağrılmıyor.

Altyapı olarak bellek. Her çalıştırmadan önce kodunuz ilgili olanı getirir ve bağlama enjekte eder — genellikle talimat olarak değil, kullanıcı hakkında saklanmış veri olarak etiketlenmiş, sınırları belli bir blok hâlinde; yukarıdaki yazma yolu kuralının okuma tarafındaki karşılığı. Ajan bir bellek sistemi olduğunu hiç bilmez; yalnızca bazı şeyleri bilir. Bu yaklaşım öngörülebilir ve test edilebilirdir, hiçbir model kararı gerektirmez — ve sabit bir hattın Bölüm 23’te doğru varsayılan olmasıyla aynı nedenle doğru varsayılandır.

Çoğu üretim sisteminin vardığı bileşim: altyapı olarak oku, araç olarak yaz. Hatırlama otomatik gerçekleşir, çünkü her seferinde gerçekleşmelidir; yazma açık bir eylemdir, çünkü kayıtta görmek istediğiniz odur. “Araç olarak yaz”, yazma yolunu modele serbest bırakmak demek değildir: araç açık ve kayda geçen bir eylemdir, yukarıdaki yazma politikası kurallarından geçer, source’u erişilmiş içerik olan yazmaları reddeder ve gerektiğinde kullanıcı onayı ister. Araç, kuralların uygulandığı yerdir; kuralların yerine geçmez.

26.7 Oturumlar, checkpoint’ler ve devam

Uzun süren bir ajan kesintiye uğrayacaktır — bir dağıtım, bir zaman aşımı, bir çökme, sekmeyi kapatan bir kullanıcı. Bundan neyin sağ çıktığı bir tasarım kararıdır ve işe yarar çerçeve şudur: transkript, kalıcılaştırabileceğiniz bir değerdir, bir süreçte yaşayan bir şey değil.

  • Yalnızca en sonda değil, her adımdan sonra checkpoint (kontrol noktası) alın. Birim tek bir döngü yinelemesidir: şimdiye kadarki mesajlar ve çalışma zamanınızın (runtime) devam etmek için ihtiyaç duyduğu her şey.
  • Yalnızca çağrıları değil araç sonuçlarını da saklayın. Bir çalıştırmayı araçlarını yeniden yürüterek tekrar oynatmak, dışarıya bir şey yazan (yan etkisi olan) her araç için yanlıştır, geri kalanlar için de yavaştır.
  • Devam etmeyi başlatmayla aynı kod yolu yapın. Farklı bir dala giren bir devam, test etmeyeceğiniz ikinci bir uygulamadır.

Packer vd. (2023) bunu ciddiye alan referans tasarımdır — kendi sayfalamasını yöneten bir ajan. Sayfalama, işletim sistemlerinde verinin küçük ve hızlı bir bellekle büyük ve yavaş bir bellek arasında taşınmasına verilen addır; burada bağlam penceresiyle dış depolama arasında. İşletim sistemi benzetmesinin düzgün yapılmış hâlini istiyorsanız okunacak makale budur.

26.8 Bir belleği değerlendirmek

Bir bellek üç noktada bozulabilir ve her birinin kendi denetimi gerekir.

  • Yazma. Sistemin sakladığı olguların kaçı gerçekten saklanmalıydı (precision)? Saklanması gereken olguların kaçını sakladı (recall, duyarlılık)? Başlamak için, her birinde dikkatli bir insanın tutacağı olguların işaretlendiği birkaç düzine konuşmalık etiketli bir küme yeter. Yasak yazmaları — enjekte edilmiş talimatlar, tutmayacağınıza söz verdiğiniz veriler — ayrıca sayın, çünkü bunlardan biri kaçırılmış on tercihten daha önemlidir.
  • Okuma. Bir anahtar ya da soru verildiğinde, hatırlama işlemi güncel değeri — ve yalnızca onu — döndürüyor mu? Yukarıdaki çelişki probe’u bu türden bir testtir; lab’ın 3. ve 4. adımları da öyle. Okuma testine bir madde daha ekleyin: başka bir kullanıcının belleği hiçbir sorguda gelmemeli.
  • Çok oturum boyunca bütün döngü. Açık benchmark’lar (kıyaslama) bunu uzun, çok oturumlu konuşmalar ve onlar hakkındaki sorularla yapar: LoCoMo (Maharana vd., 2024) ve LongMemEval (Wu vd., 2024). İkincisinin soru türleri arasında bilgi güncellemeleri — bu bölümün çelişki problemi — ve hiçbir şey saklanmamışken “bilmiyorum” demek anlamına gelen çekimserlik (abstention) da var. Chhikara vd. (2025) sonuçlarını LoCoMo’da, Rasmussen vd. (2025) LongMemEval’da raporluyor. Farklı makalelerin sayıları nadiren karşılaştırılabilir: cevap veren model, hakem ve prompt her makalede farklıdır.

Genel araçlar — hakemler, güven aralıkları, eşleştirilmiş karşılaştırmalar — Bölüm 30’un konusu; belleğe özgü olan, soruların zaman geçip olgular değiştikten sonra sorulması gerektiğidir.

26.9 Gizlilik, rıza ve silme

İnsanları hatırlayan bir sistemin, durumsuz (stateless) bir sistemde olmayan yükümlülükleri vardır ve bunları karşılayan mühendislik kararları, sonradan yazılmış bir politika belgesinde değil Bölüm 26.2’de verilir.

Silmenin gerçekten silmesi gerekir. Olguların gerçek bir DELETE’i olan bir depoda tutulmasının somut nedeni budur. Bu hak yasayla güvence altındadır: AB’de GDPR’ın 17. maddesindeki silme hakkı (“unutulma hakkı”); Türkiye’de ise KVKK’nın 7. maddesi, işlenmesini gerektiren sebepler ortadan kalktığında kişisel verilerin veri sorumlusu tarafından resen ya da ilgili kişinin talebi üzerine silinmesini, yok edilmesini veya anonim hâle getirilmesini öngörür; 11. maddesi de ilgili kişiye bu verilerin silinmesini veya yok edilmesini isteme hakkı tanır. İki rejim Bölüm 38.1’de ele alınıyor. Her vektör bir user_id taşıyorsa bütün bir kullanıcıyı silmek kolay durumdur. “Her şeyi gömüyoruz” yaklaşımı, biri sizden ilk kez belirli tek bir şeyi unutmanızı ya da düzeltmenizi istediğinde probleme dönüşür: bir vektör indeksi olguyu değil, vektörü kimliğiyle siler. Her olgudan onu kodlayan vektörlere bir eşleme tutmadıysanız önce o vektörleri bulmanız gerekir. Tek bir talebi karşılamak için bir olgunun indeksteki bütün izlerini aramak, mimari kararın sonradan ödenen bedelidir.

Provenance, bir cevabı mümkün kılan şeydir. Bu sistem neden telefon aramalarını tercih ettiğimi düşünüyor? sorusunun iyi bir cevabı ancak yazmaya hangi olayın yol açtığını kaydettiyseniz vardır. Bunun için gereken, en başta eklenmiş tek bir sütundur.

Çıkarsama rıza değildir. Kullanıcının ifade ettiği bir tercih, çıkarıcınızın çıkarsadığından farklıdır ve kullanıcılar ikincisini, doğru olduğunda bile gözetim olarak algılar. Ayrımı saklayın, öncelik kurallarında kullanın — ve bir bellek görünür bir şeyi tetiklediğinde neye dayandığını gösterebilmelisiniz. Çıkarıcının sağlık, din, siyasi düşünce ya da yasanın özel nitelikli kişisel veri saydığı başka bir bilgiyi çıkarsamasına asla izin vermeyin (GDPR 9. madde, KVKK 6. madde): böyle bir konudaki isabetli bir tahmin de kendi başına özel nitelikli kişisel veri işlemektir. Ayrıca bu bölümde “rıza” gündelik anlamıyla kullanılıyor — kişi belleği gördü ve onayladı. Bunun aynı zamanda KVKK’nın aradığı açık rıza ya da GDPR’ın rızası olup olmadığı, yani hukuki dayanağınız olup olamayacağı ayrı bir sorudur; Bölüm 38.1 rızanın neden nadiren uygun dayanak olduğunu anlatıyor.

Her okuma kullanıcıya göre süzülür. Bellek sistemlerine özgü ciddi bir olay türü, bir kullanıcının belleğinin başka bir kullanıcının bağlamına girmesidir; genellikle bir sorguda user_id süzgecinin unutulmasıyla olur. Süzgeci her sorguya elle eklemek yerine erişim katmanında dayatın (örneğin PostgreSQL’de satır düzeyi güvenlik) ve bunun için başka bir kullanıcının verisini arayan, boş dönmesi gereken bir testiniz olsun.

Saklama bir karardır, bir varsayılan değil. Yazılan her şey bir süre dolumu ya da açık bir muafiyet alır. Bunun bir rejime dönüştüğü yer Bölüm 38; buraya ait olan kısım, bir TTL sütununun yazma anında hiçbir şeye mal olmadığı ve sonradan ikna edici biçimde eklenmesinin neredeyse imkânsız olduğudur.

Bu alt bölümün rahatsız edici gerçeği: çoğu bellek sistemi, demolar iyileşene kadar yazma eklenerek kurulur ve gizlilik işini en sonda başka biri üstlenir. Yukarıdaki gereksinimlerin neredeyse hepsi bir şema kararıdır — provenance, kaynak, süre dolumu, silinebilirlik — ve bu yüzden birinci günde ucuz, iki yüzüncü günde pahalıdır.

26.10 Sezgi kontrolleri

Her birini açmadan önce cevaplayın. Sorulardan biri bu bölümdeki ölçümle cevaplanıyor; diğer beşi bölümün savunduğu tasarım kararlarıyla ilgili ve çoğu, birinci günde hiçbir şeye mal olmayan bir şema tercihine dayanıyor.

Epizotlar evet, olgular hayır. Benzerlik araması buna benzer bir şeyi konuştuk mu için doğru, bu kullanıcının mevcut tercihi nedir için yanlıştır. Nedeni konusunda net olun: neden “vektör deposundan silemezsiniz” değil — kimliğe göre silebilirsiniz. Bir vektör indeksinin vermediği şey bir anahtar: aynı tercihin birbiriyle çelişen iki embedding’inin bir arada durmasını hiçbir şey engellemez ve en yakın komşu aramasının hangisinin güncel olduğuna dair bir kavramı yoktur. Olgular (kullanıcı, anahtar) ile anahtarlanmış satırlara gider — orada bir upsert çelişkiyi imkânsız kılar; epizotlar, kayda geri işaretçileri olan bir indekse. Olguları anahtarsız biçimde vektörlere koymak bu alanda sık görülen bir üretim hatasıdır; bedelini, bir kullanıcı sizden belirli tek bir olguyu düzeltmenizi ya da unutmanızı ilk istediğinde ödersiniz.

Güvenilir biçimde hayır. Burada ölçüldü: iki olgu da mevcutken ve zaman damgası yokken model daha yenisini cevapların %0’ında seçti, %83,3’ünde kaçamak yaptı. Zaman damgaları eklemek onu %33,3’e çıkardı. Açık bir “en günceli tercih et” kuralı eklemek %83,3’e çıkardı — daha iyi, ama cevapların altıda biri hâlâ kaçamak. Erişim katmanında çözün ve tek bir olgu enjekte edin.

Kusurun hangi yöne gittiğine dikkat edin: kendinden emin hata değil kaçamak. Bu, iki kusurdan daha iyi olanıdır, ama “e-posta, ya da belki telefon” diye cevaplayan bir sistem yine de başarısız olmuştur. Yalnızca toplam doğruluğa bakarsanız bir hatanın kaçamak mı yoksa yanlış seçim mi olduğunu göremezsiniz.

Tek bir çıkarsama değil. İşleyen en ucuz politika iki durumu ayırır: açık ve kalıcı bir ifade — bana hep e-posta at, asla arama — ilk seferinde yazılabilir, çünkü kullanıcı bunu söyledi; çıkarsadığınız her şey ise ikinci kez görülmeyi ya da bir teyidi bekler. Ayrıca her yazmayla provenance’ı kaydedin, çünkü onsuz çelişkileri çözemez, hiçbir şeyin süresini dolduramaz ya da sistemin bir şeye neden inandığını açıklayamazsınız. Her şeyi hatırlamanın kusur biçimi depolama maliyeti değil erişim kalitesidir: ilgisiz her bellek, ilgili olanla yarışır.

Anlamsal. Çalışma belleği kendini belli ederek bozulur — pencerenin sınırına dayanırsınız ve bir şey hata verir. Epizodik bellek yavaş bozulur — erişim kötüleşir ve maliyetler artar. Anlamsal bellek sessizce bozulur: martta kaydedilmiş bir olgu temmuzda kendinden emin döndürülür ve sistemde hiçbir şey süresinin dolduğunun farkında değildir. Bu asimetri, TTL’lerin sonraya bırakılan temizlik işlerine değil yazma anına ait olmasının nedenidir.

Yalnızca yanlış bir yazmanın ucuz olduğu yerde. Modelin kararıyla yapılan yazmalar esnektir ve sizin seçmeyeceğiniz şeyleri hatırlar; tutmanıza izin verilmeyenler dâhil. Kural tabanlı bilgi çıkarma öngörülebilir ve denetlenebilirdir, önemli olan her şey için de doğru varsayılandır; kullanıcı onaylı yazmalar bir etkileşime mal olur ve gerçek rıza veren tek mekanizmadır. Çoğu sistemin ihtiyacı, okumayı altyapıya bırakmak ve yazmayı açık bir eylem hâline getirmektir.

Transkript; yalnızca en sonda değil her adımdan sonra checkpoint alınmış ve yalnızca araç çağrıları değil araç sonuçları da saklanmış olarak. Bir çalıştırmayı araçlarını yeniden yürüterek tekrar oynatmak, yan etkisi olan her araç için yanlıştır. Devam da başlatmayla aynı kod yolu olmalıdır, çünkü ayrı bir devam yolu test edilmeyecek ikinci bir uygulamadır.

26.11 Mülakat soruları

Kaynak konusunda — Bölüm 2’deki çekincenin aynısı. Bu sorular, kitabın kullandığı iki güvenilir açık kaynakta tekrar tekrar karşımıza çıkıyor; bunlara bu bölümün ölçümünün cevaplanabilir kıldığı sorular eklendi.

26.11.1 Tasarımı anlayıp anlamadığınızı sınayanlar

S: Konuşmalı bir ajan için belleği nasıl tasarlarsınız?

“Bellek” kelimesini üçe ayırarak başlayın: çalışma belleği transkripttir ve bağlam mühendisliğinin konusudur; epizodik bellek benzerlikle erişilen bir olay kaydıdır; anlamsal bellek ise olgulardan oluşur ve kullanıcıya ve özniteliğe göre anahtarlanmış, provenance’ı ve süre dolumu olan satırlarda tutulmalıdır. Sonra her deponun neyi desteklemesi gerektiğini söyleyin — olgular güncelleme ve silme, epizotlar alakaya ve yaşa göre sıralama ister — ve “her şeyi göm” yaklaşımının neden işe yaramadığını belirtin: olgu başına bir anahtar yoksa güncellenecek bir şey de yoktur.

S: İki bellek çelişiyor. Ne olur?

Enjeksiyondan önce, kodda çözün ve modele tek bir olgu verin. Modele bırakırsanız tutarsızlık bekleyin: küçük bir probe’da ölçüldüğü üzere zaman damgaları tek başına daha yeni değeri cevapların yalnızca üçte birinde getirdi ve açık bir güncellik kuralı varken bile altı cevaptan biri hâlâ kaçamaktı. İlginç devam sorusu, güncelliğin yanlış kural olduğu durumdur — ifade edilmiş bir tercih, tarihler ne olursa olsun çıkarsanmış olanı yenmeli — ve bu yüzden öncelik yalnızca zamana değil kaynağa da dayanır.

26.11.2 Gerçekten bir bellek sistemi yayına alıp almadığınızı sınayanlar

S: Bir kullanıcı, hakkında bildiğiniz her şeyi silmenizi istiyor. Ne olur?

Verinin gerçekte izlediği yolu adım adım anlatın: olgu deposu, vektör indeksi, epizot kaydı, yedekler ve her önbellek. İyi bir cevap zor olanı adlandırır. Bir kullanıcıyı silmek genellikle sorunsuzdur — her depo kimliğe göre silebilir. Canınızı yakan, yalnızca embedding’e dayanan bir tasarımda bir olguyu silmektir: hangi vektörlerin onu kodladığını bilmeniz gerekir, yani olgudan embedding’e bir eşlemeye en baştan ihtiyacınız vardı; özetlerin içindeki türetilmiş kopyalar ise daha da zordur. Bunun sonradan eklenen bir özellik değil, birinci günde verilen bir şema kararı olduğunu ve olguları ilişkisel bir depoda tutmak için en güçlü pratik argüman olduğunu söyleyin.

S: Ajanınız sürekli güncel olmayan bilgiye göre hareket ediyor. Nereye bakarsınız?

Okuma anına değil yazma anına. Herhangi bir şeyin TTL taşıyıp taşımadığını, yazmaların upsert mi yoksa ekleme mi yaptığını ve erişimin anahtar başına bir mi yoksa birkaç olgu mu döndürdüğünü sorun. Çoğu “bayat bellek” hatası aslında “bir anahtar için iki değer” hatasıdır ve çözüm daha zeki bir prompt değil bir tekillik kısıtıdır.

26.12 2026 alet çantası

Bu bölümdeki çelişki probe’u aşağıdaki sürümlerle tek bir dizüstü bilgisayarda çalıştı. Kısa prompt’lardan ve otuz maddeden oluşuyor; bir dizüstü bilgisayara sığmasının nedeni de bu.

Bu sayıların çıktığı yığın
kütüphane kullanılan sürüm burada ne işe yarıyor
ollama 0.24.0 çelişki probe’u için qwen3.5:9b sunmak
numpy 2.5.2 görev kurulumu ve puanlama

Yukarıda kullanılmayan ama bilinmesi yararlı olanlar:

Daha geniş ekosistem, yazım anındaki sürümler
kütüphane güncel sürüm ne zaman kullanılır
letta 0.33.1 kendi yönettiği bellek sayfalaması, MemGPT soyu
mem0ai 2.2.0 bilgi çıkarma, güncelleme ve çelişki politikaları hazır bir kütüphane olarak (Chhikara vd. 2025)
graphiti-core 0.30.2 Zep’in arkasındaki açık kaynaklı zamansal bilgi çizgesi; ne zaman sorusunun ne sorusu kadar önemli olduğu durumlar (Rasmussen vd. 2025)
langmem 0.0.30 LangGraph ajanları için temel bellek işlemleri
pgvector (Python paketi) 0.5.0 olgularınızı zaten tutan veritabanında epizotlar — genellikle doğru cevap; PostgreSQL eklentisi ayrı sürümlenir (yazım anında 0.8.x)

26.13 Lab: güvenli biçimde yanılabilen bir bellek kurun

Altı adım ve ilkinde bilerek hiç kod yok — bir paragrafta tarif edemediğiniz bir bellek sistemi, yazma politikasını seçmediğiniz bir sistemdir.

26.13.1 Adım 1 — politikayı koddan önce yazın

Sisteminizin hatırlamak zorunda olduğu üç şeyi, asla saklamaması gereken üç şeyi ve saklayacağı üç şeyin her biri için şunları yazın: buna kim karar veriyor ve süresi ne zaman doluyor?

26.13.2 Adım 2 — bir indeks değil bir tablo

user_id, key, value, source, valid_from, written_at, expires_at — valid_from olgunun ne zaman doğru hâle geldiğini, written_at onu ne zaman öğrendiğinizi tutar. (user_id, key) üzerinde upsert yapın, böylece bir anahtar için iki değer var olamasın; üzerine yazmadan önce eski değeri bir geçmiş tablosuna kopyalayın.

PostgreSQL’de iskelet aşağıdaki gibi görünebilir. Öncelik denetimi (yeni değer saklanandan daha zayıf bir kaynaktan geliyorsa üzerine yazmamak) ve TTL değerinin seçimi uygulamanıza kalıyor:

CREATE TABLE facts (
  user_id     text        NOT NULL,
  key         text        NOT NULL,
  value       text        NOT NULL,
  source      text        NOT NULL,  -- 'kullanici_ifadesi', 'cikarsama', ...
  valid_from  timestamptz NOT NULL,  -- olgu ne zaman doğru hâle geldi
  written_at  timestamptz NOT NULL DEFAULT now(),  -- biz ne zaman öğrendik
  expires_at  timestamptz,           -- NULL: süresi dolmaz
  PRIMARY KEY (user_id, key)         -- anahtar başına tek olgu
);
CREATE TABLE facts_history (LIKE facts);  -- birincil anahtar yok: her sürüm bir satır

-- Yazma (tek işlem içinde): eski değeri geçmişe kopyala, sonra upsert
BEGIN;
INSERT INTO facts_history
  SELECT * FROM facts WHERE user_id = $1 AND key = $2;
INSERT INTO facts (user_id, key, value, source, valid_from, expires_at)
  VALUES ($1, $2, $3, $4, $5, $6)
  ON CONFLICT (user_id, key) DO UPDATE
  SET value = EXCLUDED.value, source = EXCLUDED.source,
      valid_from = EXCLUDED.valid_from, written_at = now(),
      expires_at = EXCLUDED.expires_at;
COMMIT;

-- Okuma: bu kullanıcının güncel ve süresi dolmamış tek olgusu
SELECT value FROM facts
WHERE user_id = $1 AND key = $2
  AND (expires_at IS NULL OR expires_at > now());

26.13.3 Adım 3 — bir çelişki yerleştirin

Bir tercih yazın, sonra aynı anahtara farklı bir tercih yazın. Sorgulayın. Erişiminiz ikisini de döndürüyorsa erişimi düzeltin — bu bölüm, çözüm modele bırakıldığında ne olduğunu ölçtü.

26.13.4 Adım 4 — bayatlığı ölçün

Altı ay geçmiş gibi yapın: deponuzun bir kopyasında her zaman damgasını altı ay geriye alın, sonra on soru sorun. Tarihleri kaydırmak cevapları değiştirmez; o yüzden her birini kendiniz değerlendirin — bu olgu altı ay sonra büyük olasılıkla hâlâ doğru mu (bir adres evet; mevcut bir proje çoğu zaman hayır)? Artık büyük olasılıkla yanlış olan cevapları sayın. O sayı bir TTL’nin değeridir; arkalarındaki anahtarlar da TTL’ye ihtiyaç duyanlardır.

26.13.5 Adım 5 — bir kullanıcıyı silin, sonra bakın

Silme yolunuzu çalıştırın, sonra ham depoyu, indeksi, kayıtları ve her önbelleği o kişinin verisi için arayın. Nerede sağ kaldığını raporlayın.

26.13.6 Adım 6 — “bunu neden düşünüyorsun?” sorusunu cevaplayın

Üç bellek için, her birinin yazılmasına yol açan olayı bulup gösterin. Gösteremiyorsanız provenance sütununu şimdi ekleyin.

26.13.7 Neyi teslim edeceksiniz

1. adımdaki politikayı, 4. adımdaki bayatlık sayımını, 5. adımda verinin silmeden sağ çıktığı yerlerin listesini ve sisteminizin yazmayı bırakması gereken belleği adlandıran bir cümleyi.

26.14 Alıştırmalar

  1. Yazma politikası. Bir destek ajanı için: hatırlamak zorunda olduğu üç şey, asla saklamaması gereken üç şey ve saklanan her madde için kimin karar verdiği ve ne zaman süresinin dolduğu. Bir sayfa, koddan önce.
  2. Bir çelişki yerleştirin. Deponuza çelişen iki olgu koyun, sonra çözüm kuralına karar verin ve kuralınızı güncelliğin yanlış cevap olduğu duruma karşı savunun.
  3. Deponuzu yaşlandırın. Her zaman damgasını altı ay geri alın ve on soruyu yeniden sorun. Her cevap için, arkasındaki olgunun altı ay sonra büyük olasılıkla hâlâ doğru olup olmayacağına karar verin; olmayacakları sayın. Bir TTL’nin size kazandıracağı şey budur.
  4. Silin ve iz sürün. Bir kullanıcı için silme yolunuzu çalıştırın, sonra her depoyu, indeksi, kaydı ve önbelleği arayın. Verinin nerede sağ kaldığını yazın.
  5. Provenance denetimi. Beş bellek seçin ve her birinin yazılmasına yol açan olayı bulup gösterin. Herhangi biri için gösteremiyorsanız bulgunuz budur.
  6. Olgulara karşı epizotlar. Mevcut bellek deponuzu alın ve her girdiyi olgu ya da epizot olarak sınıflandırın. Olgular vektör indeksindeyse onları taşımanın şimdi neye, bir yıl sonra neye mal olacağını tahmin edin.
  7. Araç mı altyapı mı. Hatırlamayı aynı görevde iki şekilde de uygulayın ve karşılaştırın: ajan aracı çağırmayı ne sıklıkla unutuyor ve otomatik enjeksiyon size token olarak neye mal oluyor?

26.15 Daha derine

Okumadan önce: bellek deponuzu alın ve on girdiyi olgu ya da epizot olarak sınıflandırın. Olgular bir vektör indeksinde duruyorsa ilk görevinizi buldunuz.

Makalelerin ötesi
kaynak ne olduğu
letta çalışan bir sistem olarak MemGPT tasarımı — bağlamla depolama arasındaki kendi yönettiği sayfalamayı görmenin en net yolu
mem0 açık bilgi çıkarma ve güncelleme politikaları olan bir bellek katmanı; kendinizinkini kursanız bile politika sözcük dağarcığı için yararlı bir okuma
graphiti Zep’in açık kaynaklı zamansal bilgi çizgesi: geçerlilik aralıkları olan olgular; çelişki probleminin ciddiye alınmış hâli
Building effective agents — Anthropic daha az düzeneğin neden genellikle kazandığına dair genel çerçeve argümanı
Lil’Log — ajanlar üzerine insan belleği sözcük dağarcığını (kısa süreli, uzun süreli; epizodik, anlamsal, prosedürel) ajan bileşenlerine eşleyen, çok okunan derleme yazısı — tüm uzun süreli belleği bir vektör deposuna eşlediğine dikkat edin; bu bölümün karşı çıktığı varsayılan tam da bu
CoALA — Sumers vd. dil ajanları için çalışma / epizodik / anlamsal / prosedürel bellek sınıflandırmasının kaynağı olan makale
Birincil kaynaklar
konu kaynak
kendi belleğini sayfalayan bir ajan Packer vd. (2023)
kütüphane olarak bilgi çıkarma, birleştirme ve güncelleme Chhikara vd. (2025)
ikisini birden saklamak yerine yerini yenisine bırakan olguyu geçersiz kılmak Rasmussen vd. (2025)
uzun bir bağlamın neyi tutup tutmadığı Hsieh vd. (2024); Modarressi vd. (2025)
bir retriever’ın skorlarının neden bir derlemden diğerine taşınmadığı Thakur vd. (2021)
epizotları güncellik, önem ve alakayla puanlamak Generative Agents
belleği çok oturum boyunca sınamak LoCoMo; LongMemEval
bütün bunların asıldığı döngü Yao vd. (2023)

26.16 Akılda kalması gerekenler

  • Üç bellek, üç kusur biçimi. Çalışma belleği pencere dolduğunda hata vererek bozulur; epizodik bellek hacim erişimi bozdukça yavaşça bozulur; anlamsal bellek sessizce bozulur ve mart olgusunu temmuzda kendinden emin döndürür.
  • Olgular satırlarda, epizotlar vektörlerde. Bir olgu güncelleme ve silme ister; bir vektör indeksi ikisini de olguya göre değil, yalnızca vektör kimliğine göre sunar. Olguları anahtarsız biçimde bir indekse koymak sık görülen bir üretim hatasıdır; bedelini, bir kullanıcı belirli tek bir olguyu düzeltmenizi ya da unutmanızı ilk istediğinde ödersiniz.
  • Model çelişkileri sizin yerinize çözmeyecek. İki olgu da mevcutken ve zaman damgası yokken daha yenisini cevapların %0’ında seçti ve %83,3’ünde kaçamak yaptı; tek başına zaman damgaları onu %33,3’e taşıdı; açık bir güncellik kuralı %83,3’e taşıdı; cevapların altıda biri yine kaçamak kaldı. Erişimde çözün, tek olgu enjekte edin.
  • Varsayılan kusur kaçamaktır. Kendinden emin yanlış bir cevap değil, “e-posta ya da belki telefon” — kendinden emin yanlış seçimden iyi, yine de başarısız bir cevap. Yalnızca toplam doğruluğa bakarsanız onu yanlış seçimden ayıramazsınız.
  • Açık bir beyanı ilk seferde yazın; bir çıkarsamayı ancak ikinci kez görüldüğünde ya da teyit edildiğinde yazın ve her seferinde provenance’ı kaydedin. Provenance olmadan çözemez, süre dolduramaz ya da açıklayamazsınız.
  • Yazmayı, okumayı ve bütün döngüyü sınayın. Yazma için precision ve recall, “hatırlama güncel değeri döndürüyor mu” sorusu ve olgular değiştikten sonra sorulan sorular.
  • Unutmak bir özelliktir. Yazma anında TTL, epizotlar için sönüm ve retriever’ın unutabileceği bir bayrak yerine gerçekten silen silme.
  • Altyapı olarak oku, araç olarak yaz. Hatırlama her seferinde gerçekleşmeli ve hiçbir model kararı gerektirmez; yazma, transkriptte görünür olmasını istediğiniz eylemdir.
  • Gizlilik gereksinimleri şema kararlarıdır. Provenance, kaynak, süre dolumu ve silinebilirlik birinci günde hiçbir şeye mal olmaz ve iki yüzüncü günde ikna edici biçimde eklenmesi neredeyse imkânsızdır.