
Misurare e colmare il divario di integrità testo–vettore nel RAG offline: legge del margine, audit dei database vettoriali e verifica a livello di codice.
Codice, dati e risultati per il paper Signed but Steerable: Measuring and Closing the Text-Vector Integrity Gap in Offline Retrieval-Augmented Generation (G. Feretzakis, A. Papaspyridis, securagen.ai).
Archiviato su Zenodo: 10.5281/zenodo.23945569 (tutte le versioni; release v1.0.2, citata nel paper: 10.5281/zenodo.23948839). L'identificatore arXiv del paper sarà aggiunto quando sarà disponibile.
ragtrust/ libreria condivisa, inclusa codeverify.py, il verificatore di riferimento a livello di codice usato per ogni
risultato di verifica del codice (ambiguità decisa solo dalla ricomputazione del verificatore; accettazione
basata solo sui vicini; canonicalizzazione).desktop/ esperimenti eseguiti sul desktop: scoring di astensione (E1) e la sua verifica su MS MARCO, l'attacco di
desincronizzazione dei vettori e la legge del margine (E7), i margini BEIR, l'esposizione del database vettoriale, la
dimostrazione FAISS, la verifica a livello di codice e il determinismo delle pipeline float.device/ esperimenti eseguiti sulla CPU del Raspberry Pi 5: potatura del contesto (E2), il costo della verifica accanto al
modello linguistico (E4), embedding lato dispositivo e fedeltà INT8 (E5), l'attacco end-to-end (E7) e gli aggiornamenti dei pack (E8).analysis/ analisi, i controlli di precisione e unità, e make_figures.py, che rigenera le figure.data/ il corpus derivato da SQuAD, le finestre, le domande e i vettori; results/ gli output per esperimento;
tests/ i test unitari; remote/ gli helper per pilotare il Pi dal desktop (adattare i nomi host).PROTOCOL.md ipotesi fissate prima della raccolta dati e il registro delle deviazioni e delle analisi esplorative.
I numeri degli esperimenti seguono il protocollo; E3 ed E6 non fanno parte di questa release.pins.json revisioni fissate di modelli e strumenti.python tests/test_codeverify.py.bash desktop/setup_desktop.sh; figure: python analysis/make_figures.py.device/requirements_device.txt, e llama.cpp al commit in pins.json.Sul Raspberry Pi, dopo cp device/config.env.example device/config.env (adattare i percorsi) e aver installato
device/requirements_device.txt in venv_device:
bash device/inner_generate.sh avvia llama-server ed esegue k3_full (prime 60 domande,
controllo di riproducibilità), k5_ce3, k10_ce3, k10_ce5, k5_bi3, k5_ce3 con il selettore INT8 online, e le
configurazioni E7; solo la configurazione end-to-end CPU-INT8: bash device/run_e7_cpu_int8.sh. Le varianti
k5_ce3w, k3_ce3 e k3_ce3w si eseguono con python device/e2_generate.py --config <name> mentre llama-server è
in esecuzione (avviato come in device/inner_generate.sh). Una configurazione viene saltata quando esiste
results/e2/status_<name>.json; spostare quei file altrove per rigenerare i risultati rilasciati.python device/e4_contention.py; E5: python device/e5_reindex.py --backends ort-fp32,ort-int8 --batch 32 (la
dimensione del batch dei risultati rilasciati: l'INT8 dinamico dipende dal batch, e batch di 64 producono vettori diversi);
E8: python device/e8_device_verify.py --vector-backend ort-fp32.remote/pi_sync.sh copia il repository sul Pi e remote/pi_fetch.sh recupera i risultati.results/e7/margin_law_squad.json; altri corpora e Fig. 1: results/e7/beir_margins.json
e results/e7/margins/; esposizione alla soglia di riferimento CPU-INT8: results/e7/cpu_int8_exposure.json;
controlli di precisione numerica e delle unità: results/e7/margin_precision_check.json; calibrazione della soglia
di riferimento INT8 (quantile esatto, finestre oneste al di sotto di essa, ri-codifica bit per bit con batch 32):
results/e5/int8_calibration_check.json (analysis/e5_int8_calibration_check.py).results/e7/vecdb_quant.json; audit FAISS e attacco eseguito: results/e7/faiss_integrity.json;
budget residuo: results/e7/guard_budget.json.results/e7/analysis.json (risposte corrette e rifiuti) e results/e7/e2e_checks.json
(stesse domande, budget angolare, payload nel contesto top-3).results/e2/decomposition.json; costo accanto al modello linguistico (E4): results/e4/.results/figures/fig_margin_law.pdf (Fig. 1) e results/figures/fig_vdb.pdf (Fig. 2), rigenerate da
analysis/make_figures.py.results/e7/squad_question_vectors.npz
(analysis/margin_law_squad.py) e results/e7/proxy_vectors.npz (analysis/margin_law.py).results/e7/vecs/ (scritti da
desktop/beir_margins.py), results/e7/scale_*.npy (scritti dagli script di verifica del codice),
data/beir/ e artifacts/models/ (scritti da desktop/export_onnx.py).Alcuni script di analisi caricano cache che hanno creato essi stessi con numpy.load(..., allow_pickle=True);
caricare tali file solo dalle proprie esecuzioni, mai da fonti non attendibili.
Modelli, dataset e le relative licenze sono elencati in DATA_LICENSES.md. Si prega inoltre di citare SQuAD 2.0 (Rajpurkar et al., 2018),
BEIR (Thakur et al., 2021), MS MARCO (Bajaj et al., 2016), BGE-M3 (Chen et al., 2024) e Sentence-BERT (Reimers e
Gurevych, 2019) quando si utilizzano le parti corrispondenti.
LICENSE).Copyright 2026 securagen.ai P.C. MIT per il codice e i nostri risultati; i dati derivati da SQuAD, i file dei risultati che contengono testo
SQuAD e le risposte generate mantengono CC BY-SA 4.0; vedere LICENSE e DATA_LICENSES.md per i dettagli e per i termini
degli altri dataset e modelli.