
La disposizione era reale. La risposta era comunque illegale.
La prima risposta che abbia mai visto dare a un chatbot governativo con sicurezza e in modo sbagliato riguardava un voucher della Section 8.
Un proprietario chiede, in parole semplici, se può rifiutare un inquilino che pagherebbe l'affitto con un voucher abitativo. La risposta corretta è no. Rifiutare è discriminazione basata sulla fonte di reddito ai sensi del NYC Admin. Code § 8-107(5), e la Human Rights Commission della città può irrogare sanzioni civili fino a 250.000 $ per una violazione dolosa. Non è una domanda trabocchetto. È diritto consolidato. E nell'ottobre 2023 il bot MyCity della stessa New York City, in esecuzione su Azure AI, ha detto ai titolari d'impresa e ai proprietari l'opposto. The Markup lo ha documentato nel marzo 2024: il bot diceva che i proprietari potevano respingere i titolari di voucher, che i negozi potevano diventare cashless, che i datori di lavoro potevano intascare una fetta delle mance dei propri dipendenti. Ognuna di quelle risposte era illegale, e ognuna portava il sigillo della città su un dominio .gov.
Non ho costruito CivicCite perché un modello aveva allucinato. L'ho costruito per le risposte che erano quasi giuste, e voglio raccontarti quella che ha cambiato il modo in cui penso all'intero problema. Se vuoi vedere la cosa stessa, vive qui: veriprajna.com/it/demos/ai-governativa-che-cita-la-legge-o-tace. Il corpus è un grafo demo sintetico ma fedele, non consulenza legale. Ma il meccanismo è reale, e il meccanismo è la parte su cui vale la pena discutere.
Il momento che mi è rimasto impresso non è stato il bot che inventava una legge. È stato osservare la mia stessa pipeline estrarre la disposizione corretta e comunque redigere la risposta sbagliata.
La settimana in cui ho aggiunto il recupero a un problema che il recupero non può toccare
Ho iniziato come iniziano quasi tutti in GovTech, convinto che la soluzione a un chatbot che mente fosse un recupero migliore. Dai al modello l'effettivo codice comunale. Ancorare ogni risposta a una disposizione reale. Retrieval-augmented generation, la risposta standard alla paura standard, cioè che il modello inventi. È una storia limpida, funziona splendidamente in demo, e ci ho creduto più a lungo di quanto avrei dovuto.
Poi ho letto i numeri di Stanford e hanno rovinato la storia. Magesh e colleghi, in uno studio del 2025 pubblicato tramite JELS, hanno misurato i due strumenti di ricerca legale costruiti apposta che fanno esattamente questo. Lexis+ AI allucinava sul 17% delle query. L'AI-Assisted Research di Westlaw allucinava sul 33%. Questi non sono chatbot giocattolo. Sono sistemi che recuperano prima la disposizione e generano dopo, costruiti da aziende il cui intero business è avere ragione sulla legge. Circa una risposta su tre del secondo strumento era comunque sbagliata. Il recupero migliorava la bozza. Non rendeva la risposta sicura da rilasciare.
Voglio essere onesto su come mi sono sentito, perché avevo appena passato una settimana a costruire la stessa architettura e a sentirmi furbo. La mia pipeline scomponeva la domanda del cittadino in sotto-domande legali atomiche, recuperava disposizioni candidate da un grafo del codice comunale e vincolava il modello a redigere solo da ciò che aveva recuperato. Sulla domanda della Section 8 ha fatto tutto bene fino all'ultimo passo. Ha trovato § 8-107(5). La disposizione corretta. Ha estratto il testo esatto sulla fonte lecita di reddito. E poi ha redatto una frase che, in sostanza, diceva sì, puoi rifiutare il voucher.
La legge giusta. La risposta sbagliata. L'una sull'altra nella stessa bozza.
Il recupero consegna al modello la disposizione corretta. Non fa nulla per impedire al modello di leggere quella disposizione al contrario.
Quella è stata la settimana in cui il problema ha cambiato forma per me. Avevo trattato l'allucinazione come il nemico, e l'allucinazione è reale, ma è il fallimento che puoi immaginare di intercettare. Il fallimento che ha davvero rilasciato le risposte di MyCity è più sottile e peggiore: la disposizione giusta citata, la conclusione sbagliata enunciata. Nessuna fabbricazione da nessuna parte nella frase. Niente che un filtro "hai inventato questo?" possa intercettare, perché niente era inventato. Solo una lettura sicura e sbagliata di una legge che era proprio lì. Quella modalità di fallimento è invisibile al recupero, perché il recupero controlla solo che la disposizione sia presente, mai che la frase l'abbia letta nel verso giusto.
Cosa è peggio, una legge inventata o una reale letta al contrario?
Continuavo a tornare a quella domanda, e la mia risposta diventava sempre più certa. La legge inventata è il fallimento più sicuro.
Pensa a cosa fa un cittadino con ciascuna. Una disposizione palesemente fabbricata suona strana, cita una sezione del codice che non risolve, dà una sensazione di stonato. Una disposizione reale letta al contrario suona perfetta. Ha una citazione genuina. La sezione esiste. Un proprietario legge "sì, puoi rifiutare il voucher," vede un numero di codice reale attaccato, e agisce di conseguenza. Ora c'è un rifiuto illegale, un inquilino con una pretesa di discriminazione, e una traccia cartacea che riporta a una risposta governativa. La correttezza della citazione è esattamente ciò che rende pericolosa la conclusione sbagliata. È la credenziale su cui cavalca il cattivo consiglio.
Quindi il controllo a cui tenevo di più non è mai stato "questa citazione è reale." Era "questa citazione sostiene davvero questa frase." Nella pipeline quel controllo è l'entailment: data l'affermazione redatta e il testo esatto della disposizione citata, il testo entaila l'affermazione, la contraddice, o né l'uno né l'altro. Sulla bozza della Section 8, il "sì" del modello viene intercettato come contraddetto da § 8-107(5), perché la disposizione dice chiaramente l'opposto. La bozza muore lì. Ciò che sopravvive, e ciò che il gate alla fine rilascia, è l'affermazione corretta: un proprietario non può rifiutare, ed ecco la disposizione che lo dice.

La cosa su cui ho insistito, e il motivo per cui quella schermata esiste, è che l'entailment non è una black box in cui bisogna credere. Puoi aprire lo stage Verify e leggere il suo input e output grezzi: l'affermazione redatta, il testo normativo contro cui è stata controllata, l'etichetta, e il motivo nelle parole stesse della disposizione. Un verdetto che non puoi ispezionare non è verifica. È una seconda opinione con migliori valori di produzione. Avevo già imparato, nel modo costoso, che chiedere a un modello di arbitrare un altro modello ti dà solo due modelli d'accordo, che è una cosa più debole di quanto sembri.
La mossa che alla fine ha funzionato è stata smettere di cercare di rendere il modello affidabile
Ricordo esattamente il ribaltamento di prospettiva, perché sembrava una resa e si è rivelato l'intero design. Ho smesso di cercare di rendere il modello affidabile e ho iniziato a rendere irrilevante la sua affidabilità.
Il passaggio è questo. Il language model in CivicCite è un consulente. Scompone la domanda, redige una risposta candidata, offre un'opinione di entailment. Non arriva mai a rilasciare nulla. Fuori dal framework degli agenti, in semplice Python deterministico, c'è una cosa che chiamo Statutory Decision Gate, e rilascia una sotto-risposta solo quando quattro condizioni valgono contemporaneamente: la citazione esiste, la disposizione è in vigore, il testo citato entaila l'affermazione, e nulla è in conflitto con essa. Manca una sola e la risposta non viene rilasciata. Due di quei controlli sono pura aritmetica e logica. In vigore è un confronto di date: la disposizione non ha data di abrogazione e la sua data di entrata in vigore è uguale o precedente alla data di riferimento. Il conflitto è una lettura del grafo. Non c'è prompt, non c'è temperature, non c'è modo di persuaderlo.

Ora ripeto di continuo due frasi. Una è gli agenti consigliano, il gate decide. L'altra è che un LLM non può farsi passare oltre il gate votando se stesso, per quanto sicura sia la sua bozza. Questo conta più di quanto sembri, perché il fallimento seducente in tutto questo campo è lasciare che il modello valuti il proprio lavoro e chiamare il voto "verifica." Un modello che redige la risposta non può essere la cosa che certifica che la risposta è sicura. Il gate è deliberatamente più stupido del modello e deliberatamente fuori da esso, ed è l'intero punto. L'intelligenza propone. Il codice dispone.
Il modello è un buon scrittore e un cattivo giudice. Quindi lo lascio scrivere, e non lo lascio mai giudicare.
La demo è onesta sui suoi limiti, e lo sarò anche io. Il corpus è un grafo sintetico ma fedele del codice comunale, parafrasato da disposizioni reali, non una fonte ufficiale di riferimento. Il routing di escalation 311 è calcolato e mostrato, ma il connettore a un sistema di casi reale è uno stub. La redazione vincolata usa un validatore a allowlist e una ri-richiesta piuttosto che la decodifica token-level di produzione. Ciò che è reale è la logica decisionale, e la logica decisionale è il prodotto.
Perché mi fido del silenzio più di quanto mi fidi di una buona risposta
Non mi aspettavo di essere orgoglioso della demo che rifiuta di rispondere, e ora è la mia cosa preferita che fa. L'esempio più chiaro è un food truck.
Un venditore chiede se può lasciare il suo camion parcheggiato in uno spazio a parcometro tutto il giorno sotto la regola generale di parcheggio per i vendor. L'assistente semplice risponde allegramente e in modo sbagliato, citando una regola come se fosse in vigore. Anche CivicCite redige un candidato, e il candidato cita una disposizione di parcheggio che è stata abrogata. Poi gira il controllo di attualità. La disposizione ha una data di abrogazione. In vigore fallisce. E invece di ripiegare su qualche regola adiacente e bluffare, il gate trattiene la risposta, marca la domanda come fuori dalla copertura verificata, e la instrada a un dipartimento reale con le constatazioni parziali allegate.

Una risposta sbagliata su un dominio governativo non è un imbarazzo. È una responsabilità con il nome della città sopra.
Guarda cosa quella schermata rifiuta di fare. Non sintetizza una risposta plausibile da una disposizione morta. Dice, in linguaggio semplice, che l'unica disposizione che affronta questo è stata abrogata e nulla attualmente in vigore disciplina la domanda, e passa il cittadino a qualcun altro piuttosto che indovinare. L'astensione onesta batte una risposta sbagliata e sicura di sé, soprattutto nel governo. E nel governo la posta in gioco non è reputazionale. La consulenza legale governativa ricade nella zona delle funzioni proprietarie, il che significa che non c'è scudo di immunità sovrana dietro cui nascondersi quando la risposta si rivela sbagliata.
Questa non è più una preoccupazione ipotetica, ed è parte del motivo per cui ho costruito la cosa ora invece che più tardi. C'erano 78 disegni di legge legati ai chatbot in 27 stati nel 2026. Lo S7263 di New York ha raggiunto l'aula del Senato il 26 febbraio 2026. Gli obblighi ad alto rischio dell'Allegato III dell'EU AI Act diventano esecutivi il 2 agosto 2026, con sanzioni fino a €15M o al 3% del fatturato globale. La domanda normativa si sta spostando da "la tua IA è utile" a "puoi dimostrare che alla tua IA era permesso dire quello." Il silenzio lo puoi difendere. Una risposta sbagliata e sicura di sé no.
Il numero su cui un regolatore può davvero agire
Pensavo che la metrica di punta per un sistema come questo fosse un tasso di allucinazione, e ora penso che quell'istinto sia esattamente al contrario. Una percentuale è la cosa sbagliata da consegnare a un regolatore.
Immagina di essere il Law Department della città, l'ufficio a cui compete la responsabilità quando una risposta va male. "Il nostro chatbot allucina solo il 4% delle volte" non è rassicurante. È un'ammissione che quattro cittadini su cento ricevono una risposta con l'autorità della città dietro e nulla a sostegno della risposta. Il numero che conta non riguarda quanto spesso il modello sbaglia. Riguarda se qualcosa di non verificato è mai stato lasciato uscire dalla porta. Quindi la metrica attorno a cui ho costruito il benchmark è questa: su un golden set fisso ed etichettato di 12 query, fatto attraverso la pipeline reale, il conteggio delle risposte rilasciate senza un fondamento normativo verificato e in vigore. L'obiettivo è zero su dodici.
Un tasso di allucinazione dice a un regolatore quanto spesso hai fallito. Non può dirgli che l'hai intercettato.

Voglio essere preciso su cosa quel numero è e non è, perché esagerarlo tradirebbe l'intera premessa. È un risultato su un set etichettato fisso, non una garanzia sul mondo aperto e non "zero allucinazione," una frase che penso nessuna persona onesta dovrebbe vendere. Il modello redige ancora affermazioni imperfette. Il punto è che quelle non verificate vengono trattenute, non che non vengano mai redatte. Accanto a quel numero ce ne sono altri due: copertura al 100% dei record di audit, cioè un record archiviabile per query sia che rilasci sia che rifiuti, e accordo sull'esito con la ground truth etichettata. La baseline plain-RAG, l'architettura MyCity senza gate, avrebbe rilasciato le risposte illegali documentate su questo stesso set. Quel confronto è contesto, non il titolo.
Il record è la parte che difenderei con più forza.

Ogni query, rilasciata o rifiutata, produce un Statutory Decision Record: l'esito, la citazione, tutti e quattro i risultati dei controlli, la decisione, come dati strutturati che puoi archiviare e rieseguire. Nomina il logging NIST AI RMF e il continuous monitoring FedRAMP e StateRAMP come gli standard verso cui è costruito. Sono attento con quella frase. «Verso cui è costruito» è una direzione, non una certificazione, e non pretenderò che CivicCite sia certificato rispetto a nessuno di essi. Ma un auditor non vuole una promessa che il modello è intelligente. Un auditor vuole un record, per interazione, che mostri esattamente perché a una risposta è stato permesso di esistere, in una forma che sopravvive a qualcuno che prova a romperla. La riproducibilità è ciò che trasforma una decisione in prova, e la prova è ciò su cui un regolatore può agire.
E se preferisci guardarlo piuttosto che leggermi mentre lo descrivo, ecco l'intera demo in esecuzione da un capo all'altro.
La domanda con cui resto
Continuo a tornare a qualcosa che mi ha sorpreso della mia stessa reazione. La prima volta che ho visto CivicCite rifiutare una domanda e instradarla a un dipartimento, una parte di me l'ha letto come il sistema che falliva.
Non stava fallendo. Stava facendo l'unica cosa che i bot sicuri di sé non possono fare, cioè conoscere il confine di ciò che può dimostrare e fermarsi lì. Avevo passato così tanto tempo a ottimizzare per una buona risposta che avevo silenziosamente assunto che una buona risposta fosse l'obiettivo. Non lo è. Nel governo, l'obiettivo è una risposta difendibile, e la distanza tra quelle due parole è l'intera ragione per cui questo prodotto esiste. Una risposta difendibile a volte sembra una citazione rilasciata. Altrettanto spesso sembra una domanda instradata e un record archiviato.
Quindi la domanda che lascerei a chiunque stia costruendo IA per un governo, o la stia acquistando, non è "quanto è accurato il tuo modello." Modelli migliori continueranno a migliorare nello scrivere risposte fluenti e sbagliate nel contesto, perché la fluidità non è mai stata il pezzo mancante. La domanda che pongo prima che qualsiasi cosa lasci il gate è più stretta e più dura. Puoi dimostrare, proprio ora, che questa esatta risposta risale a una disposizione che esiste e è attualmente in vigore, e quella prova sopravviverebbe a un tribunale che volesse farla fallire? Se la risposta è no, non importa quanto sia buono il modello. Il sistema dovrebbe restare in silenzio. Puoi guardarlo decidere, in entrambi i casi, qui: veriprajna.com/it/demos/ai-governativa-che-cita-la-legge-o-tace.
La fiducia non appartiene a un modello in cui bisogna credere. Appartiene a codice che puoi sottoporre ad audit.


