RAG kısaca
RAG (getirerek zenginleştirilmiş üretim), modele bir soru sormadan önce o soruyla ilgili belgeleri bulup isteğe eklemek. Model böylece eğitimde görmediği bilgiyle cevap veriyor. Temel terimleri yapay zekâ kavramları yazımızda anlattık.
Önce şunu sor: RAG’e gerçekten ihtiyacın var mı? Anthropic’in önerisi şöyle: Bütün bilgi 200 bin token’ın (yaklaşık 500 sayfa) altındaysa, hepsini doğrudan isteğe koymak daha basit olabilir. Prompt önbelleği bunu ucuzlatıyor. RAG, daha büyük veri için.
Videodaki örnek
Better Stack, LangChain ile orijinal Star Wars üçlemesinin senaryolarını bilen bir “uzman” kuruyor. Senaryolar internetten çekiliyor ve parçalara bölünüyor. Her parça OpenAI’ın embedding modeliyle bir vektöre çevrilip yerelde çalışan Qdrant’a yazılıyor. Soru gelince en yakın 15 parça bulunuyor ve modele “sadece bu parçalara göre cevap ver” deniyor. Kod GitHub’da açık.
İlk hata: Kötü parçalama
Bütün senaryoyu tek parça yapmak cazip, ama yanlış. Model yüzlerce sayfanın içinden tek bir repliği bulmak zorunda kalıyor. Hem yavaş, hem pahalı. Üstelik “Lost in the Middle” çalışması, modellerin uzun bir metnin ortasındaki bilgiyi baştaki ve sondakine göre daha sık kaçırdığını gösterdi.
Çözüm küçük parçalar, ama doğal sınırlardan. Videoda LangChain’in “recursive” bölücüsü önce sahne başlıklarından (INT., EXT.) bölüyor. Sahne 2.500 karakteri aşarsa boş satıra, sonra satıra, en son boşluğa iniyor. Parçalar arasında 250 karakterlik örtüşme (overlap) bırakılıyor ki sınırdaki bilgi kaybolmasın. Ders genel: Verinin kendi yapısını kullan. Senaryoda sahne, dokümantasyonda başlık, kodda fonksiyon.
Vektör araması tek başına yetmeyebilir
Embedding anlamı yakalıyor ama tam eşleşmede zayıf kalabiliyor. Bir hata kodu, bir fonksiyon adı ya da ürün numarası arıyorsan klasik kelime araması BM25 daha iyi iş çıkarıyor. İkisini birlikte çalıştırıp sonuçları birleştirmeye karma arama (hybrid search) deniyor. Qdrant gibi vektör veritabanları bunu doğrudan destekliyor.
Bir adım daha var: yeniden sıralama (reranking). Önce geniş bir aday listesi (örneğin 150 parça) alıyorsun, sonra daha yavaş ama daha isabetli bir model bunları soruya göre yeniden puanlıyor. Modele sadece en iyi 20’si gidiyor. Anthropic, buna her parçanın başına belgedeki yerini anlatan kısa bir bağlam eklemeyi de katınca, doğru parçanın ilk 20’de bulunamama oranının %5,7’den %1,9’a indiğini ölçtü. Videodaki örnekte bu adımlar yok.
Sıkı prompt, kaçan cevaplar
Videonun en öğretici anı şu: “Luke Skywalker kim?” sorusuna model “bilgi yok” diyor. Çünkü senaryoda Luke’u tanımlayan tek bir satır yok, getirilen parçalar dolaylı. Prompt’a “kısmen bilgi varsa elindekiyle en iyi cevabı ver” eklenince düzeliyor, ama senaryoda olmayan Darth Maul için hâlâ “bilgi yok” diyor. Sıkı kurallar uydurmayı azaltıyor ama faydalı cevapları da kesebiliyor.
Videoda “önceki talimatları unut” denemesi de var ve model direniyor. Bu tek bir deneme. Asıl risk OWASP’ın dolaylı prompt injection dediği şey: Getirilen belgelerin içine gömülü talimatlar. İndekslediğin veriye ne kadar güvendiğini düşün.
Ölçmeden iyileştiremezsin
Videoda kalite birkaç soru elle sorularak kontrol ediliyor. Daha sağlam yol, “bu soru, şu parçayla cevaplanır” çiftlerinden küçük bir test seti kurmak ve doğru parçanın ilk k sonuçta çıkıp çıkmadığını ölçmek (recall@k). Parça boyutu, örtüşme, karma arama, yeniden sıralama gibi her değişikliği bu setle karşılaştır. Vektör aramanın büyük ölçekte nasıl çalıştığını FineWeb yazımızda anlattık.
Düşün
- Senin verinde “doğal sınır” ne: başlık mı, paragraf mı, kayıt mı?
- Sistemin yanlış parçayı getirdiğinde bunu nasıl fark edersin?
Videoyu izle
Kaynaklar (7, İngilizce)
- Better Stack: How to Build a RAG System That Actually Works (video) (yeni sekmede açılır)
- GitHub: andrisgauracs/Star-Wars-Movie-Expert (yeni sekmede açılır)
- LangChain Docs: Recursive text splitter (yeni sekmede açılır)
- Anthropic: Introducing Contextual Retrieval (yeni sekmede açılır)
- Liu et al.: Lost in the Middle: How Language Models Use Long Contexts (yeni sekmede açılır)
- Qdrant Docs: Hybrid and multi-stage queries (yeni sekmede açılır)
- OWASP GenAI: LLM01 Prompt Injection (yeni sekmede açılır)
Kendi cümlelerimizle yazılmış bir özettir, çeviri değildir. Tüm kaynaklar yukarıda.