Il corpus
Tutto ciò che Caucus afferma è ancorato a un corpus locale e ispezionabile. Nessuna risposta si basa solo sulla memoria del modello: il retrieval pesca da qui, e il trust layer verifica qui ogni citazione.
Composizione
| Sezione | Fonte | Contenuto |
|---|---|---|
| Norme nazionali | Normattiva (XML Akoma Ntoso ufficiale) | 50 fonti consolidate: i quattro codici, la Costituzione, i principali testi unici (sicurezza sul lavoro, bancario, finanza, immigrazione, edilizia, ambiente…) e le leggi di compliance (231/2001, antiriciclaggio, anticorruzione, whistleblowing…) |
| Diritto UE | EUR-Lex (HTML per CELEX, in italiano) | 14 atti: GDPR, AI Act, NIS2, DORA, MiCA, DSA/DMA, eIDAS, PSD2/MiFID II e le direttive consumatori, whistleblowing, AML, ePrivacy |
| Giurisprudenza | SentenzeWeb (Corte di Cassazione) | Decisioni civili e penali a testo integrale, nella forma anonimizzata pubblicata dalla Corte; harvest incrementale, corpus in crescita (72.050 provvedimenti alla data del pacchetto corrente) |
Come è costruito
- Parsing strutturale, non scraping. Le norme arrivano dall'XML Akoma Ntoso ufficiale di Normattiva: articoli, commi, rubriche, data del consolidato e stato di abrogazione sono campi strutturati, non regex su HTML.
- Chunk contestuali. Ogni frammento indicizzato porta nel testo il proprio contesto: fonte, articolo e rubrica (per esempio Codice Civile, art. 2043, «Risarcimento per fatto illecito»), così l'embedding codifica anche la collocazione, non solo il testo del comma.
- Vigenza temporale. Ogni partizione e ogni chunk hanno
effective_from/effective_to: il retrieval filtra per data di vigenza (default: oggi) e gli articoli abrogati sono marcati: possono essere citati come abrogati, mai spacciati per vigenti. - Grafo dei rinvii. I riferimenti incrociati («si applica l'art. …») estratti dall'XML diventano un grafo di citazioni tra norme, usato in retrieval per espandere il contesto di un hop.
- Ingestione idempotente. Ricaricare una fonte normativa è delete-and-replace: stesso corpus, mai duplicati. La giurisprudenza è append-only per identificativo esterno, quindi l'harvest è interrompibile e riprendibile.
Il pacchetto corpus scaricabile
Indicizzare tutto da zero funziona (i comandi sono pubblici e riproducibili) ma richiede ore di harvest e qualche euro di embedding. Per questo ogni release pubblica un pacchetto corpus pronto: l'intero database già popolato e le collection vettoriali già calcolate.
# con l'infra attiva (make up && make migrate): make corpus-import SRC=https://github.com/gral-digital/caucus/releases/download/corpus-20260801 # oppure da una directory locale già scaricata: make corpus-import SRC=/percorso/caucus-corpus-YYYYMMDD
Il pacchetto contiene:
postgres_corpus.dump: dump compresso delle sole tabelle del corpus (norme, commi, chunk, grafo dei rinvii, giurisprudenza). Le tabelle utente non sono incluse e l'import non le tocca;qdrant_*.snapshot: uno snapshot per collection vettoriale (embeddingtext-embedding-3-small, 1536 dimensioni), ripristinato così com'è: zero chiamate API;manifest.json: data, commit di origine, revisione dello schema, conteggi per tabella e collection, checksum SHA-256 di ogni file. L'import verifica tutto prima di scrivere e confronta i conteggi a fine ripristino;README.md: licenze dei dati e istruzioni minime.
Il download pesa alcuni GB (la parte grossa sono gli embedding della giurisprudenza). Lo script riprende i download interrotti e puoi rilanciarlo senza paura: l'import è ripetibile.
Per produrre un pacchetto dalla propria istanza (per esempio dopo aver aggiunto fonti):
make corpus-export # scrive dist/corpus/caucus-corpus-<data>/
Licenze dei dati
- Atti normativi (Normattiva, EUR-Lex): gli atti ufficiali dello Stato e delle amministrazioni pubbliche sono esclusi dalla protezione del diritto d'autore (art. 5 L. 633/1941); per gli atti UE vale la politica di riuso della Commissione (decisione 2011/833/UE).
- Giurisprudenza: i provvedimenti sono ingeriti nella forma anonimizzata pubblicata da SentenzeWeb ai fini di pubblicità legale; il corpus non aggiunge alcun dato personale rispetto alla fonte e l'harvest rispetta un rate limit conservativo con user-agent identificato.
- Chunking ed embedding (il lavoro di Caucus sul testo): rilasciati sotto licenza MIT, come il benchmark. Il codice resta AGPL-3.0.
Aggiornare il corpus
Le norme si riallineano al consolidato corrente ripetendo l'ingestione della singola fonte (uv run caucus-ingest ingest --codice cc): il loader sostituisce la fonte per intero. La giurisprudenza cresce con make harvest-cassazione, che riparte da dove si era fermato. La data di consolidamento di ogni fonte è visibile nel pannello «Fonti del corpus» dell'app.