Bu proje, Microsoft Foundry Local ve RAG (Retrieval-Augmented Generation) mimarisi kullanılarak geliştirilmiş, tamamen yerel (çevrimdışı) ve gizlilik odaklı bir Soru-Cevap (Q&A) asistanıdır.
İnternet bağlantısına veya bulut API'lerine ihtiyaç duymadan, sağlanan yerel dokümanları okur, indeksler ve kullanıcının sorularına %100 yerel kaynaklara dayalı yanıtlar üretir.
Günümüzdeki bulut tabanlı yapay zeka çözümleri (ChatGPT, Claude vb.) şirket içi gizli dokümanların veya kişisel verilerin işlenmesi için güvenlik riskleri taşır. Bu proje;
- Veri Gizliliği: Hiçbir verinin dışarı çıkmadığı (On-Premise),
- Çevrimdışı Çalışma: İnternet bağımlılığının olmadığı,
- Halüsinasyon Direnci (Zero-Hallucination): LLM'in sadece ve sadece okuduğu yerel belgelere (bağlama) sadık kaldığı, bilgi yoksa uydurmak yerine "Bilgi bulunamadı." diyebilen bir çözüm sunar.
Proje, 4 temel RAG adımını yerel olarak simüle eder:
- Veri Alma & Parçalama (Hybrid Semantic Chunking): Dokümanlar (
.txtveya.pdf), anlam bütünlüğü korunarak paragraf bazlı (çift satır atlama) yöntemle ayrılırken, CPU şişmelerini önlemek içinmax_words=70güvenlik sübabıyla hibrit olarak parçalanır (ingest.py). - Embedding (Gömme): Parçalar,
qwen3-embedding-0.6bmodeli ile sayısal vektörlere dönüştürülür. - Vektör Veritabanı: Vektörler, hafif ve sunucusuz bir çözüm olan SQLite üzerinde depolanır (
database.py). - Retrieval & Generation (Sentezleme): Kullanıcı sorusu vektörize edilir, Kosinüs Benzerliği (Cosine Similarity) ile en yakın bağlam çekilir (
top_k=1). Çekilen bağlam, Microsoft Foundry Local üzerinde çalışanPhi-3.5-minimodeline sıkı bir "Sistem Komutu (System Prompt)" ile verilerek cevap üretilir (app.py).
- Python 3.9 veya üzeri
- Microsoft Foundry Local SDK (
pip install foundry-local-sdk) - Streamlit (
pip install streamlit) - Numpy & PyPDF2
- Belgeleri Yükleme: Sorgulanmasını istediğiniz dokümanları (
.txtveya.pdf) projedekidocs/klasörünün içine atın. - Veritabanını Oluşturma (İndeksleme):
Terminalde şu komutu çalıştırarak belgelerin hibrit yöntemle parçalanıp vektör veritabanına (SQLite) kaydedilmesini sağlayın:
python ingest.py
- Kullanıcı Arayüzünü Başlatma:
Streamlit arayüzünü ayağa kaldırmak için şu komutu çalıştırın:
Tarayıcınızda açılan ekranda asistana belgelerle ilgili sorular sorabilirsiniz.
streamlit run app_ui.py
Streamlit arayüzünde, asistanın verdiği her yanıtın altında "Okunan Kaynak Bağlamı (RAG)" adında bir açılır menü bulunur. Bu menüye tıklayarak asistanın o cevabı üretmek için veritabanından hangi metin bloklarını çektiğini (Kosinüs Benzerliği sonuçlarını) şeffaf bir şekilde görebilirsiniz.
Bu projeyi geliştirirken kısıtlı donanımlarda (yalnızca CPU) RAG sistemlerini optimize etmek için kritik ve yenilikçi mühendislik kararları alınmıştır:
- Hibrit Parçalama (Hybrid Chunking): Sadece sabit kelime limitine göre (Fixed-Size) kesmek bağlam kanamasına yol açtığı için önce çift satır atlamaya (paragrafa) göre anlamsal bir bölme yapıldı. Büyük PDF bloklarında işlemcinin kilitlenmesini önlemek için ise
max_words=70limitiyle çalışan bir güvenlik mekanizması entegre edildi. - Ekstrem Hız Modu (CPU Optimizasyonu): Veritabanı izolasyonu kusursuz hale getirildiği için, modelin okuması gereken parça sayısı
top_k=1seviyesine düşürüldü. Bu sayede işlemci yükü hafifletilerek yanıt süresi donanımın elverdiği minimum fiziksel sınırlara çekildi. - Recency Bias (Son Saniye Eğilimi) Kalkanı: Küçük dil modellerinin sistem komutlarını unutma eğilimine karşı, "Bilgi uydurma" yasağı
system_promptyerine, doğrudan kullanıcı sorusunun bir milisaniye öncesine enjekte edilerek %100 halüsinasyon direnci sağlandı. - Truncation (Kesinti) Koruması: Küçük modellerin iki nokta (
:) işaretini durma komutu olarak algılaması ve listeleri yarıda kesmesi engellendi.max_tokensgenişletilerek ve modele "eksiksiz okuma" talimatı verilerek veri kaybının önüne geçildi.
Sistemin verimliliğini ve halüsinasyon direncini ölçmek için hazırlanan otomatik test süreci 5/5 başarı oranıyla tamamlanmıştır.
| Soru | Asistan Yanıtı | Durum |
|---|---|---|
| Berq Bank amacı nedir? | P2P para transferi sağlamaktır. | Başarılı |
| RAG akışı nasıldır? | Embedding -> Similarity -> Retrieval -> Generation | Başarılı |
| Berq Bank dilleri? | Java ve Spring Boot | Başarılı |
| SyllabusAI özellikleri? | Müfredat dinamiği, etkileşimli asistan, optimizasyon | Başarılı |
| Türkiye'nin başkenti? | Bilgi bulunamadı. | Başarılı |
Not: 5. soru, sistemin dış bilgiye kapalı olduğunu ve bağlam dışı konularda halüsinasyon üretmediğini kanıtlamak için özel olarak eklenmiştir.
Bu proje, Microsoft Foundry Local Yaz Okulu programı kapsamında geliştirilmiştir.



