dspy.Evaluate: scorul unui program pe un set de date în DSPy & Programare Algoritmică LLM

Evaluare și Testare Nivel: începător

dspy.Evaluate rulează un program pe un set de exemple, în paralel, aplică metrica fiecărei predicții și întoarce scorul agregat și rezultatele pe exemplu.

Sintaxă & invocare
evaluate = dspy.Evaluate(devset=devset, metric=metrica, num_threads=8)
rezultat = evaluate(program)

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ă cu provide_traceback=True sau display_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=True din tutoriale vechi. Citește în schimb rezultat.results.

Noțiuni și module înrudite