
Un RAG sui documenti non basta: senza citazioni gli errori restano invisibili

Per costruire un assistente che risponda sui propri documenti, carica i file in un vector store, cerca i passaggi pertinenti entro il perimetro della domanda e genera la risposta solo da quelli. Associa poi ogni affermazione al passaggio che la sostiene: senza questo collegamento, una risposta plausibile non permette di vedere se il sistema ha usato la fonte giusta.
La verifica riguarda due momenti distinti. Prima bisogna accertare che la ricerca abbia trovato un brano utile e ammesso dai filtri; poi che la risposta ne rispetti il contenuto. Se il brano manca, l’assistente deve dichiarare il limite dei documenti disponibili. Se le fonti ammesse divergono, deve rendere visibile la divergenza.
Preparare i documenti prima dell’indicizzazione
La tracciabilità comincia dal file originale. Conserva per ciascun documento un identificativo stabile, un titolo comprensibile, la versione, il periodo di validità e un percorso che consenta a un lettore autorizzato di aprirlo. Se una citazione deve arrivare alla pagina o alla sezione, registra anche quel riferimento nel tuo catalogo: il solo nome del file indica la provenienza, ma non il punto preciso da controllare.
Come esempio ipotetico, considera due versioni di una procedura interna sui resi. Caricale come file distinti e assegna attributi coerenti, per esempio lingua, reparto e stato della versione. La guida OpenAI al Retrieval descrive vector store, caricamento con upload_and_poll, indicizzazione automatica, ricerca dei passaggi, filtri sugli attributi e soglie di pertinenza. Nel medesimo esempio, attendi il completamento dell’elaborazione prima di interrogare l’indice e conserva la corrispondenza fra file_id e originale consultabile.
Gli attributi usati per filtrare appartengono al file indicizzato. Se un PDF contiene procedure di reparti diversi o versioni valide in periodi diversi, un unico attributo rischia di descriverlo male: separa i contenuti in file coerenti prima del caricamento. Mantieni nel catalogo anche le informazioni che servono alla visualizzazione della fonte, come il titolo leggibile e l’eventuale posizione del brano nell’originale.
Recuperare passaggi pertinenti nel perimetro corretto
Nell’esempio dei resi, una domanda sulla procedura italiana corrente deve cercare soltanto fra i file con lingua e versione appropriate. Il filtro si applica prima della ricerca semantica; un documento escluso non deve tornare utile solo perché contiene parole simili alla domanda. La stessa regola vale per reparto e autorizzazioni: il testo recuperato può entrare nella risposta soltanto se rientra nel perimetro consentito.
Una chiamata di ricerca al vector store usa la domanda come query e restituisce passaggi con testo, punteggio e file di origine. Puoi combinare condizioni sugli attributi e impostare una score_threshold nelle opzioni di ranking. Una soglia più alta scarta risultati deboli, ma può perdere anche il brano necessario; scegli il valore su domande rappresentative, osservando insieme i passaggi corretti recuperati e quelli impropri che restano nei risultati.
Il punteggio esprime quanto il sistema di ricerca considera pertinente un passaggio, non se quel passaggio risponde davvero. Prima di chiamare il modello, costruisci quindi un elenco delle evidenze ammesse: per ogni estratto conserva un identificativo, il file_id, il testo effettivamente inviato e il riferimento all’originale. Se i risultati sono vuoti, oppure trattano l’argomento senza contenere la risposta richiesta, il sistema deve fermarsi prima di produrre una conclusione fattuale.
Questo controllo evita anche un errore meno evidente dei risultati vuoti. Un brano può parlare di resi, ma riferirsi a un’eccezione o a una versione superata della procedura. Il filtro limita i file candidati; la lettura del passaggio stabilisce se vi sia davvero la condizione necessaria per rispondere alla domanda specifica.
Collegare ogni affermazione al suo estratto
Passa al modello soltanto gli estratti ammessi, ciascuno con il proprio identificativo, e chiedi una risposta breve che citi l’evidenza usata per ogni affermazione sostanziale. Prevedi esplicitamente la risposta «non risulta dai documenti disponibili» quando l’evidenza non basta. Dopo la generazione, il codice applicativo deve verificare che tutti gli identificativi citati siano presenti nell’elenco dei brani recuperati e rispettino gli stessi filtri della ricerca.
Le indicazioni OpenAI sulle citazioni distinguono il documento intero, il blocco di testo e l’intervallo di righe come unità citabili, e propongono identificativi stabili per collegare la risposta ai passaggi. Per un assistente documentale, mostrare il titolo del file insieme all’estratto pertinente è più preciso che indicare soltanto il file. Se il catalogo conserva una pagina o una sezione affidabile, puoi offrire anche il collegamento diretto a quel punto.
Un riferimento formalmente valido non basta a dimostrare che una frase sia corretta. Un controllo automatico può rilevare un identificativo inesistente o un file escluso; la verifica del contenuto deve anche confrontare l’affermazione con il brano citato. Se la risposta dipende da più condizioni, separa le affermazioni e associa a ciascuna i passaggi necessari: un estratto che cita una regola generale può non sostenere l’eccezione aggiunta dal modello.
Valutare assenze, conflitti e aggiornamenti
Prepara un insieme di prove che registri, per ogni domanda, i documenti ammessi, il passaggio atteso e il comportamento desiderato della risposta. Le indicazioni LangSmith sulle valutazioni descrivono dataset con risposte di riferimento, controlli deterministici e test di regressione. In questa pipeline conviene valutare separatamente il recupero, la validità delle citazioni e l’aderenza del testo alla fonte: una risposta corretta associata al documento sbagliato resta difficile da verificare.
- Risposta presente: il passaggio atteso compare fra i risultati ammessi e le affermazioni della risposta rimandano a estratti che le sostengono.
- Documento assente: la domanda riguarda un fatto plausibile che non compare nei file ammessi; la risposta dichiara che manca una base documentale, senza inventare una citazione.
- Fonti in conflitto: due documenti ammessi danno indicazioni diverse; la risposta espone entrambe con i rispettivi riferimenti, oppure applica una regola di precedenza stabilita prima della prova.
- Filtro per attributi: un file pertinente nel testo, ma escluso per lingua, reparto o versione, non appare né fra le evidenze né nelle citazioni.
- Documento aggiornato: dopo l’ingresso della nuova versione, la risposta usa quella corrente e smette di citare la precedente.
Per ogni caso registra separatamente se il passaggio atteso è stato recuperato, se le citazioni puntano a brani ammessi, se questi sostengono le frasi e se il sistema si astiene quando manca una risposta. Ripeti le stesse prove dopo modifiche ai documenti, ai filtri, alla soglia o al modello: il confronto mostra se un miglioramento su una domanda ha peggiorato casi già risolti.
Quando sostituisci una procedura, escludi subito la versione precedente tramite l’attributo di validità e ripeti la ricerca sui casi interessati. La cancellazione dall’indice può diventare visibile con un ritardo; per questo la versione ammessa deve essere decisa dal filtro e verificata anche nelle citazioni restituite. Il risultato atteso non è soltanto una risposta aggiornata, ma una risposta il cui estratto possa essere aperto e controllato.
Articoli correlati


L’IA entra nelle scuole UE, ma l’effetto sulle competenze resta incerto

Prompt injection negli agenti IA: il filtro da solo non basta

DNS over HTTPS protegge le richieste, non rende anonima la navigazione

Il backup 3-2-1 non basta se non provi davvero il ripristino

LangGraph con approvazione umana: senza checkpoint l’agente non riparte
Iscriviti alla nostra newsletter
Ricevi le ultime notizie su Web3, IA e cripto direttamente nella tua casella di posta.