0Pricing
AI Prompt Engineering · Lezione

Valutare la scelta

Misurare qualità e costi.

Valutare la scelta è una lezione AI Prompt Engineering gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento AI Prompt Engineering, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso AI Prompt Engineering include 4 lezioni in totale.

Non si può decidere ciò che non si può misurare

La scelta tra prompt, fine-tuning e sistema ibrido è valida solo quanto la valutazione su cui si basa. Senza un set di valutazione fisso e un modello dei costi, ogni confronto si riduce a un aneddoto.

  • Qualità e costi sono due assi: non li riduca mai prematuramente a un unico numero
  • Il set di valutazione deve essere escluso dall'addestramento e rimanere invariato per ogni approccio confrontato
  • Il vincitore è l'approccio che occupa il punto migliore della frontiera qualità-costi in base ai Suoi vincoli

Crei prima il set di valutazione fisso

Prima di confrontare qualsiasi soluzione, costruisca un set di valutazione escluso dall'addestramento. Deve coprire la distribuzione reale: casi comuni, casi limite noti e input avversari, in proporzioni simili a quelle della produzione.

Lo blocchi. Ogni approccio — solo prompt, fine-tuning, sistema ibrido — viene valutato sullo stesso set identico. Se il set cambia tra un confronto e l'altro, i numeri non sono comparabili e la decisione non è valida.

def split_eval(labeled, holdout_ratio=0.2, seed=42):
    import random
    rng = random.Random(seed)        # fixed seed = reproducible split
    data = labeled[:]
    rng.shuffle(data)
    cut = int(len(data) * (1 - holdout_ratio))
    train, frozen_eval = data[:cut], data[cut:]
    return train, frozen_eval        # eval never enters any training run

Scelga metriche coerenti con il compito

L'accuratezza generica nasconde gli errori specifici del compito. Scelga metriche che catturino ciò che conta davvero:

  • Corrispondenza esatta/allo schema per l'output strutturato
  • LLM-as-judge con punteggio secondo una rubrica per la qualità a risposta aperta, con un campione verificato da persone
  • Metriche di coda: caso peggiore e p95, non solo la media
  • Tassi di risposte sicure/rifiuto come criteri vincolanti, valutati separatamente dalla qualità

Un punteggio medio che nasconde una coda catastrofica porterà alla decisione sbagliata.

Valuti ogni candidato allo stesso modo

Esegua la valutazione del solo prompt, del modello sottoposto a fine-tuning e del sistema ibrido con lo stesso valutatore sullo stesso set fisso. Registri la qualità insieme al vettore completo dei costi per ciascuno, così da ottenere confronti omogenei.

def evaluate(candidate, frozen_eval, scorer):
    results = []
    for ex in frozen_eval:
        out = candidate.run(ex['input'])
        results.append(scorer(out, ex['label']))
    mean = sum(results) / len(results)
    p95 = sorted(results)[int(0.95 * len(results)) - 1]
    return {'mean': mean, 'p95_worst': p95}

# Identical frozen_eval + scorer for prompt / tuned / hybrid

Modelli il vettore completo dei costi

Il costo non è un unico numero. Acquisisca ogni componente, così che il confronto rifletta la realtà al volume previsto:

  • Inferenza per chiamata: token di input + output moltiplicati per il prezzo (i prompt lunghi costano di più a ogni chiamata)
  • Costo di addestramento ammortizzato: costo del fine-tuning distribuito sul volume previsto di richieste
  • Manutenzione: pipeline dei dati, esecuzioni della valutazione, nuovo fine-tuning quando cambia il modello di base
  • Latenza: da considerare separatamente quando incide sulla conversione o sulla UX
def monthly_cost(calls, in_tok, out_tok, price_in, price_out,
                 train_cost=0.0, months_amortized=12):
    inference = calls * ((in_tok/1000)*price_in + (out_tok/1000)*price_out)
    amortized_train = train_cost / months_amortized
    return inference + amortized_train

# Long prompt-only: high in_tok, train_cost=0
# Tuned: low in_tok, train_cost>0 amortized over volume

Tracci la frontiera qualità-costi

Con la qualità e il costo mensile di ogni candidato, lo posizioni su una frontiera. Un candidato è dominato se un altro ha sia una qualità superiore sia un costo inferiore; elimini quelli dominati.

Tra i candidati non dominati, la scelta giusta dipende dal vincolo: scelga il più economico che supera la soglia di qualità, oppure la qualità più alta entro il limite di costo. La decisione è ora esplicita e difendibile, non una questione di preferenze.

def non_dominated(candidates):
    # candidate: {'name','quality','cost'} -- higher quality, lower cost better
    keep = []
    for c in candidates:
        dominated = any(o['quality'] >= c['quality'] and o['cost'] <= c['cost']
                        and o != c for o in candidates)
        if not dominated:
            keep.append(c)
    return keep

Significatività statistica, non rumore

Un miglioramento di due punti su una valutazione di 200 esempi potrebbe essere rumore. Prima di proclamare un vincitore, verifichi che il divario di qualità sia statisticamente significativo considerando la dimensione del set di valutazione.

Usi un confronto appaiato (gli stessi esempi passati a entrambi i candidati) e un intervallo di confidenza sulla differenza. Se l'intervallo include lo zero, non si dispone di un miglioramento reale e il costo aggiuntivo del fine-tuning non è giustificato.

def paired_diff_ci(scores_a, scores_b):
    import statistics
    diffs = [a - b for a, b in zip(scores_a, scores_b)]
    mean = statistics.mean(diffs)
    sd = statistics.pstdev(diffs)
    se = sd / (len(diffs) ** 0.5)
    return (mean - 1.96*se, mean + 1.96*se)  # if it spans 0 -> not significant

Eviti il data leakage nel set di valutazione

Il modo più rapido per far sembrare il fine-tuning falsamente efficace è il data leakage: esempi di addestramento che si sovrappongono al set di valutazione. Un set contaminato premia la memorizzazione e gonfia il punteggio del candidato sottoposto a fine-tuning.

Deduplichi i dati tra addestramento e valutazione, controlli la presenza di quasi duplicati e preferisca un set di valutazione separato temporalmente (escluso in base alla data), così che il modello sottoposto a fine-tuning non possa averlo già visto. Il data leakage è la causa più comune di una decisione sul fine-tuning che fallisce in produzione.

Monitori dopo il rilascio

Il lancio non rende definitiva la decisione. La distribuzione in produzione cambia e un modello sottoposto a fine-tuning può degradarsi silenziosamente quando gli input si allontanano dalla distribuzione di addestramento.

  • Campioni il traffico reale e lo valuti con la stessa rubrica
  • Imposti avvisi sui cali di qualità e sull'aumento del costo per chiamata
  • Ripeta la valutazione sul set fisso ogni volta che cambia la versione del modello di base

Consideri l'approccio scelto un'ipotesi sottoposta a verifica continua, non una decisione definitiva.

Registro della decisione

Raccolga il confronto in un registro della decisione: il set di valutazione fisso, la qualità e il vettore dei costi di ogni candidato, il risultato della significatività, il volume ipotizzato e il punto scelto sulla frontiera, con la relativa motivazione.

In questo modo la scelta è verificabile e può essere rivalutata. Quando cambiano il volume o il modello di base, riapra il registro e ripeta la valutazione, invece di ridiscutere tutto basandosi sulla memoria.

Funzione decisionale end-to-end

Colleghi tutti gli elementi: valuti ogni candidato sul set fisso, associ il relativo costo, elimini le opzioni dominate, richieda una differenza significativa rispetto al baseline più economico, quindi scelga in base al vincolo determinante.

def decide(candidates, quality_bar, cost_ceiling):
    frontier = non_dominated(candidates)
    feasible = [c for c in frontier
                if c['quality'] >= quality_bar and c['cost'] <= cost_ceiling]
    if not feasible:
        return 'NO_CANDIDATE_MEETS_CONSTRAINTS'
    # cheapest option that clears the quality bar
    return min(feasible, key=lambda c: c['cost'])['name']

# Prefer prompt-only on ties: lower maintenance TCO

Verifica rapida

Un modello sottoposto a fine-tuning ottiene un punteggio superiore di 2 punti rispetto al prompting su una valutazione di 150 esempi, ma un intervallo di confidenza appaiato sulla differenza include lo zero. Inoltre, costa di più al mese. Qual è la decisione corretta?

Riepilogo

Decida sulla base di un set di valutazione fisso e di un vettore dei costi realistico, non dell'intuizione. Qualità e costi sono due assi; la risposta è un punto sulla frontiera qualità-costi, scelto in base al vincolo determinante.

  • Blocchi un unico set di valutazione e valuti ogni candidato allo stesso modo
  • Scelga metriche adatte al compito e osservi la coda, non solo la media
  • Modelli il vettore completo dei costi e ammortizzi il fine-tuning sul volume reale
  • Richieda la significatività statistica; un CI che include lo zero non indica alcun miglioramento
  • Prevenga il data leakage nel set di valutazione: è la causa principale delle vittorie illusorie del fine-tuning
  • Monitori dopo il rilascio e registri la decisione, così da poterla ripetere

Domande Frequenti

La lezione «Valutare la scelta» è gratuita?

Sì — il testo completo di «Valutare la scelta» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso AI Prompt Engineering, passa a CoddyKit PRO. Il corso AI Prompt Engineering include 4 lezioni in totale.

Cosa imparerò in «Valutare la scelta»?

Misurare qualità e costi. Eserciti AI Prompt Engineering con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare AI Prompt Engineering?

Non è richiesta alcuna esperienza precedente. AI Prompt Engineering su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Valutare la scelta»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione AI Prompt Engineering?

Sì. Ogni lezione AI Prompt Engineering include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Quando basta il prompting
  2. Quando usare il fine-tuning
  3. Ibrido: prompt e tuning leggero
  4. Valutare la scelta
← Torna a AI Prompt Engineering