Appunti dal ciclo di rilascio — Parte III
Un anno fa, prima di iniziare a costruire la nostra pipeline di rilascio, ci siamo seduti e abbiamo elencato ogni capacità di QA-e-rilascio che pensavamo una piattaforma LLM seria dovesse offrire. Abbiamo poi valutato dodici altre piattaforme rispetto a quella lista — LangSmith, MLflow, Weights & Biases, Braintrust, Humanloop, Patronus, Arize, Phoenix, Confident, Deepchecks, SageMaker Deployment Guardrails, KServe, BentoCloud, Vertex AI Endpoints, Seldon Core. Nessuno aveva tutte e dodici. Le combinazioni che erano offerte si raggruppavano in tre campi che non si toccavano del tutto.
Questo post è la lista di capacità che ne è risultata, resa portabile. È organizzata in base a quale dei nostri quattro stadi della pipeline ciascuna capacità abita — Registra → Verifica → Distribuisci → Osserva — in modo da comporsi pulitamente con l’architettura della pipeline e le modalità di fallimento di cui abbiamo scritto. Se stai valutando strumenti, percorri la lista dall’alto verso il basso per ciascun candidato; quelli con i divari più profondi ti diranno a quale campo appartengono.
I tre campi (così sai cosa stai guardando)
Prima della checklist vera e propria, la forma del mercato nel 2026:
- Campo Eval-CI — Braintrust, Humanloop, Patronus. Eseguono valutatori automatizzati al merge della PR. Bloccano i merge difettosi. Non toccano mai il traffico live. Forti sulle capacità 4–6; assenti sulle 7–12.
- Campo Serving-canary — SageMaker Deployment Guardrails, KServe, Vertex AI Endpoints, BentoCloud, Seldon Core. Suddividono il traffico, monitorano metriche infrastrutturali, fanno auto-rollback su allarmi in stile CloudWatch. Forti su 1, 7, 9; assenti sul lato qualità di 8 e 10–12.
- Campo Observability — Arize Phoenix, Confident AI, Deepchecks. Guardano la produzione, allertano gli umani, escalano. Forti sulla 10 (monitoring), ma non applicano nulla — l’alerting non è auto-rollback.
Il divario tra questi campi — tra “ha passato il CI” e “canary live valutato sulla qualità, non solo sulla latenza” — è la parte che ognuno deve colmare a mano. Chiudere quel divario è l’affermazione portante di questo post.
La cucitura mancante: gate di qualità per fetta → rollback atomico guidato dalla qualità dell'output, non da metriche infra.
Stadio ① — Registra
Capacità 1. Manifest di rilascio immutabile con uno SHA content-addressable
Cos’è: un rilascio non è un file di pesi del modello. Un rilascio è un bundle immutabile di tutto — artefatto del modello, template del prompt, regole di routing, versione del dataset, versione del preprocessing — indirizzato da un singolo SHA-256. Due persone che distribuiscono “lo stesso rilascio” devono produrre lo stesso SHA, altrimenti la pipeline rifiuta.
Perché conta: senza questo, “quale modifica ha rotto la produzione?” è una domanda senza risposta quando lo stato è suddiviso tra tre sistemi. L’outage di Atlassian dell’aprile 2022[1] ha richiesto dodici ore per sito per recuperare proprio perché lo stato viveva in sistemi versionati indipendentemente che dovevano essere coordinati di nuovo in accordo.
Chi lo offre: il campo serving-canary in parte (modello + routing); i model registry (MLflow, W&B Models[2]) in parte (solo artefatto del modello). Quasi nessuno include il template del prompt nello SHA, che è esattamente il campo che cambia più spesso.
Capacità 2. Controllo di versione atomico su tutti i componenti del rilascio
Cos’è: lo swap dal rilascio A al rilascio B fa scattare tutto in una sola istruzione — pesi e prompt e routing e dataset e preprocessing — non come cinque modifiche separate sulla dashboard.
Perché conta: gli swap parziali creano finestre di comportamento indefinito. Se il prompt si aggiorna ma la regola di routing no, ogni richiesta che arriva al nuovo prompt con la vecchia classe di routing si trova in uno stato che nessuno ha pianificato.
Chi lo offre: nessuno completamente. Il campo serving-canary fa swap atomico dell’immagine del modello; il prompt e il routing tipicamente vivono altrove. Lo swap guidato da manifest è da dove viene l’affermazione del rollback atomico[5] di Divinci.
Capacità 3. Parità tra ambiente di training e di serving
Cos’è: la pipeline di preprocessing usata durante la valutazione al gate è la stessa preprocessing che usa il server di produzione. Se divergono, ogni numero offline è una bugia.
Perché conta: lo skew tra training e serving è uno dei dieci fallimenti di rilascio di cui abbiamo scritto. Il sintomo è “rende bene in eval, si comporta come un modello diverso in produzione.” La cura è registrare il preprocessing nel manifest e fare il gate contro la versione di preprocessing di produzione.
Chi lo offre: i framework di containerizzazione (BentoML, KServe) ottengono credito parziale colocando il preprocessing con il serving. Nessuno di loro lega il preprocessing nell’input del gate di eval.
Stadio ② — Verifica
Capacità 4. Gate di qualità per fetta / per dominio
Cos’è: la decisione del gate consuma punteggi per fetta — redazione di contratti, interpretazione statutaria, licenza di IP — non un singolo aggregato. Qualsiasi singola fetta che scende sotto la propria soglia marca il rilascio come gate_fail, indipendentemente da come appare la media.
Perché conta: i punteggi aggregati diluiscono le regressioni localizzate. L’analisi Semver Lie di Tianpan[3] nomina questa come la modalità dominante di fallimento di rilascio LLM nel 2026: un modello che migliora in media mentre crolla silenziosamente su una classe di percorsi utente.
Chi lo offre: nessun altro nel 2026. Gli strumenti eval-CI — Braintrust, Humanloop, Patronus — valutano contro una singola rubrica globale o una lista piatta di compiti. Non espongono una soglia per fetta o un override slice-blind. Questo è il primo punto in cui i campi non si incontrano.
Capacità 5. Giudice calibrato ancorato all’umano (ρ di Spearman vs valutazioni umane)
Cos’è: il giudice non è un generico LLM-come-giudice. È un giudice LLM la cui ρ di Spearman rispetto a un panel di esperti di dominio è misurata e configurata per fetta. Il giudice è selezionato perché i suoi rank corrispondono ai rank umani, non perché ha una buona reputazione.
Perché conta: MT-Bench[6] mostra che GPT-4-come-giudice concorda con gli umani >80% complessivamente, con varianza per categoria dal coding (86%) alla scrittura (36–44%). L’“accordo complessivo” nasconde le fette in cui il giudice è inaffidabile. Calibrare il giudice per fetta è l’unico modo onesto per rendere lo scoring automatizzato degno di fiducia.
Chi lo offre: Braintrust, Humanloop, Patronus eseguono valutatori-giudice. Nessuno di loro richiede, espone o persiste una calibrazione di Spearman ancorata all’umano per fetta. La pipeline di calibrazione di Divinci è documentata in Calibrating the AI Judge.
Capacità 6. Percorso di override con motivazione scritta obbligatoria
Cos’è: forzare l’override di un fallimento del gate è permesso (cold start, regressioni accettate, ecc.) ma richiede due campi — forceGateOverride: true E overrideReason: "...". La motivazione finisce nell’audit trail insieme all’ID utente. Nessun override anonimo.
Perché conta: i gate di governance non sono una funzionalità di compliance separata; sono una proprietà dello stadio del gate stesso. L’audit trail deve rispondere non solo a “questo override è stato usato?” ma a “qual era la motivazione al momento?” — perché tu-del-futuro hai bisogno di leggerla.
Chi lo offre: gli strumenti eval-CI hanno flag; nessuno di loro richiede la motivazione come parte strutturale dell’override.
Stadio ③ — Distribuisci
Capacità 7. Canary multi-checkpoint con dwell
Cos’è: il traffico si sposta dallo 0% alla produzione attraverso almeno tre checkpoint — tipicamente 5% → 25% → 100% — e si trattiene a ciascuno per un tempo di dwell configurato o un conteggio di richieste configurato, qualunque dei due venga dopo. Nessun 0%→100% istantaneo.
Perché conta: i bug a coda lunga emergono su scala. Un bug che colpisce lo 0,3% delle conversazioni è invisibile su una eval da 100 prompt ed evidente al 5% del traffico di produzione. Il dwell è ciò che dà al canary il tempo di vedere la coda lunga.
Chi lo offre: il campo serving-canary lo offre. AWS SageMaker Deployment Guardrails[4] documenta un TerminationWaitInSeconds di default di 600 (dieci minuti). KServe, BentoCloud, Seldon e Vertex espongono tutti configurazioni di canary multi-step simili. Questa è la capacità saturata.
Capacità 8. Monitor di qualità dell’output a ogni checkpoint del canary
Cos’è: a ogni checkpoint, la pipeline controlla tre monitor prima di avanzare — latenza p95, tasso 5xx, e un punteggio di qualità dell’output calcolato dallo stesso giudice calibrato della capacità 5. Latenza e 5xx da soli non bastano.
Perché conta: è qui che i campi non si incontrano di nuovo. SageMaker, KServe, Vertex, BentoCloud, Seldon guardano tutti latenza e tasso di errore. Nessuno di loro offre un monitor di qualità dell’output per checkpoint — perché non hanno un giudice calibrato contro cui valutare. Gli strumenti eval-CI hanno il giudice ma non stanno sul traffico.
Chi lo offre: nessuno completa il ponte. L’infrastruttura di canary con dwell esiste nel campo serving; il giudice calibrato esiste nel campo eval-CI; non abbiamo visto nessuno connetterli.
Capacità 9. Halt automatico su violazione di qualità
Cos’è: un checkpoint del canary che fallisce sulla qualità dell’output si ferma automaticamente. La promozione non avanza. Non serve chiamare un umano per fermare il rollout.
Perché conta: gli umani non sono nel loop nella scala temporale in cui si muovono i rollout. Quando arriva un ticket cliente, il checkpoint al 25% è finito e la promozione al 100% è avvenuta.
Chi lo offre: il campo serving-canary ferma su metriche infrastrutturali. L’halt su metrica di qualità è la parte che richiede l’esistenza della capacità 8.
Stadio ④ — Osserva
Capacità 10. Replay continuo delle tracce di produzione attraverso il candidato
Cos’è: dopo che il canary promuove al 100%, l’osservatore continua a girare. Campiona le tracce di produzione recenti, le replaya attraverso il rilascio candidato (ora attivo), le valuta con il giudice calibrato ed emette un punteggio di qualità al minuto. Continuo, non periodico.
Perché conta: i cali silenziosi di qualità — il modello tergiversa, allucina con sicurezza una data, rifiuta dove non dovrebbe — non muovono mai latenza o 5xx. L’unico segnale che ricevi per questi è il ticket cliente, che è il peggior segnale possibile. Un monitor di qualità continuo li cattura in minuti a una cifra.
Chi lo offre: nessuno. Il campo observability (Arize, Phoenix, Confident, Deepchecks[7]) monitora l’output di produzione ma non applica. Il campo serving-canary guarda l’infra. Il campo eval-CI non sta sul traffico. Il loop chiuso — tracce di produzione → giudice calibrato → enforcement — è la cucitura mancante.
Capacità 11. Rollback atomico in secondi, non minuti
Cos’è: quando l’osservatore scatta (tre minuti consecutivi sotto soglia, diciamo), il rollback parte automaticamente. Il rollback ripunta il routing a previous_release dal manifest. Poiché il rilascio precedente era un manifest completamente bundled, ogni componente fa flip atomicamente. End-to-end inclusi il drain delle richieste in volo su un servizio a ~100 repliche: circa 12 secondi[5].
Perché conta: l’outage di Cloudflare del giugno 2022[8] ha richiesto 44 minuti per essere annullato. La causa non era il revert in sé — era che gli ingegneri si pestavano i piedi a vicenda sui revert perché lo stato era suddiviso. Il rollback guidato da manifest è a singola istruzione; non può avere quella modalità di fallimento.
Chi lo offre: il campo serving-canary offre rollback infrastrutturale veloce (attivato da allarme, flip blue-green). La differenza architetturale è se il trigger sia solo infra o consapevole della qualità (capacità 10).
Capacità 12. Ricevuta di compliance con hash-chain, ancorabile esternamente
Cos’è: ogni decisione di rilascio — register, gate-pass, gate-fail, gate-override, checkpoint-promote, auto-rollback — emette una ricevuta JSON-con-SHA-256, con hash-chain alla ricevuta precedente per questo cliente e alla ricevuta precedente per questo rilascio. La catena è ancorata esternamente secondo una pianificazione che il cliente configura.
Avvertenza open-weights. Quando il rilascio è sostenuto da un modello open-weights (Gemma, Qwen, Llama, Mistral, GPT-OSS), la ricevuta incorpora un’attestazione di peso vindex — una prova che i pesi attivi al momento della decisione sono i pesi che il manifest ha registrato. Quando il rilascio è sostenuto da un modello closed-API (OpenAI, Anthropic, Google tramite API opache), la ricevuta copre la catena delle decisioni ma non può rivendicare la provenienza dei pesi, perché il fornitore non li espone. La ricevuta lo dice esplicitamente. Questo è il limite di ciò che è verificabile.
Perché conta: le industrie regolamentate oggi ottengono log. L’EU AI Act e il NIST AI RMF[9] chiedono sempre più prove. Una ricevuta con hash-chain è la differenza tra “abbiamo un log” e “un auditor può verificare la catena senza fidarsi del nostro log.”
Chi lo offre: nessun altro. Questa è la parte della differenziazione che mappa direttamente sulla pagina compliance esistente di Divinci — stesso formato di ricevuta, esteso alle decisioni di rilascio.
Le 12 capacità, per campo di piattaforma
Lo schema è il punto. Cinque capacità — gate per fetta, giudice calibrato, monitor di qualità del canary, replay a loop chiuso, ricevuta con hash-chain — appaiono come ✗ in ogni altro campo. Quella è la cucitura. Le altre sette si distribuiscono tra i campi in modi che rendono ciascun campo internamente coerente ma mutuamente incompleto.
Cosa rende il QA dei language model personalizzati diverso da quello del software?
Gli LLM non sono deterministici, neppure a temperatura zero — il batching e le differenze hardware causano variazione nell’output. Quella singola proprietà rompe la maggior parte delle assunzioni su cui era costruito il QA tradizionale:
- Non puoi scrivere asserzioni
expect(output).toEqual(X). Ti serve una valutazione consapevole della distribuzione che consuma correlazione di rank rispetto a un grader ancorato all’umano, non uguaglianza rispetto a una fixture. Questa è la capacità 5. - Un modello può passare un check di qualità aggregato pur fallendo su una fetta. Ecco perché la capacità 4 esiste separatamente. Se la tua eval non sa fare slicing, non può catturare regressioni slice-aware.
- I fallimenti di qualità sono silenziosi al livello infrastrutturale. Latenza e 5xx restano puliti mentre il modello tergiversa o allucina. Le capacità 8 e 10 esistono perché nessun monitor lato-infrastruttura può vedere questo.
- Il rollback non è opzionale. Poiché le modalità di fallimento sono probabilistiche e alcune sono silenziose, il percorso di rollback deve essere infrastruttura primaria, non un piano di riserva. La capacità 11 è ciò che rende raggiungibili i “12 secondi”; la capacità 2 è ciò che li rende corretti.
Una piattaforma di QA-e-rilascio che non tiene conto di questi quattro fatti sta offrendo CI/CD per software deterministico con un logo LLM incollato sopra. Il mercato lo fa parecchio.
Come supportano gli audit trail la compliance AI, in pratica?
Il gap di compliance più comune che vediamo — quando un auditor arriva sei mesi dopo il deployment e chiede “quale versione del modello stava girando il 15 marzo, e chi ha approvato quel rilascio?” — non è “non abbiamo log.” È “abbiamo log su cinque sistemi e le timeline non si allineano.”
Una ricevuta di compliance (capacità 12) risolve questo rendendo il log stesso un artefatto portabile: con hash-chain, fonte unica, ancorabile esternamente. Un auditor può verificare la catena senza fidarsi della nostra infrastruttura. Questa è la differenza tra “abbiamo i record” e “i record sono dimostrabili.”
Per i sostegni di modelli open-weights, la ricevuta include anche un’attestazione del peso — una prova crittografica che i pesi attivi sono i pesi che il manifest ha registrato. Questo soddisfa le richieste più difficili (diritto all’oblio dell’Articolo 17 del GDPR, provenienza nell’EU AI Act) perché puoi provare non solo cosa è stato distribuito ma che i pesi sottostanti sono ciò che dichiarano di essere.
Per i sostegni closed-API — quando il modello è servito dietro un’API opaca e i pesi non sono esposti — la ricevuta copre la catena delle decisioni ma non può rivendicare la provenienza dei pesi. Lo diciamo esplicitamente nella ricevuta invece di implicare una prova che non possiamo fornire. È il limite di ciò che è verificabile quando il fornitore tiene i pesi all’interno.
Cosa questa checklist non risolve
Tre limiti onesti:
Le capacità non sono caselle da spuntare fini a se stesse. Una piattaforma che offre tutte e dodici male è peggio di una che ne offre otto bene. La checklist è un punto di partenza per la valutazione, non un punteggio per RFP fornitori.
L’istantanea competitiva è del 2026 e cambierà. Tra sei mesi alcuni dei segni ✗ qui sopra si capovolgeranno — i concorrenti leggeranno i postmortem e chiuderanno i divari. Se leggi questo post nel 2027, fai tu stesso l’audit dei segni prima di crederci.
Alcune capacità dipendono da altre. La capacità 8 (monitor di qualità del canary) richiede la capacità 5 (giudice calibrato). La capacità 10 (replay delle tracce a loop chiuso) richiede entrambe. Una piattaforma che offre 8 senza 5 sta offrendo un placebo — il monitor del canary esiste ma non è ancorato a nulla di degno di fiducia.
FAQ
Qual è la capacità di QA più importante per i rilasci di LLM personalizzati?
Un gate di qualità per fetta (capacità 4) — significa che la decisione di rilascio consuma punteggi di Spearman per dominio rispetto a un grader ancorato all’umano, non un singolo aggregato globale. I punteggi aggregati diluiscono le regressioni localizzate, e le regressioni localizzate sono la modalità dominante di fallimento di rilascio LLM del 2026[3]. Se puoi offrire solo una capacità da questa lista, offri la 4. Poi offri la 5, che è ciò che rende la 4 degna di fiducia.
Come si valuta una piattaforma di QA per LLM senza farla girare per sei mesi?
Applica la checklist a 12 capacità qui sopra alla documentazione del fornitore, con due test specifici. Primo, chiedi al fornitore di mostrarti l’output del gate per fetta per uno dei suoi clienti di riferimento — se hanno solo punteggi aggregati, non hanno la capacità 4. Secondo, chiedi cosa innesca il loro auto-rollback — se la risposta è “latenza, tasso di errore, e i nostri allarmi”, sono nel campo serving-canary e la capacità 10 manca.
Qual è la differenza tra strumenti eval-CI e strumenti di gestione del rilascio?
Gli strumenti eval-CI (Braintrust, Humanloop, Patronus) eseguono valutatori automatizzati al merge della PR e bloccano i merge difettosi. Non toccano mai il traffico live. Gli strumenti di gestione del rilascio (questa categoria) possiedono il manifest del rilascio, il canary, l’osservatore e il percorso di rollback. L’eval-CI è parte di un workflow di gestione del rilascio ma non ne è un sostituto. Molti team offrono uno dei due e scoprono il divario quando una regressione che è passata al CI colpisce silenziosamente la produzione.
Quanto veloce dovrebbe essere il rollback?
Nell’ordine di grandezza dei secondi, non dei minuti. Il tempo medio di rollback sulla pipeline di Divinci è di circa 12 secondi — questo è il drain delle richieste in volo su un servizio a ~100 repliche, non lo swap del manifest in sé, che è sub-secondo. Confronta con l’incidente Cloudflare del giugno 2022[8], che ha richiesto 44 minuti per essere annullato perché lo stato era suddiviso tra sistemi. La decisione architetturale che rende possibile secondi-non-minuti è il manifest di rilascio bundled (capacità 1 e 2).
Perché le ricevute di compliance contano più dei log di compliance?
Un log è qualcosa che hai scritto. Una ricevuta è qualcosa che un auditor può verificare senza fidarsi di te. L’EU AI Act e il NIST AI RMF[9] distinguono sempre più tra i due — “documentato” non è la stessa cosa di “dimostrabile”, e la direzione regolatoria va verso quest’ultimo. Una ricevuta con hash-chain, ancorata esternamente, è la tecnologia disponibile più semplice per superare quella linea.
Riferimenti
- Atlassian PIR April 2022. Post-Incident Review: April 2022 Outage. "The accelerated Restoration 2 approach took approximately 12 hours to restore a site." Citato per la capacità 1 — che aspetto ha lo stato-sparso-tra-sistemi su scala.
- W&B Models / MLflow registry. Weights & Biases Registry e MLflow Model Registry. Il lato solo-artefatto-del-modello della capacità 1. Nessuno dei due offre la registrazione del template del prompt.
- The Semver Lie. Tianpan — The Semver Lie: how an LLM minor update breaks production (aprile 2026). Nomina la modalità di fallimento per regressione slice-aware come lo schema dominante del 2026. Compagno: LLM postmortem template — fields SRE missed. Riferimento per la capacità 4.
- SageMaker Deployment Guardrails. Use canary traffic shifting e Auto-Rollback Configuration. Default
TerminationWaitInSecondsdi 600 (dieci minuti), massimo 1800 (trenta minuti). Il canary standard su metriche infrastrutturali con cui il post si contrappone sulle capacità 8 e 10. - Interno — flip atomico del routing tramite manifest di rilascio. Il tempo di rollback di ~12 secondi è il drain delle richieste in volo su un servizio a ~100 repliche; lo swap del manifest in sé è sub-secondo. Il numero viene dal nostro servizio, non da un benchmark. L'architettura che lo rende possibile è il manifest bundled della capacità 1.
- Varianza per categoria di LLM-come-giudice. Zheng et al., Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena (NeurIPS 2023). >80% di accordo complessivo GPT-4-vs-umano, con varianza per categoria dal coding (86%) alla scrittura (36–44%). Riferimento per la capacità 5 — perché un giudice calibrato deve essere per fetta.
- Confronto del campo observability. Arize Phoenix, Il confronto degli strumenti di observability 2026 di Confident AI. Tutti offrono monitoring e alerting; nessuno applica il rollback. Riferimento per l'inquadramento "monitor senza enforcement" della capacità 10.
- Outage Cloudflare giugno 2022. Cloudflare outage on June 21, 2022. "06:58: Root cause found and understood. Work begins to revert the problematic change… 07:42: The last of the reverts has been completed." 44 minuti da "sappiamo cosa annullare" al revert completo, in parte perché gli ingegneri si pestavano i piedi a vicenda sui revert. Riferimento per la capacità 11.
- NIST AI Risk Management Framework. NIST AI RMF. Governance, mapping, measurement, management — le quattro funzioni core su cui la capacità 12 si mappa. Più i requisiti di provenienza dell'EU AI Act su artificialintelligenceact.eu. Riferimento per la capacità 12.
Prossimo nella serie: Validare e rilasciare LM personalizzati nei settori regolamentati. La checklist di capacità qui sopra è generica. Il prossimo post è specifico: l’EU AI Act, l’Articolo 17 del GDPR, l’HIPAA e il NIST AI RMF — cosa chiede ciascuno a un processo di rilascio, quali capacità qui sopra coprono quale requisito, e dove la divisione open-weights / closed-weights cambia davvero la storia della compliance.
Ready to Build Your Custom AI Solution?
Discover how Divinci AI can help you implement RAG systems, automate quality assurance, and streamline your AI development process.
Get Started Today