Modül: RAG ve Vektör Veritabanları (ML-08) • Süre: 2-3 saat
Kurgusal bir kafe "Kahve Molası" için bir SSS botu kuruyorsun. Elinde birden çok belge var ve her biri bir KATEGORİ'ye ait: Menü, Saatler, Rezervasyon, Olanaklar, Ödeme. Kullanıcı doğal dille soruyor: "Kafe saat kaçta açık?", "Kart ile ödeme var mı?"
DS-49'da temel RAG hattını (parçala → embed → getir → cevap) kurdun. Bu projede bir adım öteye geçiyorsun:
- Metadata: her parçaya kategorisini taşırsın — böylece bir chunk'ın nereden geldiğini bilirsin.
- Metadata filtre: aramayı istenirse tek bir kategoriyle sınırlarsın (ör. sadece "Menü" içinde ara).
- Değerlendirme: sistemin ne kadar iyi getirdiğini ölçersin (hit-rate ve MRR) — "iyi çalışıyor gibi" demek yerine sayı verirsin.
Odak DS-49'dan farklı: burada iş metadata + ÖLÇÜM. LLM/cevap üretimi yok; retrieval'ın kalitesine odaklanıyorsun.
load_belgeler— ~5 belge, her biri{"baslik", "kategori", "metin"}parcala/chunkla_belgeler— overlap'li böl, her parçaya kaynak + kategori eklebenzerlik— iki vektör arası cosine (elle)indeksle— her parçayı embed etgetir— soruya en yakın top-k parça;kategoriverilirse sadece o kategoride ara (metadata filtre)degerlendir— küçük bir gold set üzerinden hit-rate ve MRR hesapla
gold = (soru, doğru_kategori) ikilileri. Her soru için getir çalıştırıp dönen chunk'ların kategorilerine bakarsın:
- Hit-rate: doğru kategori ilk k sonuç içinde geçen soruların oranı. "Kaç soruda doğru yeri buldu?"
- MRR (Mean Reciprocal Rank): doğru kategorinin ilk göründüğü sıranın tersi (1. sıradaysa 1.0, 2. sıradaysa 0.5...). Ortalaması. "Doğru yeri ne kadar üste koydu?"
İkisi de 0-1 arası. Bu metrikler retrieval sistemlerini kıyaslamanın standart yoludur.
Fonksiyonların embed'i parametre olarak alır (dependency injection):
embed: metin (str) → sayı listesi (vektör). Gerçektesentence-transformersya da OpenAI embedding.- Testlerde deterministik sahte
embedverilir → API key GEREKMEZ, puan hep aynı. - Bu projede LLM/cevap üretimi yok — odak retrieval + metadata + ölçüm.
Aynı kod, sadece verdiğin fonksiyon değişir — bu, test edilebilir RAG kodu yazmanın profesyonel yoludur.
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python watch.py # otomatik test (dosya değişince)
# veya
pytest tests/test_question.py -vUSER_ID'ni Kaizu profilinden alıp yaz (PROJECT_ID'ye dokunma). Testler geçince skor otomatik gider.
Puanlama için gerekmez (mock). Gerçek embed ile denemek istersen cp .env.example .env + anahtarını koy (.env asla commit edilmez).