Nel precedente articolo ci siamo concentrati sull'infrastruttura IA privata e su come far girare un modello privato su larga scala. In questo post mostriamo cosa può fare concretamente quell'infrastruttura: costruire una pipeline di classificazione dei documenti pronta per la produzione, senza bisogno di fine-tuning o dati di addestramento.
L'approccio Naive
L'errore più comune quando si sviluppa con gli LLM è la "trappola del tentativo unico" (one-shot trap): prendi un file, definisci un elenco di categorie e fai al modello una domanda diretta come questa:
Classify this file into one of these categories:
- driver license
- identity card
- passport
- other
Return only the category name.
Su un set di demo pulito, il risultato può sembrare sorprendentemente buono. Un moderno Vision-Language Model spesso riesce a dedurre abbastanza informazioni dalla prima pagina da produrre un'etichetta plausibile. Di solito è a questo punto che i team iniziano a credere di avere un classificatore pronto.
In produzione, però, questa illusione dura molto poco. I flussi di documenti reali sono caotici: un singolo file può contenere più pagine, più documenti, scansioni ruotate, pagine vuote e così via. In queste condizioni, la domanda "di quale categoria è questo file?" è troppo ampia. Costringe il modello a risolvere molti piccoli problemi tutti in una volta.
Questo crea immediatamente tre colli di bottiglia:
- Sovraccarico di compiti (Task Overload): a un singolo prompt viene chiesto di fare contemporaneamente segmentazione della pagina, rilevamento dei documenti, ragionamento sull'orientamento, comprensione del testo e selezione della categoria. Questo non è un singolo compito: è un intero workflow di ricezione compresso in una sola chiamata al modello.
- Nessuna scomposizione strutturale: un file è spesso un contenitore, non un singolo documento. Un solo PDF può includere diversi tipi di documenti, pagine vuote, foto o scansioni che dovrebbero essere separate prima della classificazione. Se si chiede un'etichetta al modello troppo presto, l'input è già stato impostato nel modo sbagliato.
- Latenza e costi elevati: finisci per sprecare costose inferenze del modello su un problema ampio e rumoroso, quando la maggior parte del lavoro avrebbe dovuto essere suddivisa in decisioni più economiche e mirate. Inviare 30.000 token a un modello da 27B solo per ottenere una risposta di una parola come "Fattura" è un enorme spreco di potenza di calcolo.
Un modo migliore di impostare il problema
La soluzione è semplice: dividere il problema in problemi più piccoli.
Puoi ottenere ottimi risultati da un modello privato più piccolo se suddividi il flusso di lavoro in decisioni mirate e lasci che sia il codice deterministico a orchestrare la sequenza. Al modello non dovrebbe essere chiesto di "capire l'intero flusso di ricezione". Dovrebbe invece rispondere a una serie di domande ben delimitate:
- Questa pagina è vuota, è una foto o un documento?
- Questa immagine contiene più di un documento al suo interno?
- La pagina è ruotata?
- What text can be extracted from it?
- Which pages belong together?
Ognuna di queste domande è più semplice dell'intero problema di classificazione. A ciascuna si può rispondere con un prompt breve e un formato di output vincolato. Quando queste decisioni locali vengono combinate, il sistema complessivo diventa molto più affidabile di un classificatore monolitico.
Questo è esattamente l'approccio che rende pratici i modelli privati. Non stai competendo con i modelli di frontiera sul ragionamento aperto. Stai progettando un sistema in cui il modello deve solo prendere decisioni circoscritte e ad alto segnale.
La Pipeline
Nella nostra implementazione, il classificatore è costruito come una pipeline a fasi. Se seguiamo il flusso di esecuzione effettivo, si presenta così:
1. Trasformare ogni input in singole pagine
I PDF vengono renderizzati pagina per pagina. Le immagini vengono convertite in un formato standard in memoria. Alla fine di questa fase, il sistema ha un elenco di singole pagine che possono essere elaborate tutte allo stesso modo.
2. Rilevare le pagine con più elementi e ritagliarle
Ogni pagina viene controllata per vedere se contiene più di un elemento visibile. In caso positivo, il sistema estrae ritagli separati in modo che ogni documento o immagine possa essere elaborato in autonomia.Questo è uno dei motivi più evidenti per cui il classificatore ingenuo fallisce: se un singolo file caricato contiene sia una patente che una carta d'identità, chiedere un'unica etichetta è già in partenza la domanda sbagliata.
3. Rilevare il tipo di pagina e scartare quelle vuote
La decisione successiva non è ancora l'etichetta di business definitiva. Per prima cosa, il sistema decide se ogni elemento è un documento, una foto o una pagina vuota.Le pagine vuote vengono rimosse. Le foto vengono immediatamente indirizzate a una categoria specifica. Le pagine con documenti proseguono lungo la pipeline dedicata.
4. Rilevare e correggere la rotazione
Solo le pagine di tipo documento passano attraverso il rilevamento dell'orientamento. Se una pagina è ruotata, viene raddrizzata prima dell'avvio dell'OCR. Questo passaggio è fondamentale perché l'estrazione successiva diventa molto più affidabile se la pagina è orientata nel verso giusto.
5. Avviare l'OCR e assegnare una categoria iniziale
Dopo la rotazione, il sistema esegue l'OCR su ciascuna pagina del documento. Estrae le informazioni strutturate dalla pagina e assegna una categoria iniziale.In questa implementazione, il lavoro semantico è concentrato nelle fasi visive e di OCR, mentre l'etichetta aziendale finale viene assegnata in modo prudente a partire dalle informazioni estratte utilizzando regole deterministiche. Se le prove sono deboli, la pagina viene lasciata come "sconosciuta". Questo è un principio di produzione importante: è meglio astenersi piuttosto che forzare un'etichetta sicura ma sbagliata.
6. Raggruppare le pagine correlate, recuperare le sconosciute e consolidare per categoria
Se alcune pagine risultano ancora sconosciute, la pipeline avvia una fase di raggruppamento per determinare quali pagine debbano stare insieme. Il risultato del raggruppamento viene convalidato e le pagine sconosciute possono così ereditare il contesto dalle pagine vicine nello stesso sottoinsieme, a patto che ci siano prove sufficientemente forti.
Questa fase di raggruppamento non è il classificatore principale. È un meccanismo di recupero che aiuta a gestire le pagine ambigue dopo il primo passaggio. Una volta che ogni pagina ha una categoria utilizzabile, la pipeline consolida le pagine in base all'etichetta finale, in modo che gli output correlati possano essere gestiti insieme nelle fasi successive.
Questo è ciò che trasforma il classificatore da un semplice prompt a un vero e proprio flusso di lavoro. Il modello non prende un'unica grande decisione; prende una sequenza di decisioni più piccole, e il codice circostante dà a queste decisioni struttura, convalida, comportamenti di fallback e percorsi di recupero.

