Definirea Metricilor Personalizate de Evaluare în DSPy în DSPy & Programare Algoritmică LLM

Scrierea funcțiilor de validare matematică și semantică în Python care ghidează algoritmii de optimizare a prompturilor.

Sintaxă & invocare
def custom_metric(example, pred, trace=None) -> float/bool

Î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.

Ghiduri și noțiuni înrudite