İçeriğe geç

RAG her derde deva mı?

7 yıllık bir çalışanın yıllık izni kaç iş günü?
İngilizce, logların yazdığı gibi: “How many working days of annual leave does an employee with 7 years of service get?”
→ 24 iş günü [1] ✓
chroma · section · rerank on · sürüm 2026

Günün sorusu çözüldü. Her şey yolunda mı? Gün boyunca pipeline’ın dört farklı şekilde yanıldığını gördük.

Dört yanılma, dördü de bu günün loglarında1 · Retriever“holiday” (q02): doğru bölüm 5. sıradasoru dokümanın kelimelerini kullanmıyor2 · Chunkfixed: “| 7 | 22 |” başlığından ayrıldı→ “… at most 7 working days [1].”3 · LLMmaaş sorusu, maaş chunk’ı yok (filtre)“bilmiyorum” yok → “… 4,000 TRY per night [2].”4 · Contexthepsi prompt’ta: 9954 token, RAG 976num_ctx ayarımız 8192’ye sığmıyorRAG’in başarısı =retriever doğruluğuq02: 5. sırada×chunk kalitesifixed: “at most 7 … [1]”×LLM’in anlamasıbaşka soruyu cevapladıcontext’in boyu çarpan değil, bedel · yanlış cevapta önce prompt’a bak
  1. Bir çarpım; ilk çarpan retriever

    RAG’in başarısı bir çarpım: retriever × chunk × LLM. Biri sıfırsa sonuç sıfır. “How much holiday do I get?” sorusu (q02) dokümanın kelimelerini kullanmıyor. İzin tablosu vektör sırasında 5. Onu ilk 3’e ancak rerank sokuyor.

  2. Chunk: başlığını kaybeden satır

    Her 300 karakterde sabit bir kesim. | 7 | 22 | satırı başlığını kaybetti ve prompt’a giremedi. §4 ise girdi: yoğun sezonda tek seferde en fazla 7 iş günü izin kullanılabilir. Cevap: “An employee with 7 years of service gets at most 7 working days [1].” Yanlış sayı, üstelik kaynaklı.

  3. LLM: bilmiyorum demesi gerekirken

    Maaş sorusu: filtre maaş chunk’ını dışarıda tuttu. Bu iyi. Kural açık: kaynakta yoksa “This is not in the policies.” yaz. Model yazmadı. Şunu yazdı: “The hotel upper limit for a senior specialist is 4,000 TRY per night [2].” Kaynak doğru, soru yanlış.

  4. Context: bedel

    Dördüncüsü bir çarpan değil, bir bedel. El kitabının tamamı 9954 token. RAG’in 3 chunk’ı 976. Büyük context’in bedeli her soruda ödenir. Cevap yanlış mı? Önce --prompt ile prompt’a bakın.

Dört yanılmanın logları bu sitenin sayfalarında: retriever için Kaliteyi ölçmek (q02), chunk için B · Chunking, LLM için Güvenlik (filtre açık), context için Performans ve maliyet.

LLM çarpanının bir hikâyesi daha: tablo okumak. Tabloyu ve prompt’u küçük bir model için biçimlendirdik:

  1. İzin tablosunda her kıdem yılı ayrı bir satır: | 7 | 22 |.
  2. Kaynak işaretinde yalnızca doküman adı var; id ve bölüm numarası yok.
  3. Prompt’ta tablolar için bir kural var: “If the answer comes from a table, first write the row you used word for word. Then give the answer in one sentence.”
  4. Model bu kuralın ilk yarısına uymuyor. Günün sorusunun cevabı satırı yazmadan geliyor: “An employee with 7 years of service gets 22 working days of annual leave [1].” Prompt’taki bir kural, modelin ona uyacağı anlamına gelmez. Prompt’u ve cevabı F sayfasında görebilirsiniz.
  5. Bugünkü loglarda tablo soruları doğru. Küçük bir model tablo okumada kırılgandır: veriyi ve prompt’u ona göre biçimlendirin, yine de ölçün.

Hepsi aynı iskelet: bul, ekle, yaz. Fark, “bul” adımının ne kadar akıllı ve ne kadar pahalı olduğunda.

1 · Naive RAGSoruEmbedtop-kLLMCevapbugün kurduğumuz iskelet2 · Reranker RAGSoruEmbedtop-5Rerankeren iyi 3LLMburada kurduk · 5 LLM çağrısı · günün sorusunda 1500 ms3 · Multi-query RAGSoruyeniden yaz3 soru3 aramabirleşimLLMölçmedik4 · RAG-fusionSoruyeniden yaz3 soru3 aramabirleştirLLMölçmedik
  1. Bugün kurduklarımız: naive ve reranker

    Naive: soruyu embed ederiz. En yakın k chunk soruyla birlikte modele gider. Reranker: aradaki bir sıralama adımı en iyi 3’ü seçer. Her aday için bir LLM çağrısı harcar. Rerank açıkken q02 doğru.

  2. Multi-query ve RAG-fusion

    Multi-query: model soruyu birkaç biçimde yeniden yazar, her biriyle ayrı arar, sonuçları birleştirir. RAG-fusion listeleri sıralarına göre puanlar. İkisi de çağrı ekler. Önce naive RAG’i ölçün. Eval’da hata yoksa yeni tür de yok.

Hiçbirini burada ölçmedik. Her biri belirli bir hatayı düzeltir ve bir bedeli vardır:

Tür Hangi hatayı düzeltir Bedeli
Hybrid (kelime + vektör) Birebir eşleşmesi gereken kodlar, numaralar, e-posta adresleri; embedding’in bulanıklaştırdığı kelimeler İkinci bir indeks ve iki listeyi birleştirme. İngilizce soruyla Türkçe doküman arasında kelimelerin çoğu tutmaz; kısaltmalar, adlar ve adresler ise iki dilde aynı yazılır. Bizim 4 EN→TR sorumuzda vektör araması tek başına hit@1 1.00 verdi.
HyDE Soru ile doküman farklı yazılmış (“holiday” ↔ “annual paid leave”; bu soru eval’da 5. sırada) Soru başına bir LLM çağrısı: model önce varsayımsal bir cevap yazar, arama o cevapla yapılır. Varsayımsal cevaptaki uydurma rakam aramayı yanlış yöne çekebilir.
Parent-child Küçük chunk iyi bulunur ama kötü okunur (başlığını kaybeden tablo satırı) İki boyda chunk ve aralarındaki bağ; küçükle aranır, büyük olan prompt’a girer. Prompt büyür.
Agentic RAG Birkaç dokümana yayılan, birkaç parçalı sorular Model soruyu böler, her parça için ayrı arar, “yeterli mi?” diye sorar. Bir yerine birçok çağrı; süre tur sayısıyla çarpılır, iki koşu farklı sonuç verebilir.
GraphRAG Cevabın dokümanlar arasındaki bağda olduğu sorular (duyuru, yan haklar politikasının §2’sindeki tutarı günceller) ve “hepsini özetle” soruları Ingest’te bütün corpus modelden geçer, varlık–ilişki grafı çıkarılır ve bakımı yapılır. En pahalısı.

Bu türlerin hangi durumda ve hangi sırayla eklendiğinin hikâyesi: İlk 90 gün.

Hangi türle başlamalı?

Naive RAG ve bir gold set ile. Eval’da bir soru tipi düşük çıkınca (bizde tablo ve paraphrase soruları) o hatayı düzelten türü ekleyin, sonra aynı eval’ı tekrar koşun.

Retriever × chunk × LLM: biri sıfırsa gerisi kurtaramaz.