RAG (Retrieval-Augmented Generation) Nedir? Kendi Verinle Bir LLM Nasıl Beslenir?
RAG mimarisinin temel çalışma prensibi, embedding ve vector database kavramları, ve kendi dokümanlarınla çalışan basit bir RAG sistemi kurma adımları.
RAG Nedir?
RAG (Retrieval-Augmented Generation), bir LLM'in cevap üretirken kendi eğitim verisiyle sınırlı kalmayıp, harici bir bilgi kaynağından (senin dokümanların, şirket verisi, güncel bilgiler) ilgili parçaları bulup cevabına dahil etmesini sağlayan bir mimari. Kısaca: "modelin bilmediği veya bilse bile eski/yanlış hatırlayabileceği bilgileri, cevap üretmeden hemen önce ona hatırlatmak."
Neden RAG Gerekli?
LLM'lerin iki temel kısıtı var:
- Bilgi kesim tarihi (knowledge cutoff): Model, eğitildiği tarihten sonraki olayları/bilgileri bilmiyor.
- Halüsinasyon riski: Model, bilmediği bir konuda bile kendinden emin, ama yanlış bir cevap üretebilir — özellikle spesifik, dar kapsamlı bilgi (örneğin senin şirketinin iç dokümanları) hakkında.
RAG, bu iki sorunu da hafifletiyor: model, cevap vermeden önce güncel ve doğru kaynağa "bakıyor", tahmin etmek yerine gerçek veriden alıntı yapıyor.
Temel Mimari: Üç Adım
RAG'in çalışma mantığı üç aşamaya ayrılabilir:
- Indexing (önceden yapılır): Dokümanların (PDF, wiki sayfaları, kod tabanı vb.) parçalara (chunk) bölünüp, her parçanın bir embedding (sayısal vektör temsili) çıkarılıp bir vector database'e kaydedilmesi.
- Retrieval (sorgu anında): Kullanıcının sorusu da bir embedding'e dönüştürülür, vector database'de bu embedding'e "anlamsal olarak en yakın" doküman parçaları bulunur.
- Generation (sorgu anında): Bulunan bu parçalar, kullanıcının sorusuyla birlikte LLM'e bir prompt içinde verilir — model, cevabı bu bağlamı kullanarak üretir.
Embedding Nedir?
Embedding, bir metnin anlamını sayısal bir vektöre (örneğin 1536 boyutlu bir sayı dizisi) dönüştürme işlemi. Kritik özellik: anlamsal olarak benzer metinler, vektör uzayında birbirine yakın konumlanıyor. "Köpek" ve "kedi" embedding'leri, "köpek" ve "otomobil" embedding'lerinden birbirine daha yakın olacaktır — çünkü ikisi de evcil hayvan kavramına anlamsal olarak daha yakın.
Bu sayede, kullanıcının sorusuyla birebir aynı kelimeleri içermeyen ama anlamsal olarak ilgili doküman parçaları da bulunabiliyor — klasik anahtar kelime aramasının (keyword search) yakalayamadığı bir esneklik.
Vector Database Nedir?
Embedding'ler normal bir SQL veritabanında da saklanabilir teorik olarak, ama "bu vektöre en yakın 5 vektörü bul" sorgusu, milyonlarca kayıt arasında verimli şekilde yapılması gereken özel bir işlem — bu yüzden vector database'ler (Pinecone, Weaviate, Qdrant, Chroma, veya PostgreSQL'in pgvector eklentisi gibi) bu işi optimize edilmiş algoritmalarla (örneğin HNSW - Hierarchical Navigable Small World) çok daha hızlı yapıyor.
Basit Bir RAG Sistemi Kurma Adımları
- Dokümanları böl (chunking): Uzun bir dokümanı, anlamlı boyutlarda parçalara ayır (örneğin 500-1000 karakterlik parçalar, biraz örtüşmeyle)
- Embedding çıkar: Her parça için bir embedding modeli (örneğin OpenAI'nin
text-embedding-3-small'ı veya açık kaynak bir alternatif) ile vektör üret - Vector database'e yükle: Bu vektörleri, orijinal metinle birlikte bir vector database'e kaydet
- Sorgu zamanı: Kullanıcı sorusu geldiğinde, aynı embedding modeliyle sorunun vektörünü çıkar, database'de en yakın N parçayı bul
- Prompt oluştur: Bulunan parçaları, kullanıcının sorusuyla birlikte bir prompt şablonuna yerleştir:
Aşağıdaki bağlamı kullanarak soruyu cevapla. Bağlamda cevap yoksa "Bu bilgiye sahip değilim" de.
Bağlam:
{bulunan_dokuman_parcalari}
Soru: {kullanici_sorusu}
- LLM'e gönder: Bu prompt'u modele gönder, cevabı al
Yaygın Sorunlar ve İyileştirmeler
- Chunk boyutu: Çok küçük parçalar bağlamı kaybeder, çok büyük parçalar alakasız bilgiyi de dahil eder — doğru boyut, doküman tipine göre deneyerek bulunur.
- Retrieval kalitesi: Bazen "en yakın" bulunan parçalar aslında soruyla ilgili değildir — hibrit arama (embedding + anahtar kelime arama birlikte) bu sorunu azaltabilir.
- Bağlam penceresi sınırı: Çok fazla parça bulup hepsini prompt'a eklemek, modelin bağlam penceresini (context window) taşırabilir veya alakasız bilgiyle "gürültü" yaratabilir — genelde en iyi 3-5 parça seçilir.
Gerçek Kullanım Senaryosu
Bir şirketin iç dokümantasyonunu (politikalar, teknik dökümanlar, SSS) bir RAG sistemine yüklediğini düşün. Bir çalışan "izin talep etme süreci nasıl işliyor?" diye sorduğunda, sistem önce İK politikaları dokümanından ilgili paragrafı bulup, bu paragrafı LLM'e vererek doğru, güncel ve şirkete özel bir cevap üretmesini sağlıyor — model bunu "tahmin etmiyor", gerçek kaynaktan okuyor.
Özet
RAG, bir LLM'in genel bilgisini, senin özel/güncel verinle birleştirmenin en pratik yolu. Embedding ve vector database kavramlarını anladıktan sonra, temel bir RAG sistemi kurmak aslında oldukça basit bir boru hattı (pipeline) — asıl ustalık, chunk stratejisi ve retrieval kalitesini doğru ayarlamakta yatıyor.
İlgili yazılar