Agent’ın hafızası: neyi saklayacağına karar vermek ve ‘dreaming’ pipeline’ı (MemCurrent)
MemCurrent: Designing Persistent Memory for Production Agents
Production agent’ı yazmak ve sürdürmek, ‘vibe coding’ ile bir agent çıkarmaktan çok daha zor. Geliştiriciler çoğunlukla kalite (özellikle long-tail görevlerde doğru cevap) ile verimlilik (maliyet ve gecikme) arasında takas yapmak zorunda kalıyor. Memory ikisini birden iyileştirebilecek az sayıdaki yöntemden biri: kullanıcı tercihleri, önceki düzeltmeler, metrik tanımları ve işe yarayan workflow’lar görevler arasında taşınabilir. Ama yazının temel uyarısı şu: daha fazla geçmiş daha iyi memory demek değil; her etkileşimi vermek hem pahalı hem de eski, çelişen ya da alakasız bağlam sokabilir. Asıl mesele neyi tutacağına, nasıl güncel tutacağına ve yararını nasıl ölçeceğine karar vermek.
Databricks’in MemCurrent adlı mimarisi artık Agent Bricks Memory ve Genie’yi çalıştırıyor. Kendi iç benchmark’larında memory’siz agent’a göre pass rate’i üçe katlıyor, token’ı yüzde 31 azaltıyor ve yüzde 26 daha hızlı çalışıyor. Memory’yi agent’a bağlamanın üç yolu var: plugin (oturumda sabit noktalarda otomatik okuma ve yazma), tool (agent ne zaman neyi okuyup yazacağına kendi karar verir) ve offline pipeline (arka planda zamanlanmış ya da tetiklenmiş güncelleme). MemCurrent üçünü de kullanıyor, her biri en uygun olduğu yerde.
İki tür memory. *Episodic memory* ham oturum izlerini saklıyor; append-only, bir plugin oturum ilerledikçe her adımı kaydediyor. *Derived memory* bu izlerden damıtılmış öğrenimler; hiyerarşik bir dosya sistemini taklit eden değiştirilebilir bir tabloda, yapılandırılmış bir knowledge base olarak duruyor ve en üstte otomatik üretilen bir memory.md index’i dosya yapısını ve her dosyanın içeriğini anlatıyor. İkisi de çok kullanıcıya ölçeklenebilen, düşük gecikmeli bir production veritabanında.
Yazma. Açık talepler (‘/tmp dizininde asla script yazma’ gibi) agent tool’larıyla (add_memory, update_memory, delete_memory) yazılıyor. Geri kalanı offline ‘dreaming’ pipeline’ı yakalıyor: her yeni oturumdan örtük öğrenimleri ilgili dosyalara damıtıyor ve tüm depoyu temizliyor; büyük dosyaları bölüyor, tekrarları birleştiriyor, çelişkileri çözüyor. Okuma katmanlı: oturum başında bir plugin memory index’ini enjekte ediyor, böylece agent daha başlamadan neyi bildiğini biliyor; oturum sırasında iki tool var: search_memory (bir sorgu için en iyi eşleşmeleri döndürür) ve fetch_memory (kimliğine göre tam kaydı getirir).
Nasıl ölçtüler? Üç açık benchmark (LoCoMo, LongMemEval, ConvoMem) kullanıldı ama bunlar simüle edilmiş kişilerin sohbetlerinde geçmişte söylenen bir bilgiyi hatırlamayı test ediyor. Ekip buna ek olarak gerçek Genie konuşmalarından bir Internal Memory Benchmark kurdu: 12 binden fazla oturumdan ‘memory’ye değer sinyali taşıyan 3 bin aday seçildi. Farkları üç noktada: kurumsal domain (tablo semantiği, metrik tanımları, workflow’lar), memory’nin cevap değil eylem beslemesi (doğru dizeyi bulmak yetmez, agent bilgiyi çok adımlı bir görevde uygulamalı) ve çeşitlilik (5 memory türü, 11 senaryo; güncelliğini yitirmiş bilgi ve memory gerektirmeyen sorular dahil). Mem0, PropMem ve OpenClaw memory ile aynı LLM üzerinde karşılaştırıldı; Databricks MemCurrent’in pass rate ve token kullanımında Pareto frontier’da olduğunu bildiriyor.
Pratik bir örnek: bir kullanıcı ürünün en aktif 20 kullanıcısını sormuş; agent doğru SQL yazmış ama çalıştırma sonuçlarının kaydedildiği dosyayı hiç okumamış. Memory bu tür ara sıra görülen hallucination hatalarını önlemiş.
Öne çıkanlar
- Daha fazla geçmiş daha iyi memory değildir; eski, çelişen ya da alakasız bağlam kaliteyi düşürür.
- Ham izleri (episodic) ve damıtılmış öğrenimleri (derived) ayrı tut.
- Açık talepleri tool ile, örtük öğrenimleri arka plandaki bir pipeline ile yaz.
- Memory’nin başarısı hatırlamayla değil, hatırlanan bilgiyle doğru eylem yapmakla ölçülür.
- Oturum başında memory index’ini vermek, agent’ın ne bildiğini baştan bilmesini sağlar.
Neden önemli?
Agent memory çoğu zaman ‘vektör veritabanına at’ olarak uygulanıyor. Bu yazı, memory’yi bakım gerektiren bir veri ürünü olarak ele alıyor: tekrarları birleştiriyor, çelişkileri çözüyor, yararını bir benchmark ile ölçüyor.
Pratikte
Basit bir agent’a memory eklemek istersen küçük başla: kullanıcıya özel bir memory.md dosyası tut, oturum başında prompt’a ekle ve oturum sonunda bir LLM çağrısıyla ‘bu oturumdan kalıcı olarak öğrenilmesi gereken şeyler’ çıkarıp dosyaya ekle. Haftada bir ikinci bir çağrıyla dosyayı sadeleştir: tekrarları birleştir, çelişenleri çöz. Değerlendirmek için önce ‘memory’siz ve ‘memory’li aynı 20 görevi çalıştırıp pass rate’i karşılaştır; ölçmeden memory’nin işe yaradığını varsayma.
Sözlük
- episodic memory
- Agent’ın geçmiş oturumlarının ham, sıralı kaydı.
- derived memory
- Ham izlerden damıtılıp yapılandırılmış biçimde saklanan kalıcı öğrenimler.
- Pareto frontier
- Bir ölçütte kötüleşmeden diğerinde iyileşmenin mümkün olmadığı en iyi dengeler kümesi.
- hallucination
- Modelin girdideki kanıtla desteklenmeyen bilgiyi doğruymuş gibi üretmesi.
- pass rate
- Bir değerlendirmede başarıyla geçilen görevlerin oranı.