Örnek sorular
Rag Generation ContextZorluk 1
Bir RAG pipeline'ında retrieval, aday chunk'ları seçer; ancak zaten retrieve edilmiş bu chunk'ların hangi sırayla, nasıl filtrelenip biçimlendirilerek modele ulaşacağına ayrı bir adım karar verir. Bu adıma genellikle ne denir?
- aContext assembly (bağlam derleme)✓
- bRetrieval yeniden puanlama
- cQuery expansion (sorgu genişletme)
- dIndex oluşturma
Açıklama:Context assembly, retrieval ile generation arasında asıl prompt'u kuran adımdır: chunk sırasını, filtrelemeyi ve biçimlendirmeyi belirler. Retrieval yeniden puanlama arama sırasında adayları yeniden sıralar; query expansion kullanıcının sorgusunu retriever için yeniden yazar; index oluşturma ise herhangi bir sorgu gelmeden önce, embedding'ler saklanırken yapılır.
Rag Generation ContextZorluk 1
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
instruction = (
"Answer the user's question using only the information in the "
"context below. If the context does not contain the answer, "
"say you don't know."
)
print(len(enc.encode(instruction)))
Bu ne yazdırır?
Açıklama:Bu talimat metnini yukarıdaki tokenizer ile encode etmek 29 token verir (snippet çalıştırılarak doğrulandı). Herhangi bir retrieve edilmiş chunk eklenmeden önce, bu sabit talimat maliyeti soyut context bütçesinden düşülmelidir.
Rag Generation ContextZorluk 2
Yukarıdaki sistem talimatı 29 token, kullanıcı sorgusu 10 token, retrieve edilen üç chunk sırasıyla 26, 28 ve 28 token tutuyor (hepsi aynı tokenizer ile sayıldı). Bu istek için soyut context bütçesi 120 token ise, üç chunk da eklendiğinde ne olur?
- aHepsi sığar, 1 token pay kalır
- bHepsi tam olarak 120 token'da sığar
- cSığmaz — toplam 121 token, bütçeyi 1 token aşıyor✓
- dSığmaz — toplam 132 token, bütçeyi 12 token aşıyor
Açıklama:29 + 10 + 26 + 28 + 28 = 121, bu da 120 token'lık bütçeyi 1 token aşıyor demektir. Bu içeriğin sığması için en az bir chunk (ya da sorgu/talimat) kısaltılmalı ya da bir chunk düşürülmelidir.
Rag Generation ContextZorluk 2
Aynı sabit yükle (talimat 29 + sorgu 10 = 39 token) ve 120 bütçeyle, chunk'lar sırayla tek tek eklenir (26, 28, 28 token) ve bir chunk yalnızca ekleme sonrası toplam bütçe içinde kalıyorsa tutulur. Üç chunk'tan kaçı sonunda dahil edilir ve nihai çalışan toplam nedir?
- a3 chunk, 121 token
- b1 chunk, 65 token
- c0 chunk, 39 token
- d2 chunk, 93 token✓
Açıklama:39 + 26 = 65 (sığar), 65 + 28 = 93 (sığar), 93 + 28 = 121 (120'yi aşar, bu yüzden bu chunk düşürülür ve döngü durur). Yani 2 chunk dahil edilir, nihai çalışan toplam 93 token'dır.
Rag Generation ContextZorluk 1
Bir context-assembly döngüsü token bütçesine yaklaşmış durumda ve sıradaki aday chunk yalnızca kısmen sığacak. Standart uygulama nedir?
- aChunk'ı tamamen düşür, yalnızca bütün chunk'ları tut✓
- bKalan bütçeyi doldurmak için chunk'ı cümle ortasından kes
- cEklemeden önce chunk'ı anlık olarak özetle
- dKalan bütçeyi tüm chunk'lara eşit paylaştır
Açıklama:Bir chunk'ı cümle ortasından kesmek, tam da ihtiyaç duyulan bilgiyi kesip anlamsız bir parça eklemek riskini taşır. Temel context assembly'de standart yaklaşım, ya bütün chunk ya hiç ilkesidir: tam sığmayan chunk kesilmez, atlanır.
Rag Generation ContextZorluk 2
Bir RAG sistemi, hepsi doğru şekilde alakalı olan 7 chunk'ı prompt'a derliyor. En önemli tek chunk, 4. pozisyonda (ortada) yer alıyor. Modelin cevabı bu chunk'taki bilgiyi kaçırıyor. En olası açıklama nedir?
- aChunk'ın embedding'i retrieval sırasında bozulmuştur
- bUzun bir context'te pozisyon, o chunk'a verilen dikkati azaltmıştır✓
- cChunk chunk-başına token limitini aşmış ve sessizce düşürülmüştür
- dRetrieval o chunk'ı hiç bulamamıştır
Açıklama:Bu, "lost in the middle" (ortada kaybolma) etkisidir: hem retrieval hem assembly doğru çalışmıştır (chunk prompt'ta mevcuttur), ama uzun bir context'in ortasındaki konumu onun cevapta kullanılma olasılığını düşürür — bu bir retrieval hatası değil, dikkat/pozisyon sorunudur.