
Ne Yapacağız?
PDF veya metin dosyalarınızı okuyup, sorularınıza sadece o belgelere dayanarak cevap veren bir asistan. Buna RAG (Retrieval-Augmented Generation) deniyor.
Kod:
Akış
------------------------------------------
1. Belgeleri parçalara böl (chunk)
2. Her parçayı sayısal vektöre çevir (embedding)
3. Soruyu da vektöre çevir
4. En benzer parçaları bul
5. Parçaları modele bağlam olarak ver
6. Cevabı üret
Kurulum
Bash:
pip install sentence-transformers faiss-cpu pypdf
sentence-transformers: metni vektöre çevirir, ücretsiz ve yerelde çalışır.
faiss: milyonlarca vektör arasında saniyeler içinde benzerlik araması yapar.
pypdf: PDF'ten metin çıkarır.
faiss: milyonlarca vektör arasında saniyeler içinde benzerlik araması yapar.
pypdf: PDF'ten metin çıkarır.
Belgeleri Okuma ve Parçalama
Python:
from pypdf import PdfReader
def metni_al(dosya):
okuyucu = PdfReader(dosya)
return "\n".join(sayfa.extract_text() or "" for sayfa in okuyucu.pages)
def parcala(metin, boyut=500, ortusme=50):
parcalar = []
i = 0
while i < len(metin):
parcalar.append(metin[i:i + boyut])
i += boyut - ortusme
return parcalar
Vektörleştirme ve İndeks
Python:
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2")
parcalar = parcala(metni_al("belge.pdf"))
vektorler = model.encode(parcalar, normalize_embeddings=True)
indeks = faiss.IndexFlatIP(vektorler.shape[1])
indeks.add(np.array(vektorler))
Arama Fonksiyonu
Python:
def ara(soru, k=3):
soru_vec = model.encode([soru], normalize_embeddings=True)
skorlar, indisler = indeks.search(np.array(soru_vec), k)
return [parcalar[i] for i in indisler[0]]
Cevap Üretme
Python:
def cevapla(soru):
baglam = "\n---\n".join(ara(soru))
istem = f"""Aşağıdaki belge parçalarına dayanarak soruyu cevapla.
Bilgi belgede yoksa "Belgede bulamadım" de.
BELGE:
{baglam}
SORU: {soru}
CEVAP:"""
return istem # Bu istemi tercih ettiğiniz dil modeline gönderin
Bulut API'leri (kolay, ücretli) veya yerel modeller (Ollama ile ücretsiz ama donanım ister). Başlangıçta bulut API ile prototipleyip sonra yerele geçmek en pratik yol.
Kalite Artıran 5 İyileştirme
- Parça boyutunu ayarlayın: 300-800 karakter arası deneyin, içeriğe göre değişir.
- Metadata ekleyin: Hangi dosya, hangi sayfa — kaynak gösterebilirsiniz.
- Yeniden sıralama (reranking): İlk 20 sonucu alıp daha güçlü bir modelle sıralayın.
- Soruyu genişletin: Eş anlamlılarla arama isabetini artırın.
- Kaynak gösterin: Cevabın hangi parçadan geldiğini kullanıcıya söyleyin — güven artar.
Ne Zaman RAG, Ne Zaman İnce Ayar?
Kod:
Durum Yöntem
--------------------------- ---------------
Sık değişen belgeler RAG
Güncel bilgi gerekiyor RAG
Kaynak göstermek gerekiyor RAG
Belirli bir üslup/format İnce ayar
Çok özel alan terminolojisi İkisi birlikte