Modül: RAG ve Vektör Veritabanları (ML-08) • Süre: 3-4 saat
Kurgusal online kurs platformu ÖğrenHub için bir destek asistanı kuruyorsun. Kullanıcılar doğal dille soruyor: "Kayıt nasıl olur?", "İade alabilir miyim?", "Sertifika için sınav şart mı?"
DS-49'da temel RAG hattını (parçala → embed → getir → kaynaklı cevap) sıfırdan kurmuştun. Burada o hattın tamamını kurup üzerine gerçek bir asistanı ürüne dönüştüren iki ileri özellik ekliyorsun:
- 🧵 Çok-turlu sohbet — asistan önceki soru-cevapları hatırlar. Kullanıcı "peki ya iade?" dediğinde konuşma bağlamını korur (konuşma hafızası).
- 🛡️ Sadakat kontrolü (faithfulness) — üretilen cevap gerçekten bağlama dayanıyor mu, yoksa model uydurdu mu? Bir hakem (judge LLM) cevabı 1-5 arası puanlar; düşük puan = güvenilmez cevap.
Derste LangChain memory + RAGAS faithfulness bunları senin için yapıyordu. Bu projede aynı mekanizmayı elle kurup içinde ne olduğunu tam anlıyorsun.
load_belgeler/chunkla_belgeler— ÖğrenHub belgelerini üst üste binen (overlap) parçalara böl, her parçaya kaynak eklebenzerlik— iki vektör arası cosine (elle)indeksle— her parçayı embed etgetir— soruya en yakın top-k parçayı cosine ile bulsor— getir → bağlamlı prompt → LLM → cevap + kaynak (tek-turlu)sohbet— çok-turlu: geçmişi prompt'a ekle → cevap üret → güncellenmiş geçmişi döndürsadik_mi— hakem cevabı bağlamla puanlar; puan ≥ 4 ise cevap sadıktır
Fonksiyonların embed, llm ve hakem'i parametre olarak alır (dependency injection):
embed: metin (str) → sayı listesi (vektör). Gerçektesentence-transformersya da OpenAI embedding.llm: prompt (str) → cevap (str). Gerçekte OpenAI.hakem: prompt (str) →"1".."5"(str). Sadakat puanı üreten ikinci bir LLM (LLM-as-a-judge).- Testlerde deterministik sahte
embed/llm/hakemverilir → API key GEREKMEZ, puan hep aynı.
Aynı kod, sadece verdiğin fonksiyonlar 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/LLM/hakem ile denemek istersen cp .env.example .env + anahtarını koy (.env asla commit edilmez).