DSPy İş Akışlarını Değerlendirme
Otomatik değerlendirme için ölçütler, geliştirme kümeleri ve evaluate() işlevi.
DSPy İş Akışlarını Değerlendirme, CoddyKit'te ücretsiz bir AI Prompt Engineering dersidir. Bu, 4 dersinin 4. 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.
DSPy Optimizasyonu Neden Önemlidir
DSPy optimizasyonu, değerlendirmeniz ne kadar iyiyse ancak o kadar iyidir. Zayıf bir ölçüt, o ölçütte iyi puan alan ancak üretim ortamında başarısız olan derlenmiş bir program ortaya çıkarır. Uygun bir değerlendirme düzeneği, optimize edilmemiş ve optimize edilmiş programları karşılaştırmanıza ve işlem hattınızı güncellediğinizde gerilemeleri yakalamanıza olanak tanır.
dspy.Evaluate Sınıfı
dspy.Evaluate, programınızı bir veri kümesi üzerinde çalıştırır, bir ölçüt uygular ve toplu puanları bildirir. Büyük veri kümeleri üzerinde hızlı değerlendirme yapmak için num_threads aracılığıyla paralelliği destekler.
import dspy
# Build a devset of labeled examples
devset = [
dspy.Example(question='What is 7 * 8?', answer='56').with_inputs('question'),
dspy.Example(question='Name the largest planet.', answer='Jupiter').with_inputs('question'),
# ... more examples
]
# Create evaluator
evaluate = dspy.Evaluate(
devset=devset,
metric=exact_match_metric, # Your metric function
num_threads=4, # Parallel evaluation
display_progress=True, # Show progress bar
display_table=True, # Show per-example results
)
# Run
score = evaluate(my_program)
print(f'Overall score: {score:.1%}')Ölçüt İşlevleri Yazma
Ölçüt işlevlerinin imzası (example, prediction, trace=None) -> float şeklindedir. Programın tahminini, example içindeki gerçek referansla karşılaştırırlar.
Optimizasyon sırasında (değerlendirme sırasında değil) trace parametresi None değildir; derleme ve değerlendirme sırasında farklı mantık uygulamak için bunu kullanabilirsiniz.
import dspy
def exact_match_metric(example, prediction, trace=None):
return float(
example.answer.strip().lower() == prediction.answer.strip().lower()
)
def contains_metric(example, prediction, trace=None):
"""Check if expected answer appears anywhere in prediction."""
return float(example.answer.lower() in prediction.answer.lower())
def length_penalized_metric(example, prediction, trace=None):
"""Reward correct answers, penalize overly long ones."""
correct = float(example.answer.lower() in prediction.answer.lower())
length_ok = float(len(prediction.answer.split()) <= 20)
return correct * (0.8 + 0.2 * length_ok)
# Use any of these as the metric parameter
evaluate = dspy.Evaluate(devset=devset, metric=contains_metric)Başarılı/Başarısız Eşiği Kalıpları
İkili ölçütler için bir eşik tanımlayabilirsiniz: Bir tahmin, asgari kalite eşiğini karşılıyorsa “başarılı” sayılır. Bu, önyükleme optimizasyonu sırasında az örnekli tanıtım örneklerini filtrelemek için kullanışlıdır.
import dspy
def quality_metric(example, prediction, trace=None):
"""
Multi-factor metric with pass/fail threshold.
Returns float 0.0 to 1.0.
During compilation (trace is not None), DSPy uses this to decide
which traces to bootstrap as demos.
"""
score = 0.0
# Factor 1: Factual correctness (0.6 weight)
if example.answer.lower() in prediction.answer.lower():
score += 0.6
# Factor 2: Conciseness (0.4 weight)
word_count = len(prediction.answer.split())
if word_count <= 15:
score += 0.4
elif word_count <= 30:
score += 0.2
# During optimization: only use examples scoring >= 0.6
if trace is not None:
return score >= 0.6
return scoreVerileri Bölme: Eğitim, Geliştirme, Sınama
DSPy'de standart makine öğrenimi veri bölme uygulamalarını izleyin:
- Eğitim kümesi: Optimizasyon aracı tarafından tanıtım örneklerini önyüklemeyle oluşturmak için kullanılır (20-200 örnek)
- Geliştirme kümesi: Arama sırasında doğrulama için optimizasyon aracı tarafından kullanılır
- Sınama kümesi: Tamamen ayrı tutulur; yalnızca son değerlendirme için kullanılır
import random
# All labeled examples
all_examples = load_examples() # Returns list of dspy.Example
random.shuffle(all_examples)
total = len(all_examples)
train_end = int(total * 0.6)
dev_end = int(total * 0.8)
trainset = all_examples[:train_end] # 60% for optimization
devset = all_examples[train_end:dev_end] # 20% for validation
testset = all_examples[dev_end:] # 20% held out
print(f'Train: {len(trainset)}, Dev: {len(devset)}, Test: {len(testset)}')Optimize Edilmiş ve Optimize Edilmemiş Programları Karşılaştırma
Derlenmiş programınızı her zaman aynı sınama kümesinde temel programla (derlenmemiş programla) karşılaştırmalı olarak ölçün. Bu, optimizasyonun gerçekten yarar sağladığını kanıtlar ve iyileşmeyi nicelendirir.
import dspy
evaluate = dspy.Evaluate(
devset=testset,
metric=exact_match_metric,
num_threads=4,
display_progress=True,
)
# Baseline: unoptimized program
baseline_score = evaluate(unoptimized_program)
print(f'Baseline (no optimization): {baseline_score:.1%}')
# BootstrapFewShot compiled
bs_score = evaluate(bootstrap_compiled_program)
print(f'BootstrapFewShot compiled: {bs_score:.1%}')
# MIPRO compiled
mipro_score = evaluate(mipro_compiled_program)
print(f'MIPRO compiled: {mipro_score:.1%}')
# Pick the winner
print(f'Best improvement: +{max(bs_score, mipro_score) - baseline_score:.1%}')num_threads ile Paralellik
Büyük değerlendirme kümelerinin sıralı işlenmesi saatler sürebilir. dspy.Evaluate içindeki num_threads, tahminleri paralel olarak çalıştırarak gerçek geçen süreyi orantılı biçimde azaltır.
num_threads değerini API hız sınırlarınızla eşleştirin; çok fazla iş parçacığı hız sınırı hatalarını tetikler.
import dspy
import time
devset = [...] # 200 examples
# Sequential evaluation
start = time.time()
evaluate_seq = dspy.Evaluate(devset=devset, metric=metric, num_threads=1)
score_seq = evaluate_seq(program)
print(f'Sequential: {time.time()-start:.0f}s')
# Parallel evaluation (4 threads)
start = time.time()
evaluate_par = dspy.Evaluate(devset=devset, metric=metric, num_threads=4)
score_par = evaluate_par(program)
print(f'Parallel (4 threads): {time.time()-start:.0f}s')
# Typically ~4x faster — same score, less wait timeDeğerlendirme Çıktısını Yorumlama
display_table=True olduğunda DSPy, her örneği, tahmini ve örneğin ölçütü geçip geçmediğini gösteren ayrıntılı bir tablo sunar. Bu, başarısızlık kalıplarını teşhis etmek için son derece değerlidir.
Şunları arayın: belirli bir soru türündeki sistematik başarısızlıklar, ölçüt sınır durumları veya eğitim kümenizin kapsamadığı örnekler.
import dspy
evaluate = dspy.Evaluate(
devset=devset,
metric=exact_match_metric,
num_threads=2,
display_progress=True,
display_table=10, # Show first 10 rows of results table
return_outputs=True, # Return (score, outputs) tuple
)
score, outputs = evaluate(program, return_all_scores=True)
# Find failing examples
failures = [
(ex, pred, s)
for ex, pred, s in outputs
if s == 0.0
]
print(f'Failures: {len(failures)}/{len(devset)}')
for ex, pred, _ in failures[:3]:
print(f'Q: {ex.question}')
print(f'Expected: {ex.answer}')
print(f'Got: {pred.answer}')LLM Tarafından Puanlanan Ölçütleri Kullanma
Birebir eşleşmenin başarısız olduğu açık uçlu çıktılarda kaliteyi puanlamak için bir LLM kullanın. DSPy bunu kolaylaştırır; ölçüt işleviniz kendisi bir DSPy tahmincisi çağırabilir.
import dspy
class GradeAnswer(dspy.Signature):
"""Grade whether the predicted answer is correct given the reference."""
question: str = dspy.InputField()
reference_answer: str = dspy.InputField()
predicted_answer: str = dspy.InputField()
is_correct: bool = dspy.OutputField(
desc='True if the predicted answer is semantically correct'
)
grader = dspy.Predict(GradeAnswer)
def llm_graded_metric(example, prediction, trace=None):
result = grader(
question=example.question,
reference_answer=example.answer,
predicted_answer=prediction.answer,
)
return float(result.is_correct)
# Use this metric when answers can vary in phrasing
evaluate = dspy.Evaluate(devset=devset, metric=llm_graded_metric)Değerlendirmeyle Gerileme Sınaması
DSPy değerlendirme paketinizi bir sınama paketi gibi ele alın. İmzanızı, modül mimarinizi veya eğitim verilerinizi her güncellediğinizde değerlendirmeyi yeniden çalıştırın ve gerilemeleri yakalamak için puanları karşılaştırın.
import json
import dspy
def run_and_save_evaluation(program, program_name, testset, metric):
evaluate = dspy.Evaluate(
devset=testset,
metric=metric,
num_threads=4,
)
score = evaluate(program)
# Save score to history file
history_file = 'eval_history.json'
try:
with open(history_file) as f:
history = json.load(f)
except FileNotFoundError:
history = []
history.append({'program': program_name, 'score': score})
with open(history_file, 'w') as f:
json.dump(history, f, indent=2)
print(f'{program_name}: {score:.1%}')
return scoreDeğerlendirme İçin En İyi Uygulamalar
DSPy işlem hatları için temel değerlendirme ilkeleri:
- Sınama kümenizi kesinlikle ayrı tutun; üzerinde asla optimizasyon yapmayın
- Güvenilir puanlar elde etmek için en az 50-100 sınama örneği kullanın
- Ölçütünüzü gerçek üretim hedefinizle eşleştirin
- Birden çok optimizasyon aracını karşılaştırın; sonuçlar göreve göre değişir
- Gerilemeleri tespit etmek için puanları zaman içinde izleyin
- Eğitim verilerinizi iyileştirmek için başarısızlıkları elle inceleyin
Bilgi Kontrolü: Ölçüt İşlevindeki Trace Parametresi
Bir DSPy ölçüt işlevinde None olmayan trace parametresi neyi gösterir?
Özet: DSPy İşlem Hatlarını Değerlendirme
dspy.Evaluate, programınızı etiketli bir geliştirme kümesi üzerinde çalıştırır, bir ölçüt işlevi uygular ve toplu puanları bildirir. Ölçüt işlevleri (example, prediction, trace=None) -> float kalıbını izler. Paralel değerlendirme için num_threads, başarısızlıkları teşhis etmek için display_table=True kullanın. Optimize edilmiş ve optimize edilmemiş programları her zaman ayrı tutulmuş bir sınama kümesinde karşılaştırın. Açık uçlu çıktılarda, LLM tarafından puanlanan ölçütler birebir dize eşleştirmesinden daha iyi sonuç verir.
Sıkça Sorulan Sorular
“DSPy İş Akışlarını Değerlendirme” dersi ücretsiz mi?
Evet — “DSPy İş Akışlarını Değerlendirme” 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.
“DSPy İş Akışlarını Değerlendirme” dersinde ne öğreneceğim?
Otomatik değerlendirme için ölçütler, geliştirme kümeleri ve evaluate() işlevi. 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 4. dersidir.
“DSPy İş Akışlarını Değerlendirme” 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.
Bu kursun tüm dersleri
- DSPy Çerçevesine Giriş
- İmzaları ve Modülleri Tanımlama
- İstemleri Derleme ve İyileştirme
- DSPy İş Akışlarını Değerlendirme