Salta al contenuto
20/30Capitolo 20 di 30

Fine-Tune, retrieval o prompt? La decisione è economica

La stessa domanda di supporto risposta in tre modi e prezzata end to end. Il fine-tuning vince solo oltre 492 token di prompt eliminati.

In questa pagina

Ecco una domanda di supporto — qual è la versione minima di Node prevista da questo progetto? — risposta in quattro modi sulla stessa documentazione, e prezzata end to end.

routetoken inviaticosto di una risposta
tutta la documentazione nel prompt, senza cache43.311$0,066317
tutta la documentazione nel prompt, cached43.311$0,007864
i quattro estratti migliori, retrieved1.037$0,002906
un model fine-tuned, senza alcuna documentazione28$0,002088

Il fine-tune è il più economico. È anche, per questo problema, la risposta sbagliata — e entrambe le cose si possono mostrare con la stessa aritmetica, invece che con un’opinione.

Tre numeri in quella tabella contraddicono già il consiglio che leggerai ovunque. Attivare la cache ha risparmiato l’88 % per domanda e, a cento domande al mese, rende la stessa route cinque volte più costosa. Il retrieval invia quarantadue volte meno token della route con prompt cached e costa solo 2,7 volte meno. E il model fine-tuned, ridotto a un prompt da ventotto token, risparmia appena il 28 % rispetto al retrieval — perché il 97 % di ciò che paga è la risposta, e il training non accorcia le risposte.

Capitolo 16 ha costruito una funzione di costo per leggere una fattura. Qui la stessa funzione decide un’architettura.

Mostra dettagli

Ciò che questo capitolo richiede dai precedenti.

  • Capitolo 11 ha costruito LoRA e QLoRA come tecnica: che cos’è un adapter low-rank, perché addestra ordini di grandezza meno parametri. Questo capitolo non lo rispiega mai e lo prezza soltanto.
  • Capitolo 16 ha costruito computeCost, i cinque bucket fatturabili e la regola del prefix per il prompt caching. Il foglio costi qui sotto è quella funzione con tre route inserite.
  • Capitolo 19 ha costruito il retriever: chunking con header contestuale, ricerca ibrida, quattro slot di estratto, citazioni. Questo capitolo lo riusa e misura quanto costa eseguirlo, non come funziona.

Tutto qui è TypeScript, perché si parla di tariffe, aritmetica e contabilità, senza un tensor in vista — con una sola eccezione, dichiarata dove accade: per scoprire cosa insegna davvero il fine-tuning, questo capitolo fine-tunes un model, e quella parte è in Python.

"Dovremmo fare fine-tuning?" viene chiesto come se fosse una domanda su un model. È una domanda su un budget, con una forma a cui nessun benchmark risponde: cosa si paga una volta, cosa si paga per domanda e cosa si ripaga ogni volta che il mondo si muove.

Le tre route inoltre non sono tre modi di fare una sola cosa, e i vendor lo dicono più chiaramente della maggior parte dei blog post. La tabella di OpenAI su ciò per cui il supervised fine-tuning è più adatto elenca quattro usi: classificazione, traduzione sfumata, generazione di contenuti in un formato specifico e correzione di fallimenti nel seguire le istruzioni.1 Nessuno è "insegnare al model qualcosa che non sa". Il suo riassunto del beneficio è che "puoi usare prompt più brevi con meno esempi e dati di context, il che fa risparmiare sui costi dei token su scala e può ridurre la latency" — un argomento sulla fattura, dall’azienda che vende la feature.

Quindi:

  • Il fine-tuning insegna forma e comportamento. Tono, formato, la struttura di una risposta, un confine che puoi dimostrare ma non descrivere. La versione pubblicata più forte è la Superficial Alignment Hypothesis di LIMA: la knowledge viene dal pretraining, l’alignment insegna soprattutto in quale sotto-distribuzione di formati parlare — ed è per questo che lì sono bastati mille esempi curati.2
  • Il retrieval fornisce fatti che cambiano. È l’unica delle tre route in cui una modifica alla tua documentazione raggiunge la risposta senza toccare il model.
  • Il prompting copre la maggior parte dei casi reali, ed è la baseline onesta. L’in-context learning è il default da Language Models are Few-Shot Learners: il task viene dimostrato dentro il prompt e nessun weight si muove.3

Due paper misurati chiudono la porta sull’errore al centro. Ovadia e colleghi hanno confrontato l’iniezione di knowledge tramite unsupervised fine-tuning con l’iniezione tramite retrieval, e il retrieval ha vinto con costanza, anche su fatti che il base model aveva già visto in pretraining.4 Gekhman e colleghi hanno misurato il danno: gli esempi che introducono nuova knowledge vengono appresi lentamente, e quando il model finalmente li apprende il suo tasso di hallucination su altre domande aumenta.5 Insegnare fatti tramite fine-tuning non si limita a fallire; degrada risposte su cui non stavi facendo training.

Quella metà è chiusa. La metà economica no, ed è il resto del capitolo.

Il caso, e la documentazione che non sta ferma

Link alla sezione: Il caso, e la documentazione che non sta ferma

Un caso, eseguito in tre modi: supporto tecnico sulla tua documentazione, che cambia ogni settimana.

Il corpus è reale e su questo disco: i 23 documenti Markdown che un repository software in uso conserva come documentazione interna — la guida di build, le regole di brand, il translation brief, dieci manuali di servizio, le note su performance e sicurezza. Misurato con o200k_base, l’encoding del Capitolo 7:

the corpus, measuredTEXT
documents                              23
characters                        159,223
words                              22,194
tokens (o200k_base)                42,921
tokens with per-file headers       43,158

Quarantatremila token sono una dimensione comoda per questa decisione: stanno in qualsiasi context window moderna, quindi tutte e tre le route sono davvero disponibili. A dieci milioni la decisione è già presa per te, ed è retrieval.

Ora il lavoro che fa la parola "settimanale". Il churn della documentazione di solito viene affermato; qui viene contato, dalla cronologia versioni di quel repository:

misurato sulle ultime 26 settimanevalore
commit che toccano i 23 documenti40
tra questi, modifiche a un documento già esistente21
settimane di calendario distinte con almeno una modifica11
commit che toccano il catalogo di testo user-facing del prodotto nelle sue 8 settimane di vita157
settimane di calendario, su quelle 8, in cui è cambiato8

I documenti si muovono circa una settimana sì e una no. Le stringhe visibili agli utenti — che sono ciò su cui un support desk riceve davvero domande — si sono mosse in ogni settimana in cui sono esistite, a circa venti commit a settimana. Qualunque route scegliamo deve sopravvivere a questo, e "quanto spesso cambia la cosa su cui hai fatto training?" risulta avere un numero nel tuo repository, non un’opinione.

Venti domande di supporto realistiche sono state scritte contro questo corpus, una per topic, e ogni cifra qui sotto è calcolata su quelle venti.

La cosa più semplice che funziona: mettere l’intero corpus nel system prompt, la domanda alla fine, e lasciare che il model la trovi.

one call, route oneTEXT
system instructions                       140 tokens
the 23 documents                       43,158 tokens
the question (median of 20 measured)       13 tokens
the answer (the one assumption)           150 tokens

Ogni numero lì è stato contato tranne l’ultimo: 150 output token sono un’assunzione, scelta dentro l’intervallo dei turni assistant fatturati nel Capitolo 16. È l’unica cifra qui che non è stata eseguita, viene applicata in modo identico a tutte e tre le route, e la sezione sul break-even mostra esattamente quanto si muove la conclusione quando la cambi.

Alle tariffe lette dalla pagina del provider il 7 settembre 2026 — $1,50 per milione di input token, $9,00 per milione di output6 — sono $0,066317 a domanda. Stai pagando per rileggere quarantatremila token per rispondere a tredici.

La correzione del Capitolo 16 si applica direttamente: il corpus è stabile ed è all’inizio, quindi è un prefix di cache perfetto, e rileggerlo costa un decimo — $0,007864 a domanda, un taglio dell’88 %. Si applica anche l’avvertimento del Capitolo 16, nella forma che quel capitolo aveva segnalato ma non prezzato. Questo provider non addebita un premium di scrittura; addebita affitto. Una cache esplicita costa $0,000001 per token memorizzato per ora,6 quindi tenere caldi 43.298 token costa

43,298×$0.000001=$0.043298 per hour43{,}298 \times \$0.000001 = \$0.043298 \ \text{per hour}

che qualcuno faccia domande oppure no. Sono $189,78 in sei mesi, per una stanza vuota. Dividi l’affitto per il risparmio per domanda e la condizione esce in una riga: cachare questo corpus si ripaga sopra 0,74 domande l’ora — 546 al mese una volta contato anche il rebuild settimanale della cache. Sotto, la feature che hai abilitato per risparmiare denaro lo perde.

sei mesi, 100 domande al mesetotale
corpus intero, senza cache$39,79
corpus intero, cached$196,18

Stessa route, stesso codice, un flag, cinque volte la fattura. Il Capitolo 16 ha trovato una versione di questo causata da un timestamp nel posto sbagliato; qui non c’è nulla di sbagliato tranne il traffico. Una cache è una scommessa sul volume, e su questo provider la piazzi a ore.

Il retriever del Capitolo 19, invariato: taglia sui confini di sezione con un header contestuale, indicizza, mette nel prompt i quattro estratti migliori. Misurato sulle venti domande:

the retrieval route, measuredTEXT
chunks produced from the corpus              330
mean tokens of a chunk's own text          124.9
mean tokens of the four retrieved extracts   884
prompt per question (140 + 884 + 13)       1,037
one-off embedding of every chunk        46,823 tokens

Quarantadue volte meno prompt token della route uno, a $0,002906 a domanda. L’indice costa $0,0070 da costruire a $0,15 per milione di embedding token6 — meno del valore di tre domande — e gli stessi $0,0070 per ricostruirlo da zero ogni volta che la documentazione cambia. Ricostruire l’intero indice ogni settimana per sei mesi costa diciotto centesimi.

Una cosa merita una pausa. Il retrieval distrugge il prompt caching. Il prefix stabile ora è l’istruzione di sistema da 140 token; dal token 141 il prompt cambia a ogni call, perché gli estratti sono scelti per domanda. E 140 token sono sotto ogni minimo di cache citato dal Capitolo 16. Quindi la route due non può essere cached affatto, il che suona male e non lo è: non cachare 1.037 token è più economico che cacharne 43.298.

Questa è una regola generale da portare con sé: le due grandi tecniche di risparmio token si escludono a vicenda sullo stesso contenuto, e vince quella che rimuove più token. Il retrieval ne rimuove il 97,6 %.

Route tre: smetti di inviare la documentazione

Link alla sezione: Route tre: smetti di inviare la documentazione

Fai training su duecento esempi nello house style, poi poni domande senza allegare alcuna documentazione.

the fine-tuned route, measuredTEXT
training examples                            200
training tokens                           24,389
epochs                                         3
prompt per question (15 + 13)                 28

Il training costa 24.389 × 3 × $10,00 per milione = $0,7317. È l’intero costo di costruzione, meno di un caffè, ed è esattamente per questo che tanti team lo pagano prima di verificare se aiuta.

Ora la trappola, ed è il motivo per cui questo capitolo esiste. Un model fine-tuned non costa quanto il suo base model in esecuzione. La pagina prezzi lo dice in una frase: "for model inference starting from Gemini 3, tuned model endpoint prediction price will be 1.5 times of the base model."6 Non il training. L’inference, su ogni token, finché il model vive.

Quindi mettilo in una formula. Siano pip_i e pop_o i prezzi base di input e output, mm il moltiplicatore tuned, LRL_R la lunghezza del prompt della route che stai sostituendo, LFL_F la lunghezza del prompt dopo il fine-tuning e OO la lunghezza della risposta. Il fine-tuning è più economico per domanda solo quando

LR  >  mLF  +  (m1)OpopiL_R \;>\; m\,L_F \;+\; \frac{(m-1)\,O\,p_o}{p_i}

Il primo termine è ovvio: il tuo nuovo prompt corto, maggiorato. Il secondo no, ed è dove finiscono i soldi — il surcharge sulla risposta, che non ha nulla a che fare con il tuo prompt e che il training non può accorciare. Con i numeri misurati — m=1.5m = 1.5, LF=28L_F = 28, O=150O = 150, po/pi=6p_o/p_i = 6 — la soglia è

the break-even prompt lengthTEXT
answer   50 tokens -> the prompt it replaces must exceed   192 tokens
answer  150 tokens -> the prompt it replaces must exceed   492 tokens
answer  400 tokens -> the prompt it replaces must exceed 1,242 tokens
answer 1000 tokens -> the prompt it replaces must exceed 3,042 tokens

Alla lunghezza di risposta misurata, 492 token — di cui 450 sono il surcharge sulla risposta, non il prompt. Sostituire un prompt più corto di così è più costoso per domanda, per sempre, a qualsiasi volume; e la soglia cresce linearmente con quanto parla il tuo assistant, quindi uno che scrive risposte lunghe non potrà mai fine-tune la strada verso un token più economico, per quanto prompt elimini.

Lo stesso fatto visto dall’altro lato è la frase da ricordare. Dei $0,002088 per domanda della route fine-tuned, il 97,0 % è la risposta. Il fine-tuning ottimizza il restante tre per cento.

Quattro numeri descrivono ognuna di queste route: cosa paghi una volta, cosa paghi quando la documentazione cambia, cosa paghi ogni ora a prescindere, e cosa paghi per domanda. Questo estende computeCost del Capitolo 16 senza modificarlo.

costsheet.tsTS
import { computeCost, type Pricing, type Usage } from "./cost";   // Chapter 16

export interface Route {
  name: string;
  setupUSD: number;            // paid once, before the first question
  perRefreshUSD: number;       // paid every time the documentation changes
  standingUSDPerHour: number;  // paid per hour whatever the traffic
  pricing: Pricing;
  usage: Usage;                // one question and its answer
}

export const perQueryUSD = (r: Route) => computeCost(r.pricing, r.usage);

const HOURS_PER_MONTH = (24 * 365.25) / 12;

export function totalUSD(
  r: Route, months: number, queriesPerMonth: number, refreshesPerMonth: number,
) {
  return r.setupUSD
       + months * refreshesPerMonth * r.perRefreshUSD
       + months * HOURS_PER_MONTH * r.standingUSDPerHour
       + months * queriesPerMonth * perQueryUSD(r);
}

/** Monthly volume at which `b` overtakes `a`. null = it never does. */
export function crossover(
  a: Route, b: Route, months: number, refreshesPerMonth: number,
): number | null {
  const fixed = (r: Route) =>
      r.setupUSD
    + months * refreshesPerMonth * r.perRefreshUSD
    + months * HOURS_PER_MONTH * r.standingUSDPerHour;
  const dFixed = fixed(b) - fixed(a);                     // b's extra fixed cost
  const dVar = perQueryUSD(a) - perQueryUSD(b);           // b's per-question saving
  if (dVar <= 0) return null;                             // b is never cheaper
  return Math.max(0, dFixed / dVar / months);
}

Il tuned model non è un listino diverso, è lo stesso moltiplicato:

the tuned endpoint is the base list times 1.5TS
const TUNED_MULTIPLIER = 1.5;   // read from the provider's pricing page, 2026-09-07

const scale = (p: Pricing, k: number): Pricing => ({
  input: p.input.map(t => ({ ...t, price: t.price * k })),
  cachedInput: p.cachedInput!.map(t => ({ ...t, price: t.price * k })),
  output: p.output.map(t => ({ ...t, price: t.price * k })),   
});

Quella riga evidenziata è l’intero argomento della sezione precedente scritto come codice: il moltiplicatore arriva anche su output.

Sei mesi, con la documentazione aggiornata settimanalmente:

domande / meseprompt, cachedprompt, senza cacheretrievalfine-tune
100$196,18$39,79$1,93$21,01
1.000$238,65$397,90$17,62$32,28
10.000$663,32$3.978,99$174,52$145,04
100.000$4.909,98$39.789,90$1.743,49$1.272,56

E i crossover, che sono i quattro numeri di cui un budget ha davvero bisogno:

crossovers, six monthsTEXT
retrieval -> fine-tune, documentation never changes:     148 questions / month
retrieval -> fine-tune, documentation refreshed weekly: 3,989 questions / month
prompt (no cache) -> retrieval:                            1 question / month
prompt (no cache) -> prompt (cached):                    546 questions / month

Leggi i primi due insieme, perché sono il punto del capitolo. Un corpus stazionario fa ripagare il fine-tuning in centocinquanta domande; un corpus che cambia ogni settimana sposta lo stesso crossover di un fattore ventisette, e nulla del model è cambiato — solo quanto spesso lo ripaghi. Il costo di costruzione è una nota a piè di pagina; il costo di manutenzione è la decisione.

Se ora concludi che un support desk affollato dovrebbe fare fine-tuning, l’aritmetica è d’accordo con te. È comunque sbagliato, e la prossima sezione spiega perché.

Il foglio costi ha una colonna che non può calcolare, quindi questa sezione esegue il fine-tune: localmente, su un piccolo open model, con l’adapter scritto a mano invece che preso da una library. Il Capitolo 11 ha costruito LoRA; eccolo qui, su q_proj e v_proj di tutti i 24 layer di Qwen2.5-0.5B-Instruct a rank 8:

lora.py — the whole adapterPYTHON
class LoRALinear(nn.Module):
    def __init__(self, base: nn.Linear, r=8, alpha=16):
        super().__init__(); self.base = base
        for p in self.base.parameters():
            p.requires_grad = False              # the model is frozen  
        self.A = nn.Parameter(torch.zeros(r, base.in_features))
        nn.init.normal_(self.A, std=1 / r)
        self.B = nn.Parameter(torch.zeros(base.out_features, r))
        self.s = alpha / r
        self.on = True                           # so the same run can compare both

    def forward(self, x):
        y = self.base(x)
        return y + (x @ self.A.T @ self.B.T) * self.s if self.on else y

I duecento esempi di training vengono meccanicamente dal corpus, quindi sono riproducibili: la domanda è un heading di sezione trasformato in domanda, la risposta è il testo di quella sezione nello house style rigido — una riga che inizia con Short answer:, una riga che inizia con Source: con il percorso del file. Il formato è la forma insegnata; il percorso è il fatto. Poi due numeri su venti domande held-out: la risposta esce nello house style, e nomina il file che risponde davvero alla domanda?

Due baseline rendono la tabella leggibile, ed entrambe sono un’insistenza del Capitolo 4, non un’aggiunta tardiva. Dieci delle venti risposte giuste sono lo stesso file, quindi un model che ignora la domanda e risponde sempre CLAUDE.md segna 10/20. E il retriever ha il suo ceiling: su queste venti domande i suoi quattro estratti contengono il file giusto 14 volte e lo posizionano primo 7, quindi 14/20 è il massimo che qualsiasi reader potrebbe ottenere usandolo.

measuredTEXT
LoRA modules 48   trainable parameters 540,672 (0.109 % of the model)
400 steps, 2 epochs, 0.76 s/step on 16 CPU threads, 304 s in total
mean loss over the first 50 steps 3.7363 -> over the last 50 steps 2.4197

                                        house style   correct source
always answer the most common file             --          10 / 20
the retriever's own ceiling                    --          14 / 20
base model, closed book                    0 / 20           0 / 20
fine-tuned, closed book                   19 / 20           8 / 20
base model, four retrieved extracts       13 / 20           2 / 20
fine-tuned, four retrieved extracts        1 / 20           1 / 20

La forma è stata appresa, completamente e in fretta. Da zero a diciannove su venti, con un adapter da 540.672 parametri — lo 0,109 % del model — in cinque minuti di training su un processore senza scheda grafica in vista.

I fatti no. Otto su venti non è distinguibile dai dieci che ottieni ignorando del tutto la domanda, e l’intervallo del Capitolo 4 su venti campioni lo dice a voce alta. Quei percorsi file erano nei dati di training tre volte; ciò che è uscito è stata l’abitudine di finire con una riga Source: dall’aria plausibile. Alla domanda in cima a questo capitolo, il model fine-tuned ha risposto Short answer: 10.x . . . e citato CLAUDE.md. La risposta giusta, che si trova in CLAUDE.md, è 18.17.0.

E poi la forma si è rotta, ed è la riga che giustifica l’esperimento. Dai al model fine-tuned mille token di estratti retrieved — una forma di prompt che non ha mai visto, dato che ogni training prompt era di ventotto token — e lo house style crolla da 19/20 a 1/20. Sulla domanda in cima a questo capitolo risponde 18.17.0 — corretto, e senza nessuno del formato per cui era stato addestrato. Quindi il fine-tuning non ha insegnato un formato; ha insegnato un formato condizionato ai prompt nel training set, e il primo prompt con un aspetto diverso si è portato via il formato. Qualunque cosa tu usi per il fine-tuning diventa l’unica distribuzione di input in cui il tuo model è bravo, e nessuno lo mette nel foglio di calcolo.

Un’ultima nota sulla metrica, puntando dritto al Capitolo 29: "fonte corretta" valuta forma e fatto insieme, motivo per cui entrambe le righe di retrieval sembrano pessime anche se entrambi i model hanno azzeccato il fatto di quella domanda. Un solo numero end-to-end stava nascondendo tre cose — un retriever a 14/20 recall, un reader da 0,5B e un formato di citazione — e scegliere cosa correggere significa separarle prima di misurare, non dopo.

Ora la colonna che i vendor compilano per te. Un model fine-tuned non è un asset che possiedi; è un lease sul base model di qualcun altro, con una data di scadenza stampata sopra. Il 7 settembre 2026 la sezione fine-tuning della pagina prezzi di OpenAI riportava per intero questo avviso:

OpenAI is winding down the fine-tuning platform. The platform is no longer accessible to new users, but existing users of the fine-tuning platform will be able to create training jobs for the coming months. All fine-tuned models will remain available for inference until their base models are deprecated.7

La timeline è datata al giorno: 7 maggio 2026, chiusa alle organizzazioni che non avevano mai fatto fine-tuning; 2 luglio 2026, chiusa a quelle che non avevano eseguito inference su un model fine-tuned nei sessanta giorni precedenti; 6 gennaio 2027, nessun nuovo job.8 La stessa pagina programma lo shutdown dei model fine-tuned stessi — ft-gpt-3.5-turbo, ft-gpt-4, ft-gpt-4.1-nano, ft-babbage-002, ft-davinci-002 — il 23 ottobre 2026, ciascuno con un recommended replacement base model, che è un modo educato per dire: addestralo di nuovo.

L’altro frontier vendor non ti ha mai venduto il lease. L’indice della documentazione Anthropic elenca 699 pagine e nessuna riguarda il fine-tuning; le sezioni di model customization della pagina prezzi Bedrock coprono Amazon Nova, Amazon Titan, Cohere, Meta e model open-weight OpenAI, e nessun Claude.910 Se la tua architettura dipende da un fine-tune, una delle tre famiglie frontier ti è semplicemente indisponibile, a qualsiasi budget.

Il self-hosting sostituisce il lease su un model con un lease su una macchina, e AWS fa quell’aritmetica sulla propria pagina: una model unit di provisioned throughput per un model custom, impegno di un mese, è "1 model unit × $21.18 × 24 hours × 31 days = $15,757.92" al mese.10 Affittare direttamente il metal è più economico e non gratuito — $3,99 per GPU-hour on demand per un H100, $1,99 preemptible11 — circa $2.900 al mese per una scheda che deve restare accesa che qualcuno faccia domande oppure no. L’intera route di retrieval a diecimila domande al mese costa $174,52 per sei mesi.

Qui LoRA si guadagna il suo posto, come argomento di budget più che tecnico. Misurato sullo stesso model, un adapter rank-16 su attention e layer feed-forward è 8.798.208 parametri — l’1,781 % del model, 17,6 MB in bfloat16 — contro 0,988 GB di base weights, e il suo stato di optimizer e gradient è 140,77 MB dove il full fine-tuning richiede 7,90 GB, un fattore 56. La conseguenza non è training più economico, ma che un base model caricato può servire molti adapter, che è l’unico modo in cui il costo fisso di una GPU viene diviso per qualcosa. Il training managed lo riflette: $0,48 per milione di token low-rank fino a 16B contro $0,54 full, con un minimo di $4,00 per job.11 Quel floor è il dettaglio. A 24.389 token per tre epoch, ogni retraining su questo corpus fattura $4,00 invece dei $0,04 a cui arriva il calcolo — $104 di minimi su ventisei run settimanali, per novantuno centesimi di aritmetica.

Quanto costa la privacy, e perché la distillation non è una quarta opzione

Link alla sezione: Quanto costa la privacy, e perché la distillation non è una quarta opzione

Altre due colonne che compaiono solo in fattura.

La data residency costa circa il dieci per cento, e due provider concordano sulla cifra. OpenAI addebita "a 10 % uplift" sugli endpoint di data-residency per i model rilasciati dal 5 marzo 2026 in poi;7 Vertex prezza i suoi endpoint non globali a $1,65 contro $1,50, lo stesso dieci per cento.6 Mettilo contro il cinquanta per cento che costa un endpoint tuned e il folklore si ribalta: la residency è economica e il fine-tuning no — e il fine-tuning non è comunque l’opzione privata, dato che il corpus raggiunge il provider in ogni caso, una volta al momento del training invece che una volta per call.

Il prezzo più esplicito mai messo sui tuoi dati è sulla stessa pagina, che elenca due volte un model fine-tuned: con data sharing abilitato, l’inference costa esattamente la metà — $2,00 contro $4,00 input, $8,00 contro $16,00 output.7 Lasciare che il provider conservi ciò che hai inviato vale uno sconto del 50 %, il che ti dice quanto vale per loro.

Distillation — addestrare un tuo piccolo model sulle risposte di uno grande — viene spesso proposta come via d’uscita da entrambe. Prezzala e non lo è, perché il teacher è il sistema che stavi cercando di sostituire: produrre duecento esempi di training chiedendo alla route di retrieval duecento domande costa 200 × $0,002906 = $0,58, oltre ai $0,73 per addestrarci sopra. La distillation è qualcosa che fai dopo che la pipeline di retrieval funziona, per renderla più economica, ed eredita ogni fatto che il retriever ha sbagliato.

Il denaro è la metà visibile. L’altra arriva come attesa, con la stessa causa della fattura: il model legge tutto il prompt prima di dire una parola. Il Capitolo 13 ha misurato il prefill contro il decode su un model che potevi toccare; qui c’è la stessa misurazione, una run, una macchina, contro la lunghezza del prompt:

prompt tokentempo al primo tokenper token
28312 ms11,14 ms
1.0374.971 ms4,79 ms
4.09622.272 ms5,44 ms
8.19249.443 ms6,04 ms

I numeri assoluti appartengono a un model da 0,5B su sedici thread CPU e non dicono nulla su un frontier model hosted. La forma si trasferisce esattamente: il prefill cresce con la lunghezza del prompt, e il costo per token aumenta lentamente quando il termine quadratico del Capitolo 9 inizia a mostrarsi — 4,79 ms a mille token contro 6,04 ms a ottomila, una penalità del 26 % solo per essere più lungo.

La conseguenza per le tre route è diretta. La route uno fa prefill di quarantatremila token per domanda, e un cache hit è ciò che lo rende sopportabile — il Capitolo 16 ha spiegato perché: una lettura da cache sostituisce lavoro di prefill, quindi compra latency e denaro in una sola transazione. La route due fa prefill di mille e aggiunge prima un round trip all’indice. La route tre fa prefill di ventotto e non aggiunge nulla, il che la rende misurabilmente la più veloce delle tre nel rispondere. Sta solo rispondendo alla cosa sbagliata.

Tre failure che sembrano problemi di model e non lo sono — dieci minuti qui risparmiano un mese dopo:

La documentazione non contiene la risposta

Link alla sezione: La documentazione non contiene la risposta

Il retrieval non può retrieve ciò che nessuno ha scritto, e farci fine-tuning sopra insegna soltanto al model a sembrare sicuro. Se la tua domanda di supporto principale non trova risposta da nessuna parte nel corpus, la correzione è un technical writer.

La risposta richiede un’azione, non un testo

Link alla sezione: La risposta richiede un’azione, non un testo

"Dov’è il mio ordine?" è una query al database, non una domanda di knowledge. È una tool call — Capitolo 18 — e né il training né il retrieval la sostituiscono.

La domanda è ambigua e l’interfaccia lo nasconde

Link alla sezione: La domanda è ambigua e l’interfaccia lo nasconde

Quando due prodotti condividono un nome, la migliore risposta possibile è una richiesta di chiarimento. È una decisione di prodotto sull’input, non una decisione di modelling sull’output.

E il requisito su tutto questo: questa decisione non può essere presa senza un evaluation set, e lo dice il vendor che vende il fine-tune. La guida di OpenAI apre con "Only invest in fine-tuning after setting up evals. You need a reliable way to determine whether your fine-tuned model is performing better than a base model", e aggiunge che se cinquanta buoni esempi non cambiano nulla, il problema è il task o il prompt, non il volume di dati.1 Venti domande, che è ciò che questo capitolo ha usato, mostrano un meccanismo e non possono scegliere un fornitore — il Capitolo 4 ha misurato perché, e cosa fare quando venti casi sono tutto ciò che hai — ripeterli, accoppiarli e misurare lo spread tra run — è il Capitolo 29.

Quattro colonne, e solo l’ultima decide:

promptretrievalfine-tune
cosa insegnaqualsiasi cosa tu possa scriverefatti che cambianoforma e comportamento
costo di costruzionezero$0,0070 più un pomeriggio$0,7317 più un eval set
costo per domanda$0,0079 cached, $0,0663 no$0,0029$0,0021, sopra 492 prompt token
costo di manutenzionezero, o $0,043 l’ora di affitto$0,0070 per rebuildun retraining per modifica, più uno per ogni base model ritirato

La regola che ne esce, ed è abbastanza breve da tenere a mente: inizia con il prompt; aggiungi retrieval quando i fatti si muovono; fai fine-tuning solo quando hai misurato che ciò che ti manca ancora è una forma, non un fatto — e prezza la risposta, non il prompt, prima di farlo.

La versione scomoda, per chi è arrivato avendo già deciso: nel caso misurato in questo capitolo il fine-tuning è la route più economica sopra quattromila domande al mese, e sui fatti non riesce comunque a battere il rispondere CLAUDE.md a tutto.

Ogni prezzo qui è stato per token, e ogni route un modo diverso di disporre token. Questo sta per smettere di essere vero.

Il Capitolo 21 lascia il testo. Un’immagine che entra in un model non è una string ma una griglia di patch con un conteggio di token che non hai scelto; un minuto parlato viene fatturato al secondo da un provider e ad audio token da un altro; il parlato sintetico viene venduto a carattere, la transcription a minuto, il compute grezzo a GPU-second. La domanda a cui questo capitolo ha risposto con una funzione di costo — qual è più economico? — non può nemmeno essere posta finché le unità non coincidono, e nessun calcolatore su internet le normalizza.

È anche il punto in cui il training ricompare: un image adapter con una trigger word, e una voce clonata da un sample. Il che solleva la domanda con cui apre il prossimo capitolo, e non è retorica: se il fine-tuning di un language model è quasi sempre l’acquisto sbagliato, perché il fine-tuning di un image model è quasi sempre quello giusto?


Ogni prezzo, soglia e moltiplicatore in questo capitolo è stato letto dalla pagina del provider il 7 settembre 2026 ed è citato con quella data, perché tutti si muoveranno. Le cifre misurate — conteggi di token, dimensioni dei chunk, dimensioni del retrieval, training loss, punteggi, latency e conteggi della cronologia versioni — sono state prodotte su una macchina lo stesso giorno e sono riproducibili dal corpus descritto sopra.

Gli esperimenti locali hanno usato Qwen/Qwen2.5-0.5B-Instruct con greedy decoding, quindi si riproducono esattamente; l’adapter è la classe di dodici righe stampata sopra, a rank 8 su q_proj e v_proj. Il corpus è la documentazione Markdown tracciata di un repository software in uso, esclusi due log append-only, e il suo tasso di modifica è stato contato dalla cronologia versioni di quel repository.

  1. OpenAI, Supervised fine-tuning, developers.openai.com/api/docs/guides/supervised-fine-tuning, e Model optimization, .../guides/model-optimization, entrambi consultati il 2026-09-07. Fonte di: la tabella su ciò per cui il supervised fine-tuning è più adatto (classificazione, traduzione sfumata, generazione di contenuti in un formato specifico, correzione di fallimenti nel seguire le istruzioni); i quattro benefici dichiarati, inclusi prompt più brevi e latency inferiore; il minimo di 10 training example e la raccomandazione di iniziare con 50; e "Only invest in fine-tuning after setting up evals." 2

  2. Zhou, C. et al. LIMA: Less Is More for Alignment. arXiv:2305.11206 (2023). La Superficial Alignment Hypothesis — la knowledge viene dal pretraining, l’alignment insegna in quale formato parlare — e il motivo per cui mille esempi curati sono bastati.

  3. Brown, T. et al. Language Models are Few-Shot Learners. arXiv:2005.14165 (2020). La fonte dell’in-context learning come baseline onesta: il task viene dimostrato dentro il prompt e nessun weight viene aggiornato.

  4. Ovadia, O., Brief, M., Mishaeli, M. and Elisha, O. Fine-Tuning or Retrieval? Comparing Knowledge Injection in LLMs. arXiv:2312.05934 (2023). Il retrieval ha battuto l’unsupervised fine-tuning nell’iniettare knowledge, anche su fatti già visti in pretraining.

  5. Gekhman, Z. et al. Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations? arXiv:2405.05904 (2024). Gli esempi che introducono nuova knowledge vengono appresi lentamente, e apprenderli aumenta le hallucination su domande non correlate.

  6. Google, Vertex AI generative AI pricing, cloud.google.com/vertex-ai/generative-ai/pricing, consultato il 2026-09-07. Ogni cifra nel foglio costi di questo capitolo: Gemini 3.5 Flash sull’endpoint globale a $1,50 per milione di input token, $0,15 cached input e $9,00 text output, con endpoint non globali più alti del 10 %; supervised fine-tuning dello stesso model a $0,01 per 1.000 training token, dove "training tokens are calculated by the total number of tokens in your training dataset, multiplied by your number of epochs"; storage esplicito della context cache a $0,000001 per token per ora; input Gemini Embedding a $0,00015 per 1.000 token online; e la nota che "for model inference starting from Gemini 3, tuned model endpoint prediction price will be 1.5 times of the base model." 2 3 4 5

  7. OpenAI, Pricing, developers.openai.com/api/docs/pricing, consultato il 2026-09-07. Fonte dell’avviso di wind-down citato per intero, e delle tariffe text correnti usate per il cross-check: gpt-5.6-terra standard short context a $2,00 input, $0,20 cached input, $2,50 cache write e $12,00 output per milione di token, con il batch tier alla metà di ciascuno. La pagina contiene dieci righe di fine-tuning su sette base model, e esattamente una di esse è fatturata a tempo invece che a token: reinforcement fine-tuning di o4-mini-2025-04-16 a $100,00 per training hour. La stessa pagina nota un uplift del 10 % sugli endpoint di data-residency per i model rilasciati dal 5 marzo 2026 in poi. 2 3

  8. OpenAI, Deprecations, developers.openai.com/api/docs/deprecations, consultato il 2026-09-07. Fonte della timeline del self-serve fine-tuning (7 maggio 2026, 2 luglio 2026, 6 gennaio 2027) e dello shutdown del 23 ottobre 2026 di ft-gpt-3.5-turbo, ft-gpt-4, ft-gpt-4.1-nano-2025-04-14, ft-babbage-002 e ft-davinci-002, ciascuno elencato con un replacement base model raccomandato.

  9. Anthropic, indice della documentazione developer, platform.claude.com/llms.txt, consultato il 2026-09-07. 699 pagine elencate, nessuna sul fine-tuning; platform.claude.com/docs/en/build-with-claude/fine-tuning restituisce 404.

  10. Amazon Web Services, Amazon Bedrock pricing, aws.amazon.com/bedrock/pricing/, consultato il 2026-09-07. Fonte delle sezioni di model customization (Amazon Nova, Amazon Titan, Cohere, Meta, Qwen e model open-weight OpenAI — nessun Claude), dell’addebito mensile di $1,95 per conservare ogni custom model, e dell’esempio calcolato citato: "1 model unit × $21.18 × 24 hours × 31 days = $15,757.92". 2

  11. Together AI, Pricing, together.ai/pricing, consultato il 2026-09-07. Fine-tuning per milione di token per model fino a 16B: $0,48 low-rank e $0,54 full per supervised fine-tuning, $1,20 e $1,35 per direct preference optimisation, con il prezzo calcolato come "training dataset size × number of epochs" più evaluation token e "a minimum charge of $4.00" per job. Capacità GPU: $3,99 per GPU-hour on demand per HGX H100, $1,99 preemptible, $5,99 per H200. 2

Pronto a lasciare scegliere LIA?

Crea con ogni modello AI in un unico posto — inizia gratis oggi.