În ingineria clasică a învățării automate (Machine Learning), o rețea neuronală are nevoie de o ‘funcție de pierdere’ (Loss Function) pentru a-și actualiza ponderile prin coborârea pe gradient. În DSPy, Metrica de Evaluare joacă exact acest rol pentru modelele de limbaj.
O metrică în DSPy este o simplă funcție Python care primește trei argumente: example (datele reale de test cu eticheta corectă), pred (predicția generată de programul DSPy) și un parametru opțional trace (arborele de execuție al pașilor intermediari). Funcția returnează o valoare booleană (`True/False`) sau un scor numeric între `0.0` și `1.0`.
Puteți crea metrici compuse care evaluează multiple criterii simultan: exactitatea factuală, lungimea răspunsului, respectarea structurii JSON și chiar evaluări calitative prin apelarea unui al doilea model judecător (LLM-as-a-Judge) direct în corpul funcției.
Sintaxă, opțiuni și concepte cheie
| Opțiune / Concept | Descriere practică |
|---|---|
metric(example, pred, trace=None) |
Semnătura standard a oricărei funcții de evaluare compatibile DSPy. |
Boolean Metric (True/False) |
Scor binar utilizat în special de optimizatorul `BootstrapFewShot` pentru a filtra exemplele. |
Continuous Metric (0.0 - 1.0) |
Scor gradat esențial pentru optimizatorii bayesieni precum `MIPROv2`. |
Trace Inspection |
Capacitatea de a penaliza execuțiile dacă un pas intermediar specific a durat prea mult sau a invocat o unealtă greșită. |
Exemple practice și cod
Exemplul 1: Metrică avansată de validare a unui cod JSON și a relevanței conținutului
Cum se combină verificarea sintactică strictă cu scorul de conținut.
import json
import dspy
def metrica_json_si_continut(exemplu, predictie, trace=None):
scor = 0.0
# 1. Validăm că ieșirea este un JSON valid:
try:
date = json.loads(predictie.json_output)
scor += 0.5 # A trecut testul sintactic
except Exception:
return 0.0 # Dacă sintaxa e coruptă, scorul e zero direct
# 2. Verificăm prezența cheilor obligatorii:
if "status" in date and "raspuns" in date:
scor += 0.2
# 3. Verificăm că răspunsul conține cuvintele cheie din referință:
if exemplu.cuvant_cheie.lower() in date["raspuns"].lower():
scor += 0.3
return scor # Returnează între 0.0 și 1.0
Rezultat & Impact
Optimizatorul DSPy va forța generarea de JSON impecabil cu date relevante.
Greșeli frecvente și bune practici
- Scrierea unor metrici lente care apelează API-uri externe greoaie fără cache, ceea ce încetinește enorm faza de compilare.
- Definirea unei metrici ‘totul sau nimic’ prea rigide pe sarcini creative, împiedicând optimizatorul să detecteze îmbunătățirile incrementale.