Ne oldu, nasıl gelişti?
### 1. RAG Mimarisinin 4 Temel Aşaması 1. **İçerik Parçalama (Chunking):** PDF, Word veya HTML dökümanları anlamsal bütünlüğü bozmayacak şekilde 500-1000 token'lık parçalara (chunks) bölünür. Parçalar arasına %10-15 overlap (örtüşme) eklenir. 2. **Vektörleştirme (Embedding):** Her metin parçası çok dilli bir embedding modeli (örn: `bge-m3` veya `text-embedding-3-small`) ile 1024 veya 1536 boyutlu sayısal vektörlere dönüştürülür. 3. **Vektör Veritabanı Kaydı:** Sayısal vektörler ChromaDB, Qdrant veya Milvus gibi vektör veritabanlarında HNSW indeksleme algoritmasıyla saklanır. 4. **Sorgulama ve Üretim:** Kullanıcı bir soru sorduğunda soru da vektörleştirilir; veritabanında en yakın anlamlı 3-5 parça (Cosine Similarity ile) bulunur ve LLM'e 'Bağlam (Context)' olarak verilerek yanıt ürettirilir.
### 2. Python ve LangChain ile Minimalist Kod Mimarisi ```python from langchain_community.document_loaders import PyPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.vectorstores import Chroma from langchain_community.embeddings import OllamaEmbeddings from langchain_community.llms import Ollama
# 1. Dokümanı Yükle ve Böl loader = PyPDFLoader("sirket_politikasi.pdf") docs = loader.load() splitter = RecursiveCharacterTextSplitter(chunk_size=700, chunk_overlap=100) chunks = splitter.split_documents(docs)
# 2. Vektör Veritabanı Oluştur embeddings = OllamaEmbeddings(model="bge-m3") vector_db = Chroma.from_documents(chunks, embeddings, persist_directory="./chroma_db")
# 3. Benzerlik Araması ve Cevap query = "Yıllık izin devir şartları nelerdir?" retrieved_docs = vector_db.similarity_search(query, k=3) context = " ".join([d.page_content for d in retrieved_docs]) prompt = f"Yalnızca şu bağlama göre soruyu cevapla: {context}
Soru: {query}" ```
### 3. Halüsinasyonu Sıfıra İndirme Taktikleri - **Prompt Guard:** Modèle 'Eğer verilen metinde cevap yoksa tahmin yürütme, bilmiyorum de' kuralını kesin olarak verin. - **Reranking:** Vektör aramasından dönen ilk 10 sonucu `Cohere Rerank` veya `FlashRank` gibi çapraz kodlayıcılarla yeniden puanlayarak en alakalı ilk 3'e indirin. - **Metadata Filtreleme:** Döküman parçalarına tarih, departman ve yetki etiketi ekleyerek sadece ilgili yetki düzeyindeki verilerin taranmasını sağlayın.