Vai al contenuto
Tutti gli articoli

NTCmind / algoritmo

NTCmind. L’AI parte dal contesto.

Dalla domanda ai riferimenti: come NTCmind recupera il contesto normativo, costruisce la risposta e ne controlla la provenienza.

Una domanda sulla normativa ha un contesto: il documento, il paragrafo, le condizioni di applicazione. NTCmind nasce per affiancare questa lettura, collegando un modello linguistico ai contenuti strutturati di structural-codes.

Questa nota descrive la pipeline implementata in OCFEM: come vengono selezionati i testi, che cosa riceve il modello e quali controlli precedono la visualizzazione della risposta. Il codice e i parametri potranno evolvere; il principio resta rendere riconoscibile il percorso dalle fonti alla risposta.

01 / Il contesto precede la risposta

Il flusso parte dalla domanda, dalla conversazione e, quando presente, dal paragrafo aperto nel lettore della normativa. Il contesto del lettore può identificare anche un blocco, una formula o una tabella specifica.

Prima di usarlo, il sistema verifica che documento, numerazione e identificatori corrispondano al corpus. Un contesto incoerente viene rifiutato. Per arricchire la ricerca vengono considerate fino a tre precedenti domande dell’utente: le risposte dell’AI non diventano fonti normative.

La fonte primaria è structural-codes, che conserva separatamente NTC 2018 e Circolare 7/2019, insieme a gerarchia, provenienza e stato editoriale. Il PDF ufficiale registrato resta l’autorità editoriale del testo.

02 / Trovare i contenuti pertinenti

La ricerca prova prima a risolvere un riferimento esatto. Se la domanda non è interamente un riferimento, il sistema estrae i rimandi presenti nella domanda e nelle precedenti domande, poi interroga l’indice testuale del corpus con la domanda arricchita dallo storico.

L’indice assegna priorità a numerazioni, asset e titoli esatti; seguono combinazioni tra numerazione e parole chiave, termini nei titoli, frasi, prossimità e corrispondenze testuali. Questa implementazione usa ricerca testuale e risoluzione dei rimandi, senza un indice vettoriale separato.

I risultati vengono riuniti per unità normativa, conservando i motivi della selezione e gli eventuali blocchi richiesti. I riferimenti espliciti e il contesto del lettore hanno priorità; seguono il punteggio e un ordinamento deterministico degli identificatori. La base è di cinque unità principali, ma i riferimenti espliciti possono estendere questa selezione entro il budget del contesto.

03 / Leggere anche le relazioni

Un paragrafo isolato può perdere condizioni definite più in alto o dettagli sviluppati più avanti. Per questo il recupero aggiunge unità collegate: relazioni esplicite, rimandi entranti e uscenti, paragrafi superiori e, quando utili, sottoparagrafi.

Le relazioni esplicite confermate precedono quelle proposte; seguono i rimandi uscenti, quelli entranti, i paragrafi superiori e i sottoparagrafi. Le relazioni rifiutate sono escluse. Le relazioni proposte conservano il loro stato: non diventano automaticamente equivalenze tra NTC e Circolare.

I valori base prevedono cinque unità collegate e fino a due sottoparagrafi per unità. Questi ultimi vengono considerati soprattutto per riferimenti esatti, contesto del lettore o unità composte soltanto da titoli. Un eventuale filtro sul documento viene applicato anche alle relazioni.

04 / Costruire un contesto controllabile

I contenuti selezionati formano un Evidence Package: un pacchetto con domanda, identità del corpus, unità principali e collegate, blocchi, asset, provenienza, opzioni di ricerca e avvisi. Il suo identificativo deriva da un hash SHA-256 della rappresentazione JSON stabile del contenuto.

Il budget base è di 48.000 caratteri complessivi e 9.000 per unità. Se un’unità non entra interamente, vengono privilegiati i blocchi richiesti esplicitamente, poi quelli che contengono termini della domanda. I blocchi selezionati tornano nell’ordine della fonte.

La selezione conserva blocchi e asset interi: una tabella troppo grande viene omessa, anziché tagliata in celle prive di contesto. Il pacchetto dichiara se la selezione è parziale. Per le figure include metadati e riferimenti, senza attribuire al modello una lettura visiva dell’immagine.

05 / Generare con regole esplicite

Il modello riceve la conversazione, una copia del pacchetto, le direttive e uno schema di risposta JSON. Restituisce il testo in Markdown, riferimenti testuali, una classificazione e uno stato. Gli identificatori canonici dei riferimenti vengono ricostruiti dall’applicazione, anziché affidati al modello.

Le direttive chiedono di fondare le attribuzioni alle NTC o alla Circolare sui contenuti realmente disponibili. Il modello può usare conoscenza ingegneristica generale per spiegare e ragionare, distinguendola dalle prescrizioni normative. Una lettura coordinata resta un’interpretazione; la sola assenza di una regola nel contesto non dimostra che la normativa non la preveda.

La classificazione distingue riferimento diretto, più riferimenti diretti, interpretazione e ragionamento senza riferimento diretto. Lo stato distingue risposta, risposta parziale e astensione. Una spiegazione tecnica utile può quindi essere fornita anche senza una prescrizione normativa diretta. La pipeline non esegue ricerche sul web.

06 / Risolvere, ampliare, rigenerare

L’applicazione estrae i riferimenti dal testo e dall’elenco dichiarato dal modello, li risolve contro il corpus e costruisce le citazioni con documento, numerazione e asset corretti. Segnala riferimenti assenti o ambigui e riunisce quelli che puntano allo stesso contenuto.

Un riferimento può esistere nel corpus senza essere stato fornito al modello. In quel caso viene tentata una sola espansione del contesto, con fino a dodici riferimenti aggiuntivi, dodici unità principali in più e 12.000 caratteri aggiuntivi. Se l’espansione recupera contenuti richiesti, la risposta viene generata di nuovo sul nuovo pacchetto.

Se restano problemi, il modello riceve le anomalie e la risposta precedente per un tentativo di correzione. Può seguire una rigenerazione conservativa. Il flusso consente al massimo quattro generazioni logiche: iniziale, eventuale espansione, correzione e tentativo conservativo. Una risposta con anomalie ancora attive viene bloccata.

domanda + contesto del lettore
  → ricerca e relazioni
  → pacchetto di contenuti
  → generazione
  → risoluzione dei riferimenti
  → eventuale espansione e rigenerazione
  → eventuale correzione
  → validazione finale
  → risposta con riferimenti navigabili

07 / Che cosa viene verificato

La validazione ricalcola l’identificativo del pacchetto e confronta l’identità del corpus. Controlla metadati, provenienza, contenuto e ordine dei blocchi, asset, selezione dichiarata e budget. Verifica anche che documento, numerazione e destinazione delle citazioni corrispondano ai record canonici.

La pipeline controlla che i riferimenti risolti siano presenti nel contesto usato per la generazione. L’identificativo del pacchetto restituito dal modello viene normalizzato dall’applicazione. La canonicalizzazione conserva il testo della risposta: una correzione del testo richiede una nuova generazione.

Questi controlli verificano integrità, provenienza e risoluzione dei riferimenti. Non dimostrano automaticamente che una citazione sostenga ogni frase né certificano la correttezza di un’interpretazione ingegneristica. L’ancoraggio al contesto rende il percorso ispezionabile, mantenendo necessaria la lettura critica delle fonti.

08 / Tornare alla fonte

La risposta viene accompagnata da riferimenti navigabili, identità del corpus, informazioni sul contesto ridotto ed eventuali avvisi. Dal pannello NTCmind il lettore può tornare al contenuto citato e confrontarlo con la spiegazione.

L’idea è questa: l’AI affianca il progettista dentro il contesto che sta esplorando. Il testo normativo resta accessibile, il ragionamento resta distinguibile e i riferimenti possono essere controllati.

Il codice

I moduli di riferimento per seguire l’algoritmo nell’implementazione OCFEM.