Luca Morelli
Analista programmatore
Team lead

Applicazioni con IA integrata: il modello dove serve, il codice dove conta l'esattezza.

Il caso più complesso su cui ho lavorato finora è un RAG misto: un'applicazione che, a partire da documenti di consegna importati, permette di interrogare i dati aziendali in linguaggio naturale. È il classico "chatta con i tuoi dati", con un requisito che cambia tutto: la precisione.

Il dato deve coincidereCon quello del gestionale, non somigliargli.
Progetto in corsoUna competenza in crescita, non una specializzazione consolidata: le tecnologie cambiano rapidamente.
RAGPythonPostgreSQLQdrantModelli open

Il problema: la precisione

Se chiedi quali sono i prodotti più venduti in un periodo, il risultato deve coincidere con quello che dice il gestionale.

Un vector store classico, con la sola ricerca semantica, non garantisce questa precisione. Servono sia un vector store sia un database relazionale, con i documenti importati in modo adeguato. Dentro l'applicazione serve poi una procedura mista, in parte deterministica e in parte basata su un modello linguistico: la domanda viene analizzata e, a seconda del tipo di richiesta, gestita in modo diverso.

Lo sforzo cresce molto più della precisione che si ottiene. Il risultato è un flusso di gestione complesso, come quello qui sotto.

Il flusso di una domanda

Il modello linguistico interviene al massimo in tre punti; conteggi, somme, filtri e citazioni restano codice deterministico.

Codicepassaggio deterministicoModellochiamata a un modello linguistico

Preparazione nulla viene ancora eseguito

  1. 01DomandaCodice

    La domanda in linguaggio naturale, con gli eventuali filtri espliciti di chi la pone.

  2. 02Riconoscimento dei valoriCodice

    Cerca nella domanda i valori che esistono davvero nei dati, come nomi e codici, e le indicazioni di quantità.

  3. 03Percorsi rapidiCodice

    Le domande più frequenti vengono riconosciute da regole deterministiche, senza interpellare un modello.

  4. 04Controllo di coperturaCodice

    La domanda è spiegata per intero? Se una parte resta scoperta, il percorso rapido viene scartato invece di dare una risposta parziale.

  5. 05ClassificazioneModello

    Solo se nessun percorso rapido basta: il modello indica se la domanda chiede un'analisi o una ricerca.

  6. In base alla classificazione, una delle due strade:

    06aCompilazioneCodice

    Per le analisi, un compilatore deterministico traduce la domanda in un piano.

    06bPianificazioneModello

    Per le ricerche, il modello propone da uno a tre passi in JSON tipizzato. Il codice li valida: schema, filtri di chi chiede, termini non usati.

  7. 07Risoluzione dei valoriCodice

    Ogni valore del piano viene confrontato con i dati reali. Se è sconosciuto o ambiguo, si chiede un chiarimento.

  8. 08Piano preparatoCodice

    Se nel frattempo i dati sono cambiati, la preparazione si ripete: un piano non aggiornato non viene mai eseguito.

Esecuzione

  1. In base al tipo di piano, una delle due strade:

    09aAnalisi e aggregatiCodice

    Conteggi, somme e analisi li calcola il database; testo e citazioni li genera il codice. Nessun modello.

    09bRicercaCodice

    Ricerca esatta nel database o semantica su un indice vettoriale, confermata poi sui dati attivi. Al massimo 40 evidenze.

  2. 10Stesura della rispostaModello

    Solo per le ricerche: il modello scrive la risposta citando gli identificativi delle evidenze ricevute.

  3. 11Verifica delle citazioniCodice

    Il server controlla ogni identificativo e ricostruisce le citazioni. Un riferimento sconosciuto fa fallire la richiesta.

  4. 12RispostaCodice

    Testo, stato, piano eseguito e citazioni, con le note sui limiti applicati.

Le altre uscite

  • Chiarimento o domanda non supportata. Quando il piano non si può costruire con certezza: un testo deterministico, mai una risposta inventata.
  • Errore. Se la validazione fallisce, se il modello cita un'evidenza inesistente o se i dati continuano a cambiare: la richiesta fallisce invece di restituire una risposta dubbia.

Dove sta l'autorità

  • I filtri espliciti di chi pone la domanda prevalgono su qualunque filtro proposto da un modello.
  • I modelli restituiscono solo JSON verificato con uno schema; nessuno di loro scrive SQL.
  • Conteggi, somme e analisi li calcola il database e li presenta il codice: non passano mai dal modello che scrive la risposta.
  • La ricerca semantica trova solo candidati; il database li conferma solo se appartengono ai dati attivi.
  • La risposta può citare solo evidenze fornite dal server, e le citazioni vengono ricostruite lato server.

Come si sviluppa

Ogni fase testata da subito

Un flusso così va analizzato e verificato passo per passo fin dall'inizio. Altrimenti si passano giorni a scrivere codice e, alla prima prova, il risultato è sbagliato senza capire dove comincia il problema.

Validazioni intermedie

Ogni passaggio ha un proprio controllo, basato su dati importati con un significato preciso: si sa sempre in quale punto un risultato smette di essere corretto.

Domande reali del cliente

Lo sviluppo è guidato da una serie di domande realistiche raccolte con il cliente. In questo scenario non credo si possa dire "chiedi quello che vuoi e ti risponderà".

Modello online o locale

Il metodo serve anche perché il risultato dipende molto dal modello usato, e nessuna delle due strade è gratuita.

Servizi online

API di ChatGPT o servizi simili: le prestazioni sono migliori, ma

  • il costo è per chiamata, e con un carico elevato cresce in fretta;
  • la privacy dipende da cosa arriva al modello. In questo progetto la parte sensibile la estrae il codice deterministico, e il modello non la vede.

Modello open su un proprio server

Un modello open su un server con GPU evita entrambi i problemi, ma

  • l'hardware costa: oltre 5.000 € per una scheda da 32 GB;
  • con Qwen3.8 27B su 32 GB si reggono 2–3 richieste contemporanee;
  • una richiesta richiede 10 secondi e oltre, e l'esecuzione va ottimizzata;
  • i modelli più piccoli perdono precisione, e molti gestiscono male l'italiano.

Per la mia esperienza diretta, tutto questo richiede un'analisi e uno sviluppo molto precisi, con un'attenzione scrupolosa alle esigenze del cliente: il contrario di quello che si legge spesso online.

Il mio punto di vista sugli approcci agentici

Cerco di basarmi su quello che tocco con mano e sperimento. Ho visto e analizzato anche i framework agentici, ma con i vincoli infrastrutturali descritti sopra credo che, in contesti normali, sia molto difficile proporre una soluzione basata su chiamate multiple a un modello. Può avere senso a tre condizioni:

  1. servizi online ad alta velocità, a un costo relativamente alto;
  2. un costo maggiore per ogni richiesta elaborata;
  3. un uso riservato a richieste ad alto valore aggiunto, quindi limitate, e non uno strumento aperto a qualsiasi utente, che porterebbe a una spesa elevata con poco ritorno.

Non credo di essere il solo a vederlo. Diverse aziende, anche grandi, si stanno spostando verso modelli open, ospitati in cloud o su hardware da data center, abbinati ad architetture agentiche che vanno sviluppate e tarate su misura, perché lì la variabilità è molto più alta.

In definitiva, "sentiamo cosa dice ChatGPT" non è più una strategia che regge.

State valutando l'IA nelle vostre applicazioni?

Curriculum dettagliato e referenze su richiesta.