AI Engineering Academy · Ders

RAG'de Değerlendirmenin Önemi

RAG sistemlerindeki iki bağımsız başarısızlık türünü, geri getirme başarısızlığını ve oluşturma başarısızlığını anlayın; her birini teşhis etmek için neden ayrı ölçütlere ihtiyaç duyduğunuzu öğrenin.

1. ders / 413 adım

RAG'de Değerlendirmenin Önemi, CoddyKit'te ücretsiz bir AI Engineering Academy 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 Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.

Ölçmediğiniz Şeyi İyileştiremezsiniz

Bir RAG sistemi akıcı ve makul görünen yanıtlar döndürdüğü için çalışıyor gibi görünebilir. Ancak ölçüm yapmadan, gerçekten doğru parçaları getirip getirmediği veya güvenilir yanıtlar üretip üretmediği hakkında hiçbir fikriniz olmaz. Değerlendirmeyi atlayan ekipler, çoğu zaman yalnızca sezgilerine dayanarak parçalara ayırma stratejilerini ve istem biçimlerini ayarlamakla aylar geçirir; sonunda işleri daha kötü hale getirdiklerini fark ederler. Titiz değerlendirme, RAG geliştirmeyi tahminden mühendisliğe dönüştürür.

Birbirinden Bağımsız İki Hata Türü

RAG'de birbirinden bağımsız olarak başarısız olabilen iki farklı aşama vardır: erişim ve üretim. İlgili parçalar en iyi K sonuç arasında sıralanmadığında erişim başarısız olur; doğru bilgi hiç getirilmediyse LLM iyi bir yanıt üretemez. Doğru parçalar getirildiği halde LLM bunları görmezden geldiğinde, yanlış okuduğunda veya hayali bilgiler eklediğinde üretim başarısız olur. Soruna hangi bileşenin neden olduğunu belirlemek için her aşama için ayrı ölçümlere ihtiyacınız vardır.

Yalnızca Baştan Sona Değerlendirmenin Tehlikesi

Yalnızca son yanıtın kalitesini ölçmek, hataların nereden kaynaklandığını gizler. Sisteminizin zamanın %30'unda yanlış yanıt verdiğini varsayalım. Bunun nedeni erişimin doğru parçaları bulamaması mı, yoksa LLM'nin iyi parçaları görmezden gelmesi mi? Yalnızca son hata oranını biliyorsanız hangi bileşeni düzeltmeniz gerektiğini bilemezsiniz. Her iki aşamayı ayrı ayrı izleyin: erişim kalitesini altın veri kümeleriyle, üretim kalitesini ise güvenilirlik puanlarıyla ölçün.

# Diagnosis example: which stage is failing?

# Test 1: Is retrieval finding the right chunks?
retrieval_hit_rate = evaluate_retrieval(questions, ground_truth_chunks)
print(f'Retrieval hit rate@5: {retrieval_hit_rate:.1%}')
# If this is low (< 80%), fix chunking and embedding first

# Test 2: Given perfect context, does LLM generate correct answers?
generation_faithfulness = evaluate_generation(questions, perfect_context)
print(f'Generation faithfulness: {generation_faithfulness:.1%}')
# If retrieval is fine but this is low, fix your prompts

Altın Veri Kümesi Oluşturma

Değerlendirme için bir altın veri kümesi gerekir: doğru yanıtı ve ideal olarak bu yanıtın hangi belge ve parçadan geldiğini bildiğiniz soru-cevap çiftlerinden oluşan bir küme. Uygulanabilir en küçük değerlendirme kümesi için gerçek kullanıcı sorgularını temsil eden 50-100 soru toplayın. Bu soruları elle veya kaynak belgeleri okuyarak yanıtlayın. Farklı soru türlerine yer verin: olgusal bilgi aramaları, karşılaştırmalar, çok adımlı akıl yürütme ve sistemin yanıt vermeyi reddetmesi gereken alan dışı sorular.

# Golden dataset format
golden_dataset = [
    {
        'question': 'How many vacation days do employees receive in their first year?',
        'answer': '15 days',
        'relevant_chunks': ['employee_handbook_p24', 'benefits_summary_p3'],
        'source_doc': 'employee_handbook_2025.pdf'
    },
    {
        'question': 'What is the parental leave duration for primary caregivers?',
        'answer': '16 weeks fully paid',
        'relevant_chunks': ['parental_leave_policy_p1'],
        'source_doc': 'parental_leave_policy.pdf'
    }
]

LLM'lerle Altın Veri Kümeleri Oluşturma

100 soruyu elle oluşturmak zahmetlidir. Bunu bir veri üretimi LLM'si kullanarak hızlandırabilirsiniz: her belge parçasını GPT-4o'ya verin ve bu parçada yanıtı bulunabilecek 3-5 farklı soru ile beklenen yanıt metnini oluşturmasını isteyin. Kalite sorunlarını yakalamak için bir örneklemi elle inceleyin. Bu yaklaşım kısa sürede binlerce soruya ölçeklenebilir; ancak yalnızca gerçek kullanıcıların sorabileceği uç durumları gözden kaçırabilir.

def generate_qa_pairs_for_chunk(chunk_text, llm_client):
    prompt = (
        'Given the following document excerpt, generate 3 diverse questions '
        'that can be answered using ONLY this text. '
        'For each question, provide the exact answer from the text.\n\n'
        f'Text:\n{chunk_text}\n\n'
        'Format each as JSON: {"question": ..., "answer": ...}'
    )
    response = llm_client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.choices[0].message.content

Getirme Değerlendirmesi: İsabet Oranı

İsabet oranı@K, en az bir ilgili parçanın ilk K getirme sonucu içinde yer aldığı soruların oranıdır. En basit ve sezgisel getirme ölçütüdür. %85'lik bir isabet oranı@5, 100 sorunun 85'inde ilgili parçanın ilk 5 sonuç arasında olduğu anlamına gelir. Getiricinizin en çok hangi alanlarda zorlandığını bulmak için isabet oranını farklı belge türleri, sorgu uzunlukları ve konu kategorileri için ayrı ayrı izleyin.

def compute_hit_rate(golden_dataset, retriever, top_k=5):
    hits = 0
    for item in golden_dataset:
        results = retriever.retrieve(item['question'], top_k=top_k)
        retrieved_ids = {r['id'] for r in results}
        relevant_ids = set(item['relevant_chunks'])
        if retrieved_ids & relevant_ids:  # intersection not empty
            hits += 1
    hit_rate = hits / len(golden_dataset)
    print(f'Hit rate@{top_k}: {hit_rate:.1%} ({hits}/{len(golden_dataset)})')
    return hit_rate

Üretim Değerlendirmesi: Sadakat

Sadakat, üretilen yanıtın yalnızca getirilen bağlamda doğrulanabilecek bilgiler içerip içermediğini ölçer. Sadık olmayan bir yanıt, bağlamın desteklemediği gerçekleri ekler; buna halüsinasyon denir. Sadakati puanlamak için bir hakem LLM'sinin (veya insan değerlendiricinin) yanıttaki her cümleyi bağlamla karşılaştırmasını ve getirilen parçalar tarafından desteklenmeyen iddiaları işaretlemesini sağlayın. Üretim sistemleri için hedef, %95 ve üzeri sadakat puanıdır.

def evaluate_faithfulness(answer, context, llm_client):
    prompt = (
        'Given this context and answer, evaluate faithfulness.\n\n'
        f'Context: {context}\n\n'
        f'Answer: {answer}\n\n'
        'For each sentence in the answer, determine if it is '
        'supported by the context (FAITHFUL) or not (HALLUCINATED). '
        'Return a JSON: {"score": 0.0-1.0, "issues": ["sentence..."]}.'
    )
    response = llm_client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.choices[0].message.content

Üretim Değerlendirmesi: Yanıt Uygunluğu

Yanıt uygunluğu, üretilen yanıtın kullanıcının sorusunu gerçekten karşılayıp karşılamadığını ölçer. Son derece sadık bir yanıt bile, ilgili ancak farklı bir soruyu yanıtlayarak asıl noktayı kaçırabilir. Uygunluğu sadakatten ayrı ölçün. Bir hakem LLM'si kullanarak yanıtın sorulan şeyi doğrudan karşılayıp karşılamadığını 1-5 ölçeğinde puanlayın. Düşük yanıt uygunluğu genellikle istem yapısında veya getirilen bağlamın yanıtı gerçekten içermemesinde bir sorun olduğunu gösterir.

def evaluate_answer_relevance(question, answer, llm_client):
    prompt = (
        f'Question: {question}\n\n'
        f'Answer: {answer}\n\n'
        'Rate how well this answer addresses the question on a 1-5 scale:\n'
        '5 = fully answers the question\n'
        '3 = partially answers but misses key aspects\n'
        '1 = does not address the question at all\n\n'
        'Return JSON: {"score": 1-5, "reason": "brief explanation"}'
    )
    response = llm_client.chat.completions.create(
        model='gpt-4o',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.choices[0].message.content

Ölçütleri Zaman İçinde İzleme

Değerlendirme, ölçütleri değişiklik yaptıkça zaman içinde izlediğinizde en değerli hâle gelir. Değerlendirme sonuçlarını zaman damgaları ve sürüm etiketleriyle (ör. parça_boyutu=500, gömme=3-small, k=5) bir veritabanında veya elektronik tabloda saklayın. Yeni bir parçalara ayırma stratejisi ya da gömme modeli denediğinizde aynı değerlendirmeyi çalıştırıp karşılaştırın. Bu, gerilemeleri önler; sadakati artırırken farkında olmadan isabet oranını düşürebilirsiniz. Değişiklikleri üretime birleştirmeden önce her zaman tam değerlendirmeyi çalıştırın.

import json
from datetime import datetime

def save_evaluation_results(metrics, config, output_file='eval_history.jsonl'):
    record = {
        'timestamp': datetime.utcnow().isoformat(),
        'config': config,
        'metrics': metrics
    }
    with open(output_file, 'a') as f:
        f.write(json.dumps(record) + '\n')
    print(f'Saved eval result: hit_rate={metrics["hit_rate"]:.1%}, '
          f'faithfulness={metrics["faithfulness"]:.1%}')

Değerlendirme Zihniyeti

Belirli ölçütlerin ötesinde, değerlendirme bir zihniyet değişikliği gerektirir: RAG'ı, sohbet ederek öznel biçimde değerlendirdiğiniz bir sohbet robotu olarak değil, performansı ölçülebilen bir makine öğrenmesi sistemi olarak ele alın. Başarı ölçütlerini önceden tanımlayın (ör. isabet oranı@5 > %85, sadakat > %95). Sabit kalan ve geliştirme kararlarında hiçbir zaman kullanılmayan bir sınama kümesi oluşturun. Yineleme için ayrı bir geliştirme kümesi ayırın. Bu disiplin, güvenilir RAG sunan ekiplerle üretimde başarısız olan etkileyici demolar sunan ekipleri birbirinden ayırır.

Sınama Kümesi ve Geliştirme Kümesi

RAG değerlendirmesine de uygulanan, makine öğrenmesindeki kritik bir disiplin eğitim-geliştirme-sınama ayrımıdır. Sınama kümeniz tamamen sabit olmalı ve geliştirme kararları vermek için hiçbir zaman kullanılmamalıdır. Parçalara ayırma stratejilerini, istem değişikliklerini ve gömme modellerini denemek için ayrı bir geliştirme kümesi kullanın. Sınama kümesini yalnızca bir değişikliğin üretime hazır olduğuna inandığınızda çalıştırın. Bu ayrım, RAG işlem hattınızı sınama kümesine aşırı uydurmanızı önler ve son raporlanan ölçütlerinizin gerçek genelleme becerisini yansıtmasını sağlar.

import json
from sklearn.model_selection import train_test_split

def split_golden_dataset(all_questions, test_ratio=0.3, seed=42):
    dev_set, test_set = train_test_split(
        all_questions,
        test_size=test_ratio,
        random_state=seed
    )
    print(f'Dev set: {len(dev_set)} questions')
    print(f'Test set: {len(test_set)} questions (FROZEN)')
    with open('eval/dev_set.json', 'w') as f:
        json.dump(dev_set, f, indent=2)
    with open('eval/test_set.json', 'w') as f:
        json.dump(test_set, f, indent=2)
    return dev_set, test_set

Kısa Kontrol

Bu dersteki Yapay Zekâ Mühendisliği kavramlarını anlayıp anlamadığınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: ayrı ölçütler gerektiren getirme ve üretimdeki birbirinden bağımsız iki başarısızlık modu; nesnel değerlendirme için soru-yanıt-parça üçlülerinden oluşan altın veri kümesinin nasıl oluşturulacağı; temel getirme ölçütü olarak isabet oranı ile temel üretim ölçütleri olarak sadakat ve yanıt uygunluğu; ayrıca gerilemeleri önlemek için ölçütleri zaman içinde izlemenin önemi. Sırada MRR ve NDCG dahil belirli getirme ölçütlerini uygulayacağız.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Python öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“RAG'de Değerlendirmenin Önemi” dersi ücretsiz mi?

Evet — “RAG'de Değerlendirmenin Önemi” 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 Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.

“RAG'de Değerlendirmenin Önemi” dersinde ne öğreneceğim?

RAG sistemlerindeki iki bağımsız başarısızlık türünü, geri getirme başarısızlığını ve oluşturma başarısızlığını anlayın; her birini teşhis etmek için neden ayrı ölçütlere ihtiyaç duyduğunuzu öğrenin. AI Engineering Academy 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 Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, 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.

“RAG'de Değerlendirmenin Önemi” 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 Engineering Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her AI Engineering Academy 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.

Bu kursun tüm dersleri

  1. RAG'de Değerlendirmenin Önemi
  2. Geri Getirme Ölçütleri: İsabet Oranı, MRR ve NDCG
  3. Oluşturma Ölçütleri: Sadakat ve Yanıt Uygunluğu
  4. Otomatik Değerlendirme Düzeneği Oluşturma
← AI Engineering Academy Sayfasına Dön