Setek Srl
News

Il ragionamento che tronca: quando il modello consuma il budget della risposta

Per settimane SETEK ha cercato nel recupero documentale la causa di un difetto che stava nella generazione. In un assistente conversazionale che risponde su un corpus documentale (Vertex AI RAG Engine con Gemini 2.5 Flash), circa il 20% delle domande riceveva quello che sembrava un rifiuto — «non ho informazioni su questo argomento nei documenti disponibili». Un rifiuto punta naturalmente al recupero: sono stati esplorati dimensione dei frammenti, soglia di distanza, instradamento per categoria, riordinatore semantico. Nessuna di queste indagini ha spiegato il residuo.

Il difetto era invisibile perché il codice non registrava il campo «finishReason», che dichiara come la generazione si è conclusa: senza quel dato, una risposta troncata e un rifiuto sono lo stesso evento. Un dato che non si registra non è solo un dato mancante: reindirizza attivamente l'analisi, perché il difetto si traveste da un altro difetto già noto.

Il meccanismo: i modelli con ragionamento interno producono, prima del testo destinato all'utente, una catena di ragionamento non mostrata, i cui token si scalano dallo stesso tetto della risposta. Lasciato dinamico, quel ragionamento si è dilatato fino a 984 token su 1024, lasciandone 36 alla risposta — il tempo di iniziare una frase e finire lo spazio. Anche fra le risposte concluse regolarmente, la mediana del ragionamento era di 559 token su 1024: più di metà del budget non arrivava mai all'utente.

La verifica è stata condotta a contesto congelato — un solo recupero per domanda, lo stesso prompt identico byte per byte a tutte le configurazioni — su 89 domande, di cui 50 controlli negativi deliberatamente estranei al dominio. Dichiarando il budget di ragionamento e sommandolo al tetto, le troncature sono passate da 20 su 39 a zero, con 50 controlli corretti su 50 in tutte le configurazioni: il sistema non è diventato più incline a rispondere a ciò a cui deve rifiutarsi.

Le regole che SETEK ne ricava valgono per qualunque sistema costruito su modelli con ragionamento interno, indipendentemente dal fornitore: dichiarare sempre il budget di ragionamento, perché il valore dinamico si prende tutto lo spazio che trova; far valere per la sola risposta il tetto esposto all'amministratore, sommandovi il budget di ragionamento; registrare sempre come ogni generazione si è conclusa; congelare tutto il resto quando si confrontano configurazioni; trattare i controlli negativi come i casi positivi; considerare ogni livello di cache un moltiplicatore di difetti, perché conserva la prima risposta e non quella media; ripetere più volte le prove di sicurezza, che contro un sistema non deterministico producono una stima e non un esito binario.