dspy.Evaluate primește doar argumente cu nume: devset, metric și opțiunile de rulare. Apelul evaluate(program) rulează program(**example.inputs()) pentru fiecare exemplu, în paralel, și cheamă metrica cu exemplul și predicția. Setările din dspy.context se aplică și în firele de lucru, deci același evaluator poate compara mai multe modele.
Rezultatul este un EvaluationResult: .score este procentul de răspunsuri True (pentru metrici booleene) sau media scorurilor (pentru float și dspy.Prediction(score=...)), iar .results este lista de triplete (example, prediction, score). Argumentele vechi return_outputs și return_all_scores au fost eliminate și ridică ValueError.
Dacă metrica aruncă o excepție sau întoarce None, exemplul primește failure_score (implicit 0.0) și evaluarea continuă; max_errors oprește rularea după prea multe erori. Ghidul DSPy recomandă o evaluare de bază (baseline) înainte de orice optimizare, ca să ai un scor de comparat.
Concepte cheie și caracteristici
| Concept / Parametru | Descriere practică |
|---|---|
devset |
Lista de dspy.Example cu intrările marcate. |
metric |
Funcția de scor; poate fi dată și la apel. |
num_threads |
Numărul de fire pentru rularea în paralel. |
display_progress |
Implicit False; afișează bara de progres. |
display_table |
False (implicit), True sau un număr de rânduri de afișat. |
max_errors / provide_traceback |
Limita de erori tolerate și afișarea traceback-ului. |
failure_score |
Scorul pus când metrica eșuează; implicit 0.0. |
save_as_csv / save_as_json |
Salvează rezultatele pe exemplu într-un fișier. |
EvaluationResult.score / .results |
Scorul agregat (procent) și tripletele (example, prediction, score). |
Exemple practice și scenarii reale
Exemplul 1: Scorul de bază al unui program
import dspy
from dspy.evaluate import answer_exact_match
dspy.configure(lm=dspy.LM("openai/gpt-6-luna"))
program = dspy.ChainOfThought("question -> answer")
# val: listă de dspy.Example(question=..., answer=...).with_inputs("question")
evaluate = dspy.Evaluate(
devset=val,
metric=answer_exact_match,
num_threads=8,
display_progress=True,
display_table=5,
)
rezultat = evaluate(program)
print(rezultat.score)
Exemplul 2: Același program pe două modele
for lm in [dspy.LM("openai/gpt-6-luna"), dspy.LM("anthropic/claude-sonnet-5-5")]:
with dspy.context(lm=lm):
print(lm.model, evaluate(program).score)
Exemplul 3: Exemplele ratate
for example, pred, scor in rezultat.results:
if not scor:
print(example.question, "->", pred.answer, "| corect:", example.answer)
Greșeli frecvente și capcane
- Măsori scorul pe setul de antrenare al optimizatorului. Scorul real se măsoară pe un set de test separat.
- Ignori
failure_score. O metrică ce aruncă excepții la fiecare exemplu dă scorul 0 fără să oprească rularea; verifică cuprovide_traceback=Truesaudisplay_table. - Rulezi evaluarea de două ori și te aștepți la variație. Cache-ul este activ implicit, deci apelurile identice întorc același răspuns.
- Folosești
return_outputs=Truedin tutoriale vechi. Citește în schimbrezultat.results.