MemoDokümantasyon
TR

RAG Anlamsal Hafıza

Memo'nun Getirme-Destekli Üretim (RAG) sistemi, modele sohbetler arası kalıcı, aranabilir hafıza kazandırır. Vektör uzantılı SQLite üzerine inşa edilmiştir — harici vektör veritabanı gerekmez.

Mimari Genel Bakış

┌──────────────┐     ┌─────────────────────┐     ┌──────────────────┐
│  Belge Aktar  │────▶│  Parçala & Göm      │────▶│  SQLite + vec0    │
│  (MD/TXT/PDF) │     │  (768 boyut vektör) │     │  (ANN İndeks)     │
└──────────────┘     └─────────────────────┘     └────────┬─────────┘
                                                          │
┌──────────────┐     ┌─────────────────────┐              │
│  Kullanıcı    │────▶│  Sorguyu Göm        │────▶────────┘
│  Sorgusu      │     │  (aynı model)       │     │  Kosinüs Arama  │
└──────────────┘     └─────────────────────┘     │  İlk-K Sonuç    │
                                                  └────────┬────────┘
                                                           │
┌──────────────┐     ┌─────────────────────┐              │
│  LLM Yanıtı   │◀────│  Bağlam Enjekte Et  │◀─────────────┘
│  (zengin)     │     │  (parçaları başa ekle)│
└──────────────┘     └─────────────────────┘

Gömme Modeli

  • Varsayılan model: nomic-embed-text-v1.5
  • Boyut: 768
  • Format: GGUF, llama.cpp gömme sunucusu üzerinden yüklenir
  • Özel sunucu: Sohbet çıkarım sunucusundan ayrı bir portta çalışır

Gömme sunucusu, sağlık kontrolleri ve arıza durumunda otomatik yeniden başlatma ile bir alt süreç olarak yönetilir.

Depolama Katmanı

Vektörler ve üst veriler, Yaklaşık En Yakın Komşu (ANN) indeksleme için vec0 sanal tablosuyla birlikte sqlite-vec uzantısı kullanılarak SQLite'da saklanır:

CREATE VIRTUAL TABLE vec_memory USING vec0(
    embedding float[768],
    content text,
    source text,
    chunk_index integer,
    created_at datetime
);

Kalıcılık Stratejisi

  • İkili-atomik kalıcılık: Yazma işlemleri SQLite'ın atomik commit'ini kullanır. Kısmi yazmalar imkansızdır.
  • RAM indeksleme: vec0 ANN indeksi milisaniye altı arama için bellekte yaşar. Alttaki tablo diskte kalıcıdır.
  • Tembel yükleme: Parçalar yalnızca bir arama sorgusuyla eşleştiğinde diskten yüklenir. Önce tam indeks kontrol edilir.

Aktarım Süreci

Bir belge veya sohbet parçası aktarıldığında:

  1. Parçalama: İçerik örtüşen parçalara bölünür (varsayılan ~512 token, %10 örtüşme)
  2. Tekilleştirme: Tekrarları önlemek için mevcut parçalara karşı içerik hash kontrolü
  3. Gömme: Her parça gömme sunucusuna gönderilir, 768 boyutlu float32 vektör döner
  4. Depolama: Vektör + üst veri tek bir işlemde vec_memory tablosuna yazılır
  5. İndeks Güncelleme: vec0 ANN indeksi atomik olarak güncellenir

Anlamsal Arama Akışı

Bir kullanıcı sorgusu hafıza hatırlamayı tetiklediğinde:

  1. Sorgu Gömme: Sorgu metni aynı model kullanılarak gömülür
  2. Kosinüs Benzerlik Araması: Vektör ANN indeksine karşı karşılaştırılır
  3. İlk-K Getirme: En benzer K parça getirilir (varsayılan K=5)
  4. Eşik Filtresi: min_similarity altındaki sonuçlar atılır (varsayılan 0.7)
  5. Bağlam Enjeksiyonu: Eşleşen parçalar sistem istemine başa eklenir:
[İlgili Hafıza]
- parça_1 içeriği (benzerlik: 0.92)
- parça_2 içeriği (benzerlik: 0.85)

[Kullanıcı Mesajı]
...mevcut sorgu...

Çapraz Mod Hafıza

Memo, harici sohbet sağlayıcılarının (OpenAI, Claude, vb.) yerel vektör depona yazıp okuyabildiği çapraz mod hafızayı destekler:

  • Harici sağlayıcılardan gelen sohbet yanıtları gömülür ve yerel olarak saklanır
  • Hafıza araması, yanıtı hangi sağlayıcının ürettiğine bakılmaksızın yerel olarak çalışır
  • Sohbet modeli uzakta olsa bile gömme sunucusu her zaman yereldir

Bu sayede ister yerel GGUF modeli ister harici API kullan, hafızan birleşik kalır.

Eşzamanlılık & Güvenlik

  • Okuma/yazma ayrımı: vec_memory tablosu eşzamanlı okumaları destekler; yazmalar sync.RWMutex ile serileştirilir
  • Depo başlatma: Model yeniden yükleme sırasında yarışları önlemek için storeMu ile korunur
  • Sağlık kontrolleri: Her yazma işleminden önce gömme sunucusu sağlığı doğrulanır

Performans Özellikleri

İşlem Tipik Gecikme
Parça gömme (512 token) ~50ms
Vektör arama (10K belge) <5ms
Tam aktarım (1MB metin) ~2s
Bağlam enjeksiyonu <1ms


En iyi hafıza kalitesi için aynı gömme modelini tutarlı şekilde kullan. Gömme modelini değiştirmek, saklanan tüm belgelerin yeniden indekslenmesini gerektirir.