Hibrit bellek: vektör + grafik + KV
Type: Build
Languages: Python (stdlib)
Prerequisites: Phase 14 · 07 (MemGPT), Phase 14 · 08 (Letta Blocks)
Time: ~75 minutes
Öğrenme Hedefleri
- Tek bir depo (sadece vektör, sadece grafik, sadece KV) neden ajan hafızası için yeterli olmadığını açıklayın.
- Mem0'un üç paralel mağazasını ve her birinin ne için optimize ettiğini söyle.
- Mem0'un birleşme puanlaması ilgililik, önem, yakınlık ve neden bir hiyerarşi değil, ağırlıklı bir toplam olduğunu açıklayın.
- Bir oyuncak üç katlı hafıza uygulaması ile stdlib
add()Bu üçü de birer.search()Bu sonuçları birleştirir.
Sorun
Bir mağazada üç sorgu sınıfından biri için yanlış:
- Semantic similarityVector kazanır, KV ve grafik kaybı.
- Fact lookup "kullanıcının telefon numarası nedir?" KV kazanır; vektör harcadır, grafik aşırı öldürür.
- Relationship reasoning " hangi müşteriler aynı faturalama kurumunu paylaşıyor?" Graf kazanır; vektör ve KV cevap veremez.
Üretim ajanları üçü de bir oturumda yayınlar. Tek depo belleği her zaman iki tane için yanlış. Mem0'un katkı üçü de tek bir araya getirmek.add- Ne ?searchBir puanlama fonksiyonu ile bir yüzeyde.
Anlaşım
Üç tane paralel mağazada.
Mem0 (arXiv:2504.19413, Nisan 2025)add(text, user_id, metadata)- ...
- Teksten aday gerçekleri çıkarmak (LLM yönlendirilmiş bir adım).
- Her faktörü semantik arama için vektör depolarına (kaynaklama) yazın.
- O(1) araması için her faktörü (user_id, fact_type, entity) tuşlanmış KV depoya yazın.
- Her faktörü ilişki sorguları için yazı tipleri olarak grafik depolarına (Mem0g) yazın.
- Evet .
search(query, user_id)- ...
- Vector store top-k'yi cosine ekleyerek geri gönderir.
- KV depo sorgu kaynaklı (user_id, tür, varlık) anahtarlı doğrudan isabetleri gönderir.
- Graf depo sorgu varlıklarından erişilebilir altgraf gönderir.
- Bir puan tabaka üçü birleştirir.
Füzyon puanlaması
score = w_relevance * relevance(q, record)
+ w_importance * importance(record)
+ w_recency * recency(record)- Relevance vektör cosinus, KV tam eşleşme, grafik yol ağırlığı.
- Importance yazma zamanı veya öğrenilen (bazı gerçekler daha önemli: isimler, kimlikler, politikalar).
- Recency Son yazılı ya da okunmuş tarihten beri zaman içinde eksponensial çöküş.
Ürün başına ağırlıklar ayarlanır.w_recencyÇat ajanları için; daha yüksek w_importanceuyumlulık ajanları için; yüksek w_relevance- Çıkarma ajanları için.
Memorandum ve zamanlı akıl yürütme
Mem0g bir çatışma algıcısı ekler. Yeni bir gerçek mevcut bir kenara zıt geldiğinde, mevcut kenar geçersiz olarak işaret edilir, ancak silinmez. Zaman sorguları ("Mart ayında kullanıcı şehri neydi?") geçerli zaman altgrafı üzerinden geçer.
Bu Letta'nın geçersizleştirme örneği genelleştirdiği uyum derecesi davranışıdır.
Benchmark numaraları
Mem0 Raporu (2025):
- LoCoMo(uzun şekilli konuşma hafızası): 91.6
- LongMemEval(Uzun Uzak Uçaklıklı Bölümsel Hatırlama): 93.4
- BEAM 1M(1M-token hafıza referans değerinde): 64.1
Karşılaştırma temel hatları (tam bağlam 128k LLM, düz vektör depo, düz KV) hepsi 10+ puan kaybeder. Benchmarks tek başına seçim işletim şekli haklı çıkarmaz ama rakamlar füzyon tasarımı yuvarlama hatası olmadığını gösterir.
Etkinlik taksonomisi
Mem0 hafızaları alanına göre bölüyor:
- User memory sesyonlar boyunca devam eder, kilitlenir
user_id- Evet . - Session memory tek bir iplik içinde kalır.
- Agent memory Agent başına durum durumu.
Her yazı bir alan seçer. Arama alanı boyunca arama yapabilir. alan ağırlıkları ile. Düşünmeden alanları karıştırmak "asistan Alice'e Bob'un projesi hakkında söyledi" olaylarını elde etmenin bir yolu.
Bu kalıp yanlış gittiğinde
- Embedding drift.İlk yüz sorguda doğru görünen vektör sonuçları, korpus büyüdükçe bozulur.
- KV schema creep.
(user_id, type, entity)Her takım kendi takımlarını ekleyecek kadar basit görünüyor .type- Çeyrek bir denetim yapın. - Graph explosion.Bir gürültülü ekstraktör mesaj başına 50 kenar ekler.
add- Evet. - Evet.
Yapın
code/main.pystdlib'de üç katlı kalıp uygulanır:
VectorStorebir yerleştirme yerine simge örtüşmesi benzerliği.KVStoredikte kilitli(user_id, fact_type, entity)- Evet .GraphStoreTiplenmiş kenarlar (subject, relation, object, valid).Mem0üst düzey fasasıadd()- Evet .search(), füzyon puanlaması ve kapsam farkındalıklı geri alım.- Çok kullanıcılı, çok seanslı bir konuşmada çalışmış bir iz.
Çek şunu:
python3 code/main.pyÇıktı output üç ayrı geri çağırma yolunu artı top-k fuse eder.main()ve sıralamayı izle.
Kullan
- Mem0 (Apache 2.0) üretim hazır. Postgres + Qdrant + Neo4j ile kendi kendine barındırın veya yönetilen bulut kullanın.
- Letta Üç katlı çekirdek/kızdırma/arşiv; kendi vektör ve grafik arka planlarını getir.
- Zep Zamanlı KG ve gerçek çıkarımı ile ticari alternatif.
- Custom builds ekstraktörün ( uyumluluk) veya füzyon ağırlıklarının (sonluk baskın olduğu ses ajanları) tam kontrolü gerektiğinde.
Gönder
outputs/skill-hybrid-memory.mdFüzyon skorlayıcı, kapsam taksonomisi ve zamansal geçersizliği kablo ile üç katlı bir bellek asfaltı üretir.
Egzersizler
- Oyuncak vektör benzerliğini gerçek bir gömleyici modeli ile değiştirin (cümle-transformers, Ollama, OpenAI gömleği).
- Zaman sorguyu ekle:
search(query, as_of=timestamp)Bu zamana kadar geçerli olan kayıtları geri verin. - Çatışma algılayıcısı uygulayın: Eğer gelen bir gerçek bir grafik kenarına aykırıysa, eski kenarı geçersiz kıl ve her ikisini de kaydet. "kullanıcı Berlin'de yaşıyor" -> "kullanıcı Lizbon'da yaşıyor" üzerinde test.
- Füzyon skorunu bir
user_feedbackboyut (alınan kayıtlarda büyüklük). Oyun oynamayı nasıl önleyebilirsiniz (ajan sadece zaten beğendiği kayıtları iade eder)? - Mem0 belgeleri oku (
docs.mem0.aiOyuncakları buraya getir .mem0Aynı 20 test sorusunda çekim kalitesini karşılaştırın.
Anahtar Terimler
| Term | What people say | What it actually means |
|---|---|---|
| Hybrid memory | "Vector plus graph plus KV" | Three stores written in parallel, fused on retrieval |
| Fact extraction | "Memory ingestion" | LLM step that breaks text into (entity, relation, fact) tuples |
| Fusion scoring | "Relevance ranking" | Weighted sum of relevance, importance, recency |
| Scope | "Memory namespace" | user / session / agent — determines who sees what |
| Mem0g | "Memory graph" | Typed edges with temporal validity for relationship queries |
| Temporal invalidation | "Soft delete" | Mark contradicted edges invalid; never delete |
| Embedding drift | "Retrieval rot" | Vector quality degrades as corpus grows; re-embed periodically |
Daha Fazla Okumak
- Chhikara et al., Mem0 (arXiv:2504.19413) orijinal kağıt
- Mem0 docs üretim API, SDK'lar, yönetilen bulut
- Packer et al., MemGPT (arXiv:2310.08560) Sanal bağlam öncesi
- Letta, Memory Blocks blog Üç katlı kardeş tasarım
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.