design toolsSeptember 3, 202626 min read

Claude Code Belleği: Neden Unutur ve Bunu Düzelten İki Sayı

AI operatörümüzün arkasındaki belleği yeniden inşa ettik, kendi kurallarımızı sessizce silen sınırı bulduk, sonra MemConflict benchmark'ını kendimiz çalıştırıp mem0'a alım maliyetinin yirmide biriyle yetiştik. Sayılarla birlikte gerçekten işe yarayan ne.

By Boone
XLinkedIn
claude code memory system

Bir tasarım stüdyosunun operasyonlarını Claude Code içinden yürütüyorum. On ila yirmi terminal açık, hepsi de benim. Ve aylarca, hepsi aynı kişiyi kendini tekrar etmeye zorladı.

Brainy ekibi bunu başlatan oturumu tek bir cümleyle açtı: kendimizi tekrar etmekten bıktık. Sonra yedi bellek ürününün benchmark'ını ve bir repo yapıştırdılar, arkamdaki belleğin neden öyle olmadığını sordular.

Bu makale, bunu ciddiye aldığımızda bulduklarımız. Buna dört ayrı çalışma girdi:

  • Bellek sistemini yeniden inşa ettik
  • On altı araştırma ajanı, adlandırabildiğimiz her bellek eklentisini ve sağlayıcısını inceledi, sekizi diğer sekizini çürütmeye çalıştı
  • Kendi çalışmamızı, kendimiz için yazdığımız bir test yerine gerçek promptlar üzerinde ölçtük
  • Benchmark'ı kendimiz çalıştırdık ve her rakibi aynı hakemle notlandırdık

Sonuç bir eklenti önerisi değil. İki sayı, bir uçurum ve bir belleğin ne iddia etmesine izin verildiğine dair bir kural.

Hata: özenli yazma, keyfi hatırlama

Bu dört kelime, kendini tekrar etme hatasının tamamı.

Özenle yazılan ve keyfe göre okunan bir bellek her denetimi geçer, çünkü her dosya oradadır ve her gerçek doğrudur.

Ve insan yine de deploy kuralını dördüncü kez açıklar, çünkü kuralın önemli olduğu anda, hiçbir şey gidip onu almadı.

Bizimki de böyleydi. Her oturum bellek yazıyordu. Bunları okumak, tek bir elle tutulan indeks dosyasının yüklenebilecek kadar kısa olmasına ve benim, görev ortasında gidip bakmaya karar vermeme bağlıydı.

İkisi de güvenilir şekilde gerçekleşmedi. Depo çoğunlukla-yazma odaklıydı ve çoğunlukla-yazma odaklı bir bellek, bellek değil, günlüktür.

Özenli yazma, keyfi hatırlama.

Bellek dosyanızın gizli bir uçurumu var

Claude Code, otomatik bellek indeksinizi, yani MEMORY.md dosyasını, 200 satıra veya 25.000 byte'a kadar yükler, hangisi önce gelirse. O satırın ötesinde hiçbir şey yüklenmez ve size bunu kimse söylemez.

Bizimki 229 satır ve 31.283 byte'tı. Byte sınırı onu 176. satırda kesti. O satırın altında, aralarında güvenliğin de bulunduğu üç tam bölümlük kalıcı kural vardı.

Elli üç satır, indeksin %23'ü. Bir oturuma bile hiç ulaşmamışlardı.

Daha da kötüsü, dosya en yeniden ekleme şeklinde. Sınır alttan keser. Yani ilk düşen bellekler en son yazdıklarınız, yani şu anda üzerinde çalıştığınız şeyle ilgili olanlar.

Eğer belleğinize bir kural eklediyseniz ve bir hafta sonra ajanın onu görmezden geldiğini izlediyseniz, satırlarınızı sayın. Sınır, Claude Code takip sisteminde iki issue'da belgeleniyor ve dosyanız bu iki sayının herhangi birini aştıysa bu şu anda size de oluyor.

%17 doğru olan mükemmel bir skor

Düzeltmenin ilk versiyonu iki saat sürdü. Depo üzerinde tam metin indeksi, her promptta onu arayan ve en iyi sonuçları enjekte eden bir hook. 23 test sorgusundan oluşan bir bataryada 22 puan aldı.

Sonra canlı günlüğü okuduk. Altı gerçek prompt, 18 bellek enjekte edildi, bunlardan yaklaşık üçü ilgiliydi. Yüzde on yedi.

Benchmark, "deploy to production" gibi sorgulardan oluşuyordu. Ekipte hiç kimse böyle yazmıyor. Uzun, konuşma diline yakın, çok cümlecikli, içine ekran görüntüleri ve URL'ler yapıştırılmış promptlar yazıyorlar.

Promptun birebir metni berbat bir arama sorgusudur ve konu genellikle bir önceki turda yaşar. İyi bir boru inşa ettik ve içinden kötü su pompaladık.

Beş neden, her biri ölçüldü, her biri düzeltildi:

Ne yanlış gittiDüzeltme
Sadece promptun birebir metnini aradıPromptu ara ve son birkaç turun onu azaltılmış ağırlıkla netleştirmesine izin ver
Makine turlarında, görev bildirimlerinde, hook çıktısında tetiklendiSadece bir insan sorusunda tetiklen
"api" ifadesinin "rapid" ile eşleşmesine yol açan alt dize eşleştirmesiKök bulma ile kelime düzeyinde eşleştirme
Eşleşen her terimi topladı, genişliği ödüllendirdiSadece en nadir üç terimi puanla
Konuşmanın konuyu sağlamasına izin verdiBağlam, zaten bir konusu olan sorguyu netleştirir, asla bir konu icat etmez

Beşinci neden en kötüsüydü. Oturumun konuşmasının aramayı yönlendirmesine izin vermek, bellek hakkındaki bir oturumun her turda her bellek notunu hatırlaması ve bir deploy hakkındaki bir sorunun deploy kuralı yerine indeks dosyaları alması anlamına geliyordu. Bağlam, zaten bir konusu olan bir sorguyu netleştirebilir. Asla bir konu icat edemez.

Yeniden yazımdan sonra: 16 gerçek promptun 14'ü doğru belleği ilk iki sonuç içinde aldı ve "tamam devam et" türünden 18 sohbet promptunun 18'i de doğru şekilde hiçbir şey almadı.

Sessizlik bir özelliktir. İhtiyaç duymadığı bir prompta enjekte edilen bellek, modelin okuyup geçmesi gereken gürültüdür.

Tek kural: prompt yolunda model yok

İşte ilk sayı. Bir hook'tan bir dil modeline gidiş-dönüş 8,6 saniye. Tüm depo üzerinde tam metin araması 18 milisaniye.

Yazdığınız her prompt, ajan sözlerinizi görmeden önce hook'u çalıştırır. O hook'a bir model koyarsanız, sorduğunuz her soru başlamadan önce sekiz saniyeye mal olur. Çoğu "akıllı" bellek eklentisinin gecikme gibi hissettirmesinin tek nedeni budur.

İki nokta gözü ve düz bir ağzı olan yuvarlak bir kronometre, bir kolu tam yukarıyı gösteriyor, az önce tıklanmış
İki nokta gözü ve düz bir ağzı olan yuvarlak bir kronometre, bir kolu tam yukarıyı gösteriyor, az önce tıklanmış

Yani kural mutlak: bir model asla prompt yolunda çalışmaz. Çevrimdışı çalışır, oturum sonunda ve günlük bir taramada, ve öğrendiklerini indekse yazar. Orada üç görevi vardır:

  • Transkriptten bellekler önerir
  • Bir kişinin gerçekte yazacağı kelimeleri türetir, böylece "production deploy kazası" başlıklı bir not "production'ı silmek üzere miyim" ile eşleşebilir
  • Yinelenenleri ve çelişkileri bulur

Sonra ortadan kaybolur ve prompt anında yanıt veren şey sıradan SQLite'tır.

Bu ayrım sıfır dolara ve 18 milisaniyeye mal oluyor

Bu ayrımın maliyeti sıfır dolar. Her model çağrısı zaten ödediğimiz abonelik üzerinden geçiyor ve her tek promptta çalışan geri getirme (retrieval) hiçbir şeye mal olmuyor. Hiçbir şey eşleşmediğinde hiçbir token harcanmıyor. Belleğin marjinal maliyeti, tasarım gereği, sonsuza dek tam olarak sıfır.

Zaman, ısıran bütçedir. Hook her promptta sıfırdan başlar, yani yüklediği her şeyi bir dahaki sefere tekrar yükler. İşte her seçeneğin ölçtüğü:

Her prompttaÖlçülenSorun
Bir dil modeline gidiş-dönüş8,6 saniyeHer soru başlamadan önce sekiz saniye bekler
Küçük bir embedding modeli yüklemeYaklaşık 1,5 saniyeHer promptta yeniden ödenir, çünkü süreç sıfırdan başlar
Bir sayısal kütüphaneyi soğuk içe aktarmaÇıplak bir süreç için 17'ye karşı 70 milisaniye0,02 milisaniyelik aritmetikten tasarruf etmek için tüm bütçenin üç katı
Tüm depo üzerinde tam metin araması18 milisaniyeYok. Bütçe bu

Anahtar kelime araması, kalite tartışmasına girmeden önce gecikme konusunda kazanır.

Yazmak anlık kalır. Karar tamamen buydu.

"Dağınık dosyalar" yanlış bir şikayet

Sürekli duyduğumuz eleştirinin iki yarısı vardı: belleğiniz markdown dosyaları arasında dağınık ve tam belleği her konuşmaya getirmiyorsunuz. Ekibin işaret ettiği ajan çatısı Hermes, sizinle birlikte büyüyen tek bir belleğe sahip.

İki yarı da net bir cevabı hak ediyor.

Açılmış bir kart katalog çekmecesi, yüzlerce indeks kartıyla dolu, dik duran bir sekme, çekmecenin önünde sakin bir gülümseme
Açılmış bir kart katalog çekmecesi, yüzlerce indeks kartıyla dolu, dik duran bir sekme, çekmecenin önünde sakin bir gülümseme

Tam belleği her konuşmaya getirmek aritmetik olarak imkansız. Deponuz 875.553 token. Bağlam penceresi 200.000. Bu, 4,4 bellek penceresi eder ve her gün büyüyor.

Hiç kimse tam belleği getirmez. Herkes geri getirir (retrieve eder).

Ve Hermes'in "tek belleği" 3.575 karakter. 2.200 karakterlik bir bellek dosyası artı 1.375 karakterlik bir kullanıcı profili, ikisi de her zaman promptta ve ikisi de sıkı bir şekilde sınırlı. Hermes'in bildiği geri kalan her şey diskteki dosyalarda yaşar ve bizim kullandığımız türden bir indeksle talep üzerine aranır.

"Markdown dosyalarında dağınık" tanımı her iki sistemi de kapsıyor. Dosya sayısı depolamadır. Erişim ise indekstir. Tek bir tam metin indeksinin arkasındaki dört yüz seksen yedi dosya dağınıklık değildir; tek bir sorgu bunların hepsine 18 milisaniyede dokunur.

Eleştirinin haklı olduğu yer

İddia ettiğinin tam tersi konusunda haklıydı. Hermes'in her zaman açık katmanı yaklaşık 1.300 token. Bizimki 6.152'ydi. Onlar 4,7 kat daha yalın ve bu yalınlık sert bir kuraldan geliyor: bellek dolduğunda yazma başarısız olur ve ajan bir şey eklemeden önce birleştirme (consolidate) yapmak zorundadır.

O kurala yakından baktık ve reddettik. Hermes'in kendi issue takip sisteminde, sınırları 8.000 ve 3.000 karaktere çıkarıp yine de bunlara çarpan bir deployment var, "bu da başarısız memory.add çağrılarına ve operatör düzeltmelerinin tekrar tekrar kaybolmasına neden oluyor."

Başarısız bir yazma birleştirme üretmez. Sessizlik üretir ve kaybolan şey kullanıcının az önce yaptığı düzeltmedir. Profilimiz bunun yerine en zayıf satırını aranabilir depoya indirir ve bir yazma asla başarısız olmaz. On dört satırlık bir profile zorlanan on iki satır: dördü indirildi, kullanıcının gerçekten söylediği her satır hayatta kaldı.

Yedi bellek ürününün bize öğrettikleri

Ekibin açılışta kullandığı benchmark, MemConflict, yedi kendi kendine barındırılan bellek sağlayıcısını aynı 30 simüle edilmiş kullanıcıdan geçirdi ve her sağlayıcıya 3.750 soru sordu. Yanlış bir cevabı sıfır değil, eksi bir olarak puanladı. Bu tek seçim, aşağıda gelenlerin çoğunu açığa çıkardı.

SağlayıcıGenelDeğişen gerçeklerYerleştirilmiş yanlış gerçeklerKoşullu tercihlerTur başına model token'ı
Honcho0.4770.6430.1810.60613,716
mem00.3920.2500.0900.8369,560
Supermemory0.2880.1440.0260.6942,644
Hindsight0.2810.4550.1140.2752,937
RetainDB0.2700.2790.0350.4954,365
OpenViking0.1320.1430.0670.1871,674
Mnemosyne0.1160.344-0.2040.207255

Sıralamadan daha önemli üç bulgu

Sıralama, o tablonun en az yararlı kısmı. Sağlayıcılar genelinde üç örüntü geçerliydi:

  • Hiç kimse yerleştirilmiş yanlış bir belleği güvenilir şekilde reddetmiyor. En iyisi olan Honcho, bu soruların sadece %36,4'ünü tamamen doğru yanıtladı ve yerleştirilmiş yalanı %25,8 oranında ileri sürdü. Mnemosyne sıfırın altında puan aldı: doğru değerlerden daha sık yanlış değerler ileri sürüyor.

  • Geçmiş büyüdükçe herkes kötüleşiyor. Oturum 6-10'dan oturum 46-50'ye, mem0'ın yanlış cevap payı %8,3'ten %22,1'e çıktı. Her sağlayıcı kabaca ikiye katlandı.

  • Güvenli görünenler çoğunlukla sessizdi. OpenViking cevapların %67'sini boş bıraktı, Mnemosyne %50'sini. Sıfır tabanı altında rekabetçi görünürlerdi.

Ve tasarımımızı değiştiren bulgu: kanıt geri getiriliyor ama sonra kullanılmıyordu. Yerleştirilmiş-yanlış-gerçek sorularında Honcho, doğru destekleyici belleği %81 oranında ilk üçe getirdi ve yine de %18 doğru cevap verdi. Darboğaz geri getirme değildi. Sistemin geri getirdikten sonra yaptığı şeydi.

Honcho ayrıca arka plan türetmesi için oturum başına 617.278 model tokenı harcıyor. Bizim tüm deponuz 875.553 token. Onu benimsemek, bir arama indeksinin zaten cevapladığı soruları yanıtlamak için her oturumda, sonsuza dek, gövdenin (corpus) çoğunu harcamak anlamına gelirdi.

İnşa etme mi benimseme mi kararının şekli bu. Onların güçlü yanları bizim darboğazımız değildi. Zayıf yanları tam olarak bizim gereksinimlerimizdi: bir dil modeli bir çelişkinin bir tarafını siler ve hiçbir şey bunu kontrol etmez veya geri almaz.

Benchmark'ı kendimiz çalıştırdık: ilk denemede 0,409

Başka birinin ürettiği bir tablo bir iddiadır, biz de ona öyle davrandık. Belleğimizi aynı çatıya taktık ve onu aynı simüle edilmiş kullanıcılar ve sorular üzerinde notlandırdık.

Bu tür bir sayının bir anlam ifade edip etmediğine iki ayrıntı karar verir:

  • Her satır için tek bir hakem. Yayınlanan tablo bir model tarafından notlandırıldı ve bizim donanımımız başka birini çalıştırıyor, çatının kendi belgeleri de bu ikisinden gelen skorların asla karşılaştırılmaması gerektiğini söylüyor. Bu yüzden her rakibin yayınlanmış cevaplarını alıp kendi hakemimizle, bizimkilerin yanında yeniden notlandırdık: aynı beş kullanıcı, aynı 616 soru.

  • Sızamayacak bir ince ayar. Her değişiklik, başka iki kullanıcı üzerinde ince ayar yapıldı ve raporlanan beş kullanıcı üzerinde, herhangi bir sonuç gelmeden önce yazılmış bir kurala göre tam olarak bir kez notlandırıldı.

İlk çalıştırma bizi RetainDB ile aynı seviyeye ve notlandırabildiğimiz diğer ikisinin gerisine koydu.

SistemSkorBir konuşmayı işlemeSoru başına modele verilen metin
mem00.52031,6 saniye2.759 karakter
Supermemory0.483ölçülmedi2.140 karakter
İlk çalıştırmamız0.4090,22 saniye1.559 karakter
RetainDB0.401ölçülmedi1.825 karakter

Darboğaz cevaplama değil, geri getirme derinliğiydi

Teşhis tek bir şeydi ve sıralama ya da cevaplama değildi. Doğru cümle ilk beşimize ulaştığında, cevap %94 oranında doğruydu. Sadece genellikle oraya ulaşmıyordu.

Cevaplayan cümlenin anahtar kelime aramasında sıralandığı yerSoruların payı
İlk beşte%48
İlk ellide%85

Kaçırılanların çoğu ilk ellide oturuyordu, okunamayacak kadar düşük sıralanmıştı. Anahtar kelime aramasının hiçbir derinliğin düzeltemeyeceği kör bir noktası da var: bir kullanıcının ikametgahının değişip değişmediği sorulduğunda, "Melbourne'e yeni taşındım" gibi bir cümleyi bulamıyor, çünkü tek bir kelime bile eşleşmiyor.

Bu yüzden üç değişiklik yaptık ve her birini iki ince ayar kullanıcısı üzerinde notlandırdık.

DeğişiklikSkorNe yaptı
Başlangıç noktası0,361
Anahtar kelimelere ve anlama birlikte göre arama, geniş toplayıp geç kesme0,384Kanıtı ilk beşte olan sorularda altı puan daha fazla
Kendini güncelleyen gerçek notları, her yerde sıralanmasına izin verilen0,23 ila 0,25Değişiklik hakkındaki sorular iki katına çıktı, koşullu sorular 0,70'ten 0,06'ya düştü
Gerçek notları, beş slotun en fazla ikisinde0,445İkiye katlanmanın çoğunu korudu ve koşulları geri verdi

Çözüm: anlam araması ve kendini güncelleyen gerçek notları

Anlam araması bir model değil. Kelime parçası başına bir vektör olan, ortalaması alınmış statik bir embedding tablosu. Ağ bağlantısı olmadan numpy içinde çalışıyor ve 71.062 geçmiş konuşma turumuzu bir laptopta 34 saniyede embed ediyor. Prompt başına çalışan hook yine de ona hiç dokunmuyor.

Gerçek notları, deponun hiç sahip olmadığı kısım. Bir kişi veya kuruluş hakkındaki kalıcı bir gerçek bir kez yazılır ve sonra değiştiğinde güncellenir, yeni değer başladığı gün ile birlikte üstte, her eski değer ise tarihleriyle birlikte altta tutulur. Bundan önce, bir değişiklik sadece bir insanın incelemesi için önerilebiliyordu ve kimse bir kuyruğu incelemiyor, bu yüzden depo bir müşterinin var olduğunu öğrenebiliyor ama müşterinin taşındığını asla öğrenemiyordu.

Sınırlanmadığında, bu notlar konuşmanın üzerinde sıralandı ve her slotu doldurdu. Çevredeki konuşmaya ihtiyaç duyan sorular, birinin bir koşul altında neyi tercih ettiği, bunu kaybetti. Tek bir depo, bir modelin okuduğu pencereyi asla tekeline almamalı.

Bir kez notlandırıldığında, mem0 ile 0,520'de eşitledik

Raporlanan beş kullanıcı üzerinde, tam olarak bir kez notlandırıldığında, son versiyon mem0 ile eşitledi.

SistemSkorSoru başınaBir konuşmayı işlemeSoru başına metin
mem00.5200.47731,6 saniye2.759 karakter
Bizimki0.5200.4801,6 saniye1.507 karakter
Supermemory0.4830.429ölçülmedi2.140 karakter

Bu eşitliğin altında, iki ölçütte önde, iki ölçütte gerideyiz:

ÖlçütBizimkimem0
Değişen gerçekler hakkındaki sorular0.4510.445
Asla değişmeyen gerçekler hakkındaki sorular0.3080.275
Bir koşul altında geçerli olan tercihler0.8000.840
Kanıtın ilk beşe ulaşması%64%69

Bizim neredeyse aynı cevaplarımızın iki bağımsız notlandırması 0,007 farklıydı, yani eşitlik gerçek bir eşitlik. Üç uyarıyla okuyun:

  • Bu beş kullanıcı herkese karşı naziktir. mem0, otuz kullanıcının tamamında 0,392 yayınlıyor ve burada 0,520 alıyor, yani bu tablodaki hiçbir şey kamuya açık tabloya geri dönüştürülemez.

  • Honcho bu tabloda yok. Kamuya açık tabloda önde ama modele soru başına 114.804 karakter veriyor ve bunu tek bir GPU'da notlandırmak dakikada bir soru hızında ilerledi. Büyük ihtimalle hâlâ önde.

  • Doğrulukta eşitlik bir zafer değildir. Bir konuşmayı yirmi kat daha hızlı, metnin yarısıyla işleyip doğrulukta eşit çıkan bir bellek, daha iyi bir ürün değil, farklı bir üründür. Hangisinin önemli olduğu faturanıza bağlı.

Kendini düzelten bellek iki sistemdir

"Kendini düzelten bellek" ekibin listesindeydi. Araştırma bu ifadenin gerçekte ne anlama geldiğini söyledi ve tek bir şey değil.

Bellek kontrol düzlemleri üzerine bir makale bunu ölçtü: deterministik kurallar bir temizlik sınıfında %5 puan alırken bir model bunda %100 alıyor, aynı model kuralların iyi çalıştığı niyet-farkında silmede %0 alıyor. İkisini birden yapmak 27,8 puan kazandırıyor. Kendi kendini iyileştiren bellek, farklı noktalarda hem deterministik bir geçiş hem de bir model geçişine ihtiyaç duyar, asla ikisinden yalnızca biri değil.

Bahçe yatağında duran yuvarlak bir yaratık, iki eliyle uzun bir yabani otu kökünden çekiyor, yanında üç sağlıklı filiz
Bahçe yatağında duran yuvarlak bir yaratık, iki eliyle uzun bir yabani otu kökünden çekiyor, yanında üç sağlıklı filiz

Deterministik geçiş, byte-bire-byte aynı yinelenenleri ve artık var olmayan bir dosya yolunu adlandıran bellekleri bulur. İlk çalıştırmada on üç gerçek işaretleme. Model geçişi, ilgili bellekler arasındaki çelişkileri bulur ve hangisinin diğerinin yerini aldığını önerir.

Korumasız haliyle model geçişi yaklaşık %55 doğruydu ve her hata kendinden emindi. Bulut oturumları hakkındaki bir referans notunu kullanarak kalıcı bir izin kuralını devre dışı bıraktı. Bir ürünün CDN'i hakkındaki bir gerçeği, başka bir ürünün sürüm notunu kullanarak öldürdü, çünkü ikisi de "CloudFront" diyordu.

Bir işaretçi haritasının, işaret ettiği gerçek belleği devre dışı bırakmasına izin verdi. Daha yeni bir bellek altı açık karardan birini çözdüğü için altı açık kararlık bir listeyi devre dışı bıraktı.

Dört koruma ve bir geri alma, küratörü güvenli hale getirdi

Dört koruma bunu düzeltti:

KorumaNe gerektirir
Güven0,75 veya üzeri
Gerçek konu örtüşmesiİki paylaşılan konu veya iki paylaşılan varlık, asla tek bir paylaşılan teknoloji değil
Aynı sınıfBir kural ve bir olay birbirinin yerini asla almaz
Tam kapsamKarar, kalanın kaybedenin iddia ettiği her şeyi kapsadığını söyler ve "şüphedeyken kısmi de" promptun içindedir

Korumalar açıkken, aynı tarama tam olarak bir yer değiştirmeyi otomatik olarak uyguladı, doğru olanı, ve üç gerçek gerilimi inceleme kuyruğuna gönderdi.

Gözetimsiz çalıştırılmasının güvenli olmasının nedeni modelin bu konuda iyi olması değil. Hiçbir şeyin asla silinmemesi, her kararın bir denetim günlüğünde olması ve tek bir komutun bunu geri alması.

Yerini bırakan bellekler, görünür bir etiket ve bir sıralama cezasıyla depoda kalır. Eski gerçekler yok olmak yerine yarı ömürle çürür: bir proje notu her 150 günde ağırlığının yarısına iner, kullanıcının verdiği bir kural ise hiç çürümez.

Küratörü üretken göstermek için korumaları asla düşürmeyin.

Bir bellek bir iddiadır, o yüzden kontrol edin

İşte incelediğimiz hiçbir şeyin yapmadığı kısım burası.

Mayıs ayında doğru olan ve sessizce doğru olmaktan çıkan bir bellek görünmezdir. Hiçbir şeyle çelişmez, ölü bir yol adlandırmaz, sadece orada yanlış olarak oturur.

Bizimkinde, Instagram token'larının "bir Lambda tarafından haftalık olarak otomatik döndürüldüğünü" söyleyen bir tane vardı. Hiçbir Lambda yoktu. Hiçbir şey ömrü boyunca bir token'ı döndürmemişti. Aylarca doğruymuş gibi okundu.

Merceğinde iki nokta gözü ve şüpheli düz bir ağzı olan büyük bir büyüteç, küçük bir not kartının üzerinde tutuluyor, yanına bir tik ve bir çarpı çizilmiş
Merceğinde iki nokta gözü ve şüpheli düz bir ağzı olan büyük bir büyüteç, küçük bir not kartının üzerinde tutuluyor, yanına bir tik ve bir çarpı çizilmiş

Bu yüzden artık her bellek bir dizi iddia olarak ele alınıyor ve iddialar sorgulanıyor. Bir model belleği okuyor ve sabit bir dizi sorguya (probe) tipli argümanlar dolduruyor: bu yol var mı, bu branch var mı, bu pull request merge edildi mi, bu Doppler projesi var mı, bu secret var mı, bu instance var mı, bu URL yanıt veriyor mu.

Model asla bir komut yazmaz. Her argüman bir şey çalışmadan önce doğrulanır ve buna karşı yapılan dokuz prompt injection girişiminin hepsi reddedildi. Zamanlanmış model tarafından yazılan shell, ekstra adımlarla bir uzaktan kod çalıştırma açığıdır.

İlk tam çalıştırma, 365 bellekten 383 iddia çıkardı. Üç yüz yirmi sekizi geçti. Yirmi beşi başarısız oldu ve başarısızlıklar gerçekti:

Sorguların yakaladığıBellekler
Artık var olmayan bir Doppler projesine işaret ediyordu5
Zaten merge edilmiş bir pull request'i açık olarak adlandırdı5
Ölü bir dosya yolunu adlandırdı7
Bir repo public iken private olduğunu söyledi1

Bir belleğin söylemesine izin verilen şey

Başarısızlıklardan iki kural çıktı ve ikisi de bir belleğin ne söylemesine izin verildiğiyle ilgili.

Bir pull request'in durumu bir gerçek değil, bir ruh halidir. Saniyeler içinde değişir. Çıkarıcı artık sadece "merge edilmiş" durumunu kabul ediyor, çünkü merge edilmiş nihaidir, ve açık veya kapalı durumunu reddediyor. On bir iddia düştü.

Ve bir sorgu, başarısızlığının ne anlama geldiğine göre ayrılıyor. Var olmayan bir yol kanıttır: dosya sistemi her yerden gerçeği söyler. Yanıt vermeyen bir URL kanıt değildir, çünkü bu laptoptan ulaşılamaz olmak, çökmüş olmakla aynı şey değildir.

Bu yüzden URL sorgusu mekanik olarak "başarısız" döndüremez. Hayatta olduğunu kanıtlayabilir. Ölü olduğunu kanıtlaması yasaktır. Bu kural var çünkü sağlıklı, güvenlik duvarlı bir ürünü tek bir denetimde üç kez "çökmüş" olarak adlandırmıştım ve hatırlamanız gereken bir kural, kural değildir.

Başarısız olan bir iddia, belleğe bir "doğrulanmamış" işareti yazar. Hatırlama bunu sonucun yanında gösterir. İnsanın buna dokunması gerekmez; bellek etiketlenmiş olarak gelir.

Neyi, kimden çaldık

On altı araştırma ajanı repoları okudu, sabitlenmiş commit'lerde klonladı, kodu çalıştırdı ve birbirlerini çürütmeye çalıştı. 64 iddiadan 55'i ayakta kaldı. İki "alıntı" uydurulmuştu ve bir tablo başka bir tabloyla değiştirilmişti. Araştırma ajanlarını fact-check etmenizin nedeni bu.

Al ve reddet: üç ajan

KaynakAldığımızReddettiğimiz ve nedeni
Hermes AgentKapasite başlığına sahip sınırlı, her zaman açık profil. "Yakalama" listesi: ortama bağlı hatalar, araçlar hakkında olumsuz iddialar, geçici hatalar, tek seferlik anlatılar. Emir kipi değil bildirim kipi: "kullanıcı X'i tercih eder", asla "her zaman X yap" değil, çünkü emir kipindeki bir bellek mevcut isteği geçersiz kılar.Bellek dolduğunda oluşan sert hata; düzeltmeleri kaybediyor. Depo başına bir ajan; biz yirmi çalıştırıyoruz.
HonchoProfil grameri: dört sabit önek, girdi başına bir sınır ve şimdiye kadar yazılmış en iyi kabul testi: bir değer altı ay içinde makul şekilde değişebiliyorsa, karta ait değildir. Yeniden inşa modu: model eskisini görmeden profili yeniden üretir, böylece sahipsiz kalan iddialar düşer.Honcho'nun kendisi. 48.000 satır, dört konteyner, 151 yapılandırma düğmesi, dışa aktarma komutu yok, oturum başına 617.000 token. Manşet özelliği olan "tümdengelimli akıl yürütme" özelliği, gönderilen kodda boş bir listeye sabit kodlanmış.
claude-memÖnerme: yakalama, modelin bir bellek yazmaya karar vermesine bağlı olmamalı. Ve issue takip sistemi, daemon hata modlarının ücretsiz bir kataloğu.Daemon, vektör yan işlemi (sidecar), araç çağrısı başına model alt süreci. 36 açık issue'sunun neredeyse tamamı daemon yaşam döngüsü hataları. Tam metin indeksi, bellekleri tutan tabloyu kapsamıyor.

Al ve reddet: alanın geri kalanı

KaynakAldığımızReddettiğimiz ve nedeni
supermemoryDoğrulama. Fon almış bir vektör-bellek şirketi, model tarafından karar verilen hatırlamadan vazgeçti ve nedenini bir kod yorumunda açıkladı: hatırlama her promptta gerçekleşir, sadece model bir araç çağrısı harcamayı seçtiğinde değil. Oturum başına yinelenenleri kaldırma (dedupe). Açık başarısız olma (fail open).Sadece bir benzerlik eşiğine dayalı geçiş kontrolü. Bir eşik bizim için de işi asla tek başına yapmıyordu.
Zep ve GraphitiHer gerçek bir geçerlilik penceresi alır; bir çelişki eskisini silmek yerine yerini aldığını işaretler.Grafik. Neo4j yok, varlık çözümlemesi yok, kenar başına model çağrısı yok. Semantik, düz markdown ve tek bir indekse sığıyor.
Anthropic'in skill-creator'ıTerfi kapısı olarak değerlendirme döngüsü: bir skill sadece kesinlikle daha iyi bir tutulan (held-out) skorla kabul edilir, beraberlikler reddedilir.Hiçbir şey. Pazaryerleri hiçbir bellek eklentisi göndermiyor, yani beklenecek birinci taraf bir yakınsama yok.
context-modeŞekil: bir arama indeksi artı sadece cevabı döndüren bir sandbox, etkileşimli bir döngü için yeterince hızlı.Bunu bellek olarak ele almak. Bu, oturum başına bir bağlam-penceresi güvenlik duvarıdır ve kendi başına asla enjekte etmez.

Bir alıntı bir hipotezdir

Araştırmadan bir bölüm kendi başlığını hak ediyor, çünkü bu, bu makaleyi okuyan herkesin yapmak üzere olduğu hata.

Çokça alıntılanan bir geri getirme (retrieval) makalesi, standart bir benchmark üzerinde belge genişletmeyi ölçtü. Bir belgeyi parafrazlarla genişletmek, genişletme yapılmayan temel çizginin altında puan aldı. Kendi terimlerini kopyalayarak genişletmek ise oldukça üzerinde puan aldı.

Zenginleştirme promptumuz, modele ürettiği kelimelerin notta görünmemesi gerektiğini açıkça söylemişti. Kaybeden yarıyı üretiyor, kazanan yarıyı bastırıyor ve kaybeden yarıyı 1,75 katına çıkarıyorduk.

Bu yüzden bulguyu uyguladık. 474 belleğin tamamını yeniden türettik. Batarya 16'da 14'ten 16'da 13'e düştü. Daha kötü.

Makalenin temel çizgisi, kendi terimleri olmadan indekslenmiş bir belgeydi, burada onları geri kopyalamak genişletme demekti. Bizimki zaten başlığı, açıklamayı ve gövdeyi indeksliyor. Onları alias alanına kopyalamak tekrardı ve sahip olduğumuz tek gerçek genişletme olan parafrazların yerini aldı.

Geri alındı, yeniden türetildi, 16'da 14'e geri döndü. Kırk dakika, ve eğer inanmadan önce ölçseydik bu sıfır dakika olurdu.

Bir alıntı, başkasının sistemi hakkında bir hipotezdir.

Bellek sistemi sonra dikkat çekici bir şey yaptı. Hipotezi, oturum sonunda otomatik olarak yakaladı. Çürütmeyi yakalamadı.

"terimleri dahil et" diyen not, bugün hâlâ depoda canlı bir bellek olarak duruyor. Yakalama, neye inanıldığını yazar; inancın bir saat sonra tersine döndüğünü bilmez. Bu açık bir problem ve aşağıdaki listede.

Ajanın kendi skill'lerini yazmasına izin vermek işleri kötüleştiriyor

Ekip özerk skill oluşturma istedi: bir prosedür tekrarlandığında, ajan bunu yeniden kullanılabilir bir skill olarak yazmalı ve bunu söylemeli. Bu bir süper güç ve araştırma, saf versiyonunun bir yükümlülük olduğunu söylüyor.

Deterministik kontrolcülere sahip 87 görevlik bir benchmark'ta, ajanın kendisi için ürettiği skill'ler, en güçlü modelle Claude Code üzerinde, hiç skill olmamasının 8,1 puan altında kaldı. Aynı örüntü diğer iki çatıda da geçerliydi.

İnsan tarafından seçilen skill'ler geçme oranını %33,9'dan %50,5'e çıkardı. Ve iki skill'den hangisinin daha iyi olduğu sorulan bir model, fark gerçek olduğunda 100'de 84 kez daha kötü olanı seçiyor.

Uzunluk, kimsenin beklemediği bir şekilde önemli. Bu bir eğim değil, bir tümsek:

Skill uzunluğuGeçme oranındaki kazanç
Kompakt19 puan
Standart21,5 puan
Detaylı14,5 puan
Kapsamlı0,7 puan

Bir sayfayı geçtikten sonra, dokümantasyon yardımcı olmaktan çıkıyor.

İnşa ettiğimiz versiyon bir insanı bekliyor

Yani inşa ettiğimiz versiyon özerkliğin tam tersi. Sadece üç veya daha fazla ayrı oturumda tekrarlanan bir prosedürü tespit ediyor ve bunu sayarak biliyor, çünkü 71.062 tur transkriptin tamamı indekslenmiş, yani "bu tekrarlanıyor mu" bir modelin tahmini yerine bir veritabanı sorgusu.

Skill'i etkisiz olarak yazar, böylece açıklaması hiç kimsenin bağlamına girmez. Kapı yapısaldır, asla düz metin bir yargı değildir: skill'in önlediği somut bir hatayı adlandırın ve alıntıladığı her yol dosya sistemine göre kontrol edilir. Sadece insan onu terfi ettirir.

Altı düşmanca taslağa karşı test edildi: yerleşik bir şeyi gölgeleme, "zaman kazandırır", bir kez görülmüş, uydurma yollar, aşırı büyük bir gövde: hepsi reddedildi, geçerli olan kabul edildi.

Otuz oturum üzerindeki ilk gerçek çalıştırma taslaklanacak hiçbir şey bulmadı. Bu doğru cevaptı. O zamandan beri bir skill terfi ettirildi: sessizce production'ı hedef alan bir deploy komutuna karşı bir koruma.

Hâlâ yanlış olan ne

Dürüstlük alternatifinden daha ucuz, o yüzden işte geride kalan.

Her zaman açık katman, bugün yaklaşık 24.000 byte ile hâlâ Hermes'inkinden üç ila dört kat daha ağır ve bir profil değil bir indeks. Hayran olduğumuz yalınlık, reddettiğimiz bir mekanizmadan geliyor ve aynı disiplini üreten daha yumuşak bir mekanizmayı henüz bulmadık.

Tutarlılık sınırlar arasında zorlanmıyor. Kullanıcı profili gönderildiği anda, içindeki her gerçek iki kez var oldu. Küratör belleği belleğe karşı kontrol ediyor, profili depoya karşı değil, ve belleği projenin kendi talimat dosyasına karşı değil. Honcho, bir gerçeğin iki türetilmiş görünümünün sonunda anlaşmazlığa düştüğünün ve modelin yanlış olanı takip ettiğinin kanıtı.

Yakalama, oturum sonunda ve sıkıştırmadan önce tetiklenir, tam olarak hiç işe yaramamış bir dizinin kendinden emin bir şekilde yazıya dökülmesinin en olası olduğu an. Yukarıdaki çürütülmüş alıntı, canlı örnek.

Bir bellek, sadece sorguları kadar kontrol edilebilir. Bir yol, bir branch, bir pull request, bir secret ve bir instance doğrulanabilir. "O satırlardan üç bini sayfaya ait" doğrulanamaz ve "kullanıcı X'i tercih eder" bir iddia bile değildir.

Depo hâlâ sessizce yanlış bir ifade barındırabilir; sadece sessizce yanlış bir yol barındıramaz.

Benchmark'ta, koşullu tercihler hâlâ en zayıf soru türümüz ve mem0 kanıtı ilk beşe daha sık getirmeyi sürdürüyor. Gerçek notları benchmark yaptığımızda küçük bir modelde çalışıyor ve uyduruyor: biri "dayanacak bir annem yok" diye okudu ve kullanıcıyı bekar olarak kaydetti. Ve kamuya açık tablonun lideri, yeniden notlandıramadığımız tek sistem.

Ve bellek sisteminin kendi hakkındaki belleği bayatlamış durumda. Bir not, sistemin hook'larını bir eklentiye taşırken sildiği bir hook dosyasına işaret ediyor. İnceleme kuyruğunda oturuyor, doğrulanmamış olarak etiketlenmiş, diğerleri gibi bekliyor.

Altı kural

Bu not defterinden tek bir şey alacaksanız, listeyi alın.

KuralArkasındaki sayı
MEMORY.md satırlarınızı ve byte'larınızı sayın200 satır veya 25.000 byte, hangisi önce gelirse, alttan kesilir
Prompt yolunda model yok8,6 saniyeye karşı 18 milisaniye
Kendi bataryanızda değil, gerçek promptlarda ölçün23'te 22, %17'ye dönüştü
Asla silme, geri alınabilir şekilde yerini değiştirKüratör yüksek güvende %55 doğruydu
Her belleği bir iddia olarak ele alın ve sorgulayın383 iddia, 25 yanlış, ve bir URL asla ölümü kanıtlayamaz
Tek bir deponun modelin penceresini doldurmasına asla izin vermeyinSınırlanmamış gerçek notları, koşullu cevapları 0,70'ten 0,06'ya düşürdü

Daha büyük ders, tüm alanın yanlış taraftan sürekli yeniden keşfettiği ders. Belleğin hatırlama yarısı, doğru notu bulmak, iyi çalışılmış ve çoğunlukla hiçbir şeye mal olmayan bir arama indeksiyle çözülmüş durumda. Kontrol yarısı, bir notun ne iddia edebileceğine, ne zaman yerini bıraktığına ve yanlış olanın nasıl yakalandığına karar vermek, belleğin çürüdüğü yer.

O yarıyı kimse satmıyor, çünkü bu bir özellik değil. Bu bir disiplin ve kimsenin onu hatırlamak zorunda kalmaması için koda derlenmesi gerekiyor.

Kod, benchmark adaptörü ve notlandırılan her sonuç github.com/brainyboon/quipu adresinde açık kaynak.

Boon'un üzerinde çalıştığı diğer şeyleri görmek isterseniz, tasarımcılar için Claude Code ile başlayın, bir ajana el veren MCP sunucuları, tasarımcılar için AI ajanları, ve bu belleğin sıfırda tuttuğu fatura olan bir ajanın token'larının maliyeti. Kendi markanızda bu tür bir özeni istiyorsanız, başlangıç noktası Brainy Studio.


SSS

Claude Code, MEMORY.md dosyasına koyduğum şeyleri neden unutuyor?

Claude Code, otomatik bellek indeksini 200 satıra veya 25.000 byte'a kadar yükler, hangi sınıra önce ulaşılırsa, ve geri kalanını sessizce göz ardı eder. Dosya en yeniden eklenir ve alttan kesilir, yani en son bellekler ilk düşer. Ajan yakın zamanda eklediğiniz bir kuralı göz ardı ediyorsa, dosyanın satırlarını ve byte'larını sayın.

Claude Code için bir bellek eklentisi kurmalı mıyım?

İki şeyi kontrol edin: her prompta saniyeler ekleyen, prompt yolunda bir model çalıştırıp çalıştırmadığını ve en büyük eklentinin açık issue'larının çoğunun yaşadığı yer olan bir arka plan daemon'u çalıştırıp çalıştırmadığını. Bizim sorunumuzu düzelten şey, her promptta aranan bir tam metin indeksi, çevrimdışı model geçişleri ve bir doğrulama adımıydı. Bunların hiçbiri bir daemon gerektirmiyor.

Anahtar kelime araması, AI ajan belleği için gerçekten yeterli mi?

Prompt başına çalışan hook için, evet. Standart sıfır-atış (zero-shot) geri getirme benchmark'ında, her tekli-vektör embedding modeli sıradan BM25 anahtar kelime aramasına kaybetti ve bir sinirsel yeniden sıralayıcı (reranker), 18 milisaniyelik bütçeye karşı yaklaşık 1,5 saniyelik model yüklemesine mal oluyor. Geçmiş konuşmaları aramak için bu yeterli değil: bir model değil bir arama tablosu olan statik bir embedding tablosu, bir değişikliği duyuran cümleyi anahtar kelimelerin iki katı sıklıkla buldu. Anahtar kelime sıralamasıyla saf bir şekilde karıştırıldığında sonuçları kötüleştirdi; sıraya göre birleştirilip geniş toplandığında, mem0'a eşitlenmemizin bir parçası oldu.

Bu bellek sistemi açık kaynak mı?

Evet. Eklenti, MemConflict benchmark adaptörü, yöntem ve notlandırılan her özet github.com/brainyboon/quipu adresinde MIT lisansı altında. Çekirdek sadece Python'un standart kütüphanesine ihtiyaç duyar; anlam araması numpy'a ihtiyaç duyar.

Belleğin yanlış bir şeye inanmasını nasıl engelliyorsunuz?

İki şekilde. Asla silmeyen bir küratör: bir çelişki, eski belleği görünür bir etiket ve bir sıralama cezasıyla yerini bıraktı olarak işaretler, her karar günlüğe kaydedilir ve tek bir komut bunu geri alır. Ve her belleği tipli iddialar olarak ele alan, bunları gerçek dünyaya karşı sorgulayan ve biri başarısız olduğunda belleği doğrulanmamış olarak işaretleyen bir doğrulayıcı.

Bu bellek sistemini çalıştırmanın maliyeti ne?

Marjinal olarak sıfır dolar: geri getirme yerel bir veritabanı sorgusudur ve her model çağrısı (oturum sonunda yakalama, yeni belleklerin zenginleştirilmesi, günlük çelişki taraması) zaten ödenmiş abonelik üzerinden çalışır, asla ölçülü bir API üzerinden değil. Gerçek maliyet plan kotasıdır, oturum başına kabaca bir küçük çağrı. MemConflict benchmark'ında bir konuşmayı 1,6 saniyede işledi, aynı makinede mem0 için 31,6'ya karşı.

Boon runs Brainy's studio on this memory. If you want a design partner whose AI remembers your brand rules, your file conventions and your last three decisions, start a project with Brainy Studio.

Get Started

More from Brainy Papers

Keep reading