Naif RAG'ın Ötesi
Temel bilgi almanın sınırlamaları.
Naif RAG'ın Ötesi, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Prompt Engineering öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
Naif RAG Ne Yapar
Naif RAG temel çizgidir: belgeleri parçalara ayırır, vektörleştirir, vektörleri depolar, sorguyu vektörleştirir, kosinüs benzerliğine göre en iyi k parçayı getirir, parçaları isteme doldurur ve çıktı üretir. Güçlü bir başlangıç noktasıdır ve büyük ölçekte öngörülebilir şekillerde başarısız olur.
Bu başarısızlık türlerini anlamak, bu kursta ele alınan gelişmiş tekniklerin (yeniden sıralama, sıkıştırma, sorguyu yeniden yazma) ön koşuludur.
def naive_rag(query, k=5):
q = embed(query)
chunks = vector_store.search(q, k) # top-k by cosine
context = '\n\n'.join(c.text for c in chunks)
return llm('Context:\n' + context + '\n\nQ: ' + query)Getirme Duyarlılığı ve Kesinlik
Naif top-k, gerçek alaka düzeyiyle yüzeysel anlamsal yakınlığı birbirine karıştıran ham vektör benzerliğini eniyiler. Bir ikilemle karşılaşırsınız: küçük bir k yanıtı kaçırma riski taşır (düşük duyarlılık); büyük bir k ise bağlamı dikkat dağıtıcılarla doldurur (düşük kesinlik).
Getirmeyi yönlendiren gömme benzerliği, gerçek alaka düzeyinin kaba bir göstergesidir ve sonraki aşamalardaki birçok sorunun kökünde yer alır.
# The core dilemma
# small k -> may miss the gold chunk (recall problem)
# large k -> distractors crowd context (precision + cost problem)
# Advanced RAG decouples 'retrieve many' from 'use few'Gömme Uyuşmazlığı Sorunu
Sorgular ve belgeler çoğu zaman farklı dilsel üsluplarda bulunur: kısa bir soru ile uzun, bildirimsel bir pasaj. Çift kodlayıcı gömmeleri, farklı ifade edildikleri için ilgili bir yanıtı sorudan uzağa yerleştirebilir (sözcük dağarcığı uyuşmazlığı sorunu).
Bu durum, getirmeden önce sorguyu belge uzayına uyacak şekilde yeniden şekillendiren sorguyu yeniden yazma ve HyDE gibi teknikleri gerekli kılar.
# Query: 'how do I revoke a token?'
# Doc: 'Token invalidation is performed via the /sessions endpoint.'
# Lexically and semantically distant -> bi-encoder may miss it
sim = cos(embed('how do I revoke a token?'),
embed('Token invalidation via /sessions')) # may be lowOrtada Kaybolma
Doğru parça getirilse bile çok sayıda parçayı bağlama doldurmak ortada kaybolma etkisini tetikler: model, uzun bir bağlamın ortasına yerleştirilen içeriğe yeterince odaklanmaz. 10 parçanın 3. sırasında gömülü doğru bir parça fiilen göz ardı edilebilir.
Bu durum yeniden sıralamayı (en iyi parçayı modelin dikkat ettiği yere koymak) ve sıkıştırmayı (hiçbir şeyin gömülmemesi için bağlamı küçültmek) gerekli kılar.
# Retrieval rank != attention rank
# Place the highest-relevance chunk at the START or END,
# never stranded in the middle of a large concatenation.Dikkat Dağıtıcılara Duyarlılık
LLM modelleri ilgisiz bağlama duyarlıdır. Akla yatkın ama yanlış parçalar eklemek, doğru parça da mevcut olsa bile yanıtı rotasından çıkarabilir. Getirilen bağlamın daha fazla olması her zaman daha iyi değildir.
Bu nedenle kesinlik önemlidir: sıkı, yeniden sıralanmış ve sıkıştırılmış bir bağlam, çoğu zaman gevşekçe ilişkili parçaların büyük bir yığınına üstün gelir.
# Empirically: appending a single highly-similar but WRONG chunk
# can flip a previously-correct answer. RAG quality depends on
# keeping distractors OUT, not just getting the gold chunk IN.Parçalama Sorunları
Sabit boyutlu parçalama fikirleri cümlenin ortasında böler, bir iddiayı kanıtından ayırır ve yapısal bağlamı (hangi bölüm, hangi belge) koparır. Tek başına okunduğunda tutarlı görünen bir parça, çevresi olmadan işe yaramaz veya yanıltıcı olabilir.
Gelişmiş işlem hatları anlamı korumak için yapı duyarlı parçalama, örtüşme, ana belgeye genişletme ve üst veriler kullanır.
def structure_aware_chunks(doc, max_tokens=400, overlap=50):
sections = split_by_headings(doc) # respect document structure
chunks = []
for sec in sections:
for c in sliding_window(sec.text, max_tokens, overlap):
chunks.append(Chunk(c, meta={'section': sec.title}))
return chunksYalnızca Anlamsal Getirmenin Eksikleri
Salt yoğun getirme tam eşleşme gereksinimlerini kaçırır: tanımlayıcılar, hata kodları, nadir özel adlar ve API adları. Bunlar, kullanıcıların tam sözcük düzeyinde doğruluk beklediği durumlardır. Karma getirme, her ikisini de kapsamak için yoğun (anlamsal) ve seyrek (BM25/anahtar kelime) sinyalleri birleştirir.
Karşılıklı sıra birleştirme, bir ağırlığı ayarlamadan iki sıralı listeyi birleştirmenin basit ve sağlam bir yoludur.
def rrf(dense_ranks, sparse_ranks, k0=60):
scores = {}
for ranks in (dense_ranks, sparse_ranks):
for rank, doc_id in enumerate(ranks):
scores[doc_id] = scores.get(doc_id, 0) + 1.0 / (k0 + rank)
return sorted(scores, key=scores.get, reverse=True)Eski ve Doğrulanamaz Bağlam
Naif RAG'nin güncellik veya kaynak izlenebilirliği kavramı yoktur. Güncelliğini yitirmiş belgeleri getirebilir ve iddiaları kaynaklara bağlamak için yerleşik bir yol sunmaz; bu durum güveni zedeler ve halüsinasyonları saptamayı zorlaştırır.
Gelişmiş sistemler üst veriler (zaman damgası, kaynak, sürüm) ekler, bunlara göre filtreler ve yanıtların doğrulanabilir olması için üreticinin parça kimliklerine atıf yapmasını zorunlu kılar.
def filtered_retrieve(q, after_date):
cands = vector_store.search(embed(q), k=50)
fresh = [c for c in cands if c.meta['date'] >= after_date]
return fresh # then re-rank; generator must cite c.idGeri Bildirim Yoksa Uyarlama Yok
Naif RAG körlemesine getirir: getirmenin başarısız olduğunu anlayamaz, hiçbir getirmeye gerek olmadığını belirleyemez ve yineleme yapamaz. Gelişmiş örüntüler bir alaka denetimi, koşullu getirme ve sonuçlar zayıf göründüğünde sorguyu yeniden biçimlendiren çok adımlı (etmen tabanlı) getirme ekler.
İşlem hattı, tek bir ileri geçiş yerine öz değerlendirme yapan bir döngüye dönüşür.
def adaptive_rag(q):
chunks = retrieve(q)
if relevance_score(q, chunks) < 0.4:
q2 = rewrite_query(q) # reformulate and retry
chunks = retrieve(q2)
if relevance_score(q, chunks) < 0.4:
return 'I could not find this in the sources.'
return generate(q, chunks)Gelişmiş RAG Yığını
Başarısızlıkları bir araya getirdiğimizde gelişmiş bir işlem hattı şu katmanları içerir: üst verilerle birlikte yapı duyarlı parçalama, yüksek duyarlılığa sahip karma getirme, kesinlik için bir çapraz kodlayıcı yeniden sıralayıcı, sığdırmak ve odaklamak için bağlam sıkıştırma, uyuşmazlığı düzeltmek için sorguyu yeniden yazma / HyDE ve atıflı bir alaka geçidi.
Sonraki dersler her katmanı oluşturur. Ortak çizgi şudur: geniş kapsamlı biçimde getirin, ardından agresif biçimde filtreleyip iyileştirin.
def advanced_rag(q):
cands = hybrid_retrieve(rewrite_query(q), k=50) # high recall
top = rerank(q, cands)[:8] # precision
ctx = compress(q, top) # focus + fit
return generate_with_citations(q, ctx) # verifiableEn İyi Duruma Getirmeden Önce Ölçün
Gerçekte hangi başarısızlığın bulunduğunu ek araçlar eklemeden önce diagnose edin. getirme duyarlılığını@k (referans parçanın hiç getirilip getirilmediği) yanıt doğruluğundan (üreticinin onu kullanıp kullanmadığı) ayrı olarak ölçün. Duyarlılık sorunu ile kesinlik sorunu farklı düzeltmeler gerektirir.
Her iki yarıyı da ölçümleyin; asıl sorununuz parçalama veya sorgu uyuşmazlığıyken sonradan bir yeniden sıralayıcı eklemeyin.
def diagnose(eval_set):
return {
'recall@5': recall_at_k(eval_set, k=5), # retrieval health
'recall@50': recall_at_k(eval_set, k=50), # ceiling with rerank
'answer_acc': answer_accuracy(eval_set), # generation health
}Hızlı Kontrol
Bir RAG başarısızlık türünü diagnose edin.
Özet
Önemli çıkarımlar:
- Naif RAG (parçala, vektörleştir, en iyi k sonucu getir, doldur, üret), öngörülebilir başarısızlıkları olan güçlü bir temel çizgidir.
- Çift kodlayıcı benzerliği kaba bir alaka göstergesidir; sorgu ve belge üsluplarındaki uyuşmazlık duyarlılığı düşürür.
- Daha fazla bağlam daha iyi değildir: dikkat dağıtıcılara duyarlılık ve ortada kaybolma etkisi, k büyüdükçe yanıtları kötüleştirir.
- Parçalama sorunları, yalnızca anlamsal getirmenin eksikleri, güncelliğini yitirme ve geri bildirim eksikliği naif RAG'yi sınırlar.
- Gelişmiş RAG geniş kapsamlı biçimde getirir, ardından filtreler: karma getirme, yeniden sıralama, sıkıştırma, sorguyu yeniden yazma ve alaka geçitleme. Eniyilemeden önce duyarlılığı ve yanıt doğruluğunu ayrı ayrı ölçün.
Sıkça Sorulan Sorular
“Naif RAG'ın Ötesi” dersi ücretsiz mi?
Evet — “Naif RAG'ın Ötesi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Prompt Engineering kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Prompt Engineering kursu toplamda 4 dersten oluşur.
“Naif RAG'ın Ötesi” dersinde ne öğreneceğim?
Temel bilgi almanın sınırlamaları. AI Prompt Engineering ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Prompt Engineering öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Prompt Engineering, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Naif RAG'ın Ötesi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Prompt Engineering dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Prompt Engineering dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.