Modül 3 · Prompt Evaluation · ⏱ 7 dakika

Eval'i çalıştırmak

Running the eval

Orijinal İngilizce video — Anthropic Academy / JWPlayer. Aşağıdaki Türkçe metin dersi birebir özetler.

Bu modül için tahmini süre: 7 dakika

Genel bakış

Evaluation dataset’imiz hazır olduğuna göre artık çekirdek evaluation pipeline’ını kurma zamanı. Bu, her test case’i alıp prompt’umuzla birleştirmeyi, Claude’a feed etmeyi ve ardından sonuçları grade etmeyi içerir.

Evaluation süreci net bir workflow izler: test case dataset’imizi alırız, her birini prompt template’imizle birleştiririz, işleme için Claude’a göndeririz ve sonra bir grader sistemi kullanarak output’u değerlendiririz.

Çekirdek fonksiyonları kurmak

Evaluation pipeline’ı, her birinin belirli bir sorumluluğu olan üç ana fonksiyondan oluşur. En basitten başlayalım — tek bir prompt’u işleyen fonksiyon.

run_prompt fonksiyonu

Bu fonksiyon bir test case alır ve prompt template’imizle birleştirir:

def run_prompt(test_case):
    """Merges the prompt and test case input, then returns the result"""
    prompt = f"""
Please solve the following task:

{test_case["task"]}
"""
    
    messages = []
    add_user_message(messages, prompt)
    output = chat(messages)
    return output

Şimdilik prompt’u son derece basit tutuyoruz. Herhangi bir formatlama talimatı eklemediğimiz için Claude muhtemelen ihtiyacımızdan daha verbose output döndürecek. Prompt tasarımımızda iterasyon yaparken bunu daha sonra rafine edeceğiz.

run_test_case fonksiyonu

Bu fonksiyon tek bir test case’i çalıştırmayı ve sonucu grade etmeyi orkestre eder:

def run_test_case(test_case):
    """Calls run_prompt, then grades the result"""
    output = run_prompt(test_case)
    
    # TODO - Grading
    score = 10
    
    return {
        "output": output,
        "test_case": test_case,
        "score": score
    }

Şimdilik 10 olarak hard-code edilmiş bir score kullanıyoruz. Grading mantığı, ilerleyen bölümlerde üzerinde önemli zaman harcayacağımız yer ama bu placeholder genel pipeline’ı test etmemize izin veriyor.

run_eval fonksiyonu

Bu fonksiyon tüm evaluation sürecini koordine eder:

def run_eval(dataset):
    """Loads the dataset and calls run_test_case with each case"""
    results = []
    
    for test_case in dataset:
        result = run_test_case(test_case)
        results.append(result)
    
    return results

Bu fonksiyon dataset’imizdeki her test case’i işler ve tüm sonuçları tek bir liste halinde toplar.

Evaluation’ı çalıştırmak

Pipeline’ımızı çalıştırmak için dataset’imizi yükleyip fonksiyonlarımızdan geçiririz:

with open("dataset.json", "r") as f:
    dataset = json.load(f)

results = run_eval(dataset)

Bunu ilk çalıştırdığınızda biraz vakit alacağını bekleyin — Claude Haiku ile bile tam bir dataset’i işlemek 30 saniye kadar sürebilir. Optimizasyon tekniklerini daha sonra ele alacağız.

Sonuçları incelemek

Evaluation, her objenin bir test case sonucunu temsil ettiği yapısal bir JSON array döndürür:

print(json.dumps(results, indent=2))

Her sonuç üç temel bilgi içerir:

  • output: Claude’tan gelen tam yanıt
  • test_case: işlenen orijinal test case
  • score: evaluation puanı (şu an hard-code)

Output’ta görebileceğiniz gibi, henüz spesifik formatlama talimatları sağlamadığımız için Claude oldukça verbose yanıtlar üretiyor. Bu tam da prompt’larımızı rafine ederken ele alacağımız türde bir sorun.

Şimdiye kadar ne yaptık

Bu noktada çekirdek evaluation pipeline’ını başarıyla kurduk. Dataset’imizi alıp Claude’tan geçirebiliyor ve yapısal sonuçlar toplayabiliyoruz. Eksik olan büyük parça grading sistemi — o hard-code’lanmış 10 puanın gerçek evaluation mantığıyla değiştirilmesi gerekiyor.

Bu pipeline çoğu AI evaluation sisteminin temelini temsil eder. Basit görünse de aslında bir eval pipeline’ının yaptığı işin büyük çoğunluğunu kurdunuz. Karmaşıklık detaylarda yatıyor — daha iyi prompt’lar, sofistike grading ve performans optimizasyonları.

Bir sonraki bölümde grader’lar konusuna dalacağız; bu, hard-code’lanmış puanlarımızı Claude’un performansının anlamlı değerlendirmelerine dönüştürecek.

Temel çıkarımlar

  • Eval pipeline üç temel fonksiyon ile modüler kurulur: run_prompt, run_test_case, run_eval
  • İlk versiyonda grader yerine sabit puan (örn. 10) kullanmak, pipeline’ı uçtan uca test etmek için pratik bir tekniktir
  • Her test case sonucu output, test_case ve score alanlarını içeren bir dict olarak saklanır — sonraki analiz için kritik yapı
  • Bir dataset’i Haiku ile bile baştan sona çalıştırmak ~30 saniye sürebilir; bu yüzden parallelization ve caching ileride önemli olur
  • Bir sonraki adım: hard-code’lanmış puanı gerçek grader’la değiştirmek