
Medición y cierre de la brecha de integridad texto–vector en RAG sin conexión: ley de márgenes, auditorías de bases de datos vectoriales y verificación a nivel de código.
Código, datos y resultados del artículo Signed but Steerable: Measuring and Closing the Text-Vector Integrity Gap in Offline Retrieval-Augmented Generation (G. Feretzakis, A. Papaspyridis, securagen.ai).
Archivado en Zenodo: 10.5281/zenodo.23945569 (todas las versiones; release v1.0.2, citada en el artículo: 10.5281/zenodo.23948839). El identificador arXiv del artículo se añadirá cuando esté disponible.
ragtrust/ biblioteca compartida, incluido codeverify.py, el verificador de referencia a nivel de código usado para cada
resultado de verificación de código (la ambigüedad se decide únicamente a partir del recálculo del verificador; aceptación
solo por vecinos; canonicalización).desktop/ experimentos ejecutados en el escritorio: puntuación de abstención (E1) y su comprobación con MS MARCO, el ataque de
desincronización de vectores y la ley de márgenes (E7), márgenes BEIR, exposición de bases de datos vectoriales, la demostración
con FAISS, la verificación a nivel de código y el determinismo de las canalizaciones de coma flotante.device/ experimentos ejecutados en la CPU del Raspberry Pi 5: poda de contexto (E2), el coste de la verificación junto al
modelo de lenguaje (E4), embedding en el dispositivo y fidelidad INT8 (E5), el ataque de extremo a extremo (E7) y las actualizaciones de paquetes (E8).analysis/ análisis, las comprobaciones de precisión y de unidades, y make_figures.py, que regenera las figuras.data/ el corpus derivado de SQuAD, ventanas, preguntas y vectores; results/ salidas por experimento;
tests/ pruebas unitarias; remote/ utilidades para controlar el Pi desde el escritorio (adaptar los nombres de host).PROTOCOL.md hipótesis fijadas antes de la recogida de datos y el registro de desviaciones y análisis exploratorios.
Los números de experimento siguen el protocolo; E3 y E6 no forman parte de esta release.pins.json revisiones fijadas de modelos y herramientas.python tests/test_codeverify.py.bash desktop/setup_desktop.sh; figuras: python analysis/make_figures.py.device/requirements_device.txt, y llama.cpp en el commit indicado en pins.json.En el Raspberry Pi, tras cp device/config.env.example device/config.env (adaptar las rutas) e instalar
device/requirements_device.txt en venv_device:
bash device/inner_generate.sh inicia llama-server y ejecuta k3_full (primeras 60 preguntas,
comprobación de reproducibilidad), k5_ce3, k10_ce3, k10_ce5, k5_bi3, k5_ce3 con el selector INT8 en línea, y las configuraciones
de E7; solo la configuración de extremo a extremo CPU-INT8: bash device/run_e7_cpu_int8.sh. Las variantes
k5_ce3w, k3_ce3 y k3_ce3w se ejecutan con python device/e2_generate.py --config <name> mientras llama-server está
en ejecución (iniciado como en device/inner_generate.sh). Una configuración se omite cuando existe results/e2/status_<name>.json;
mueva esos archivos a otro sitio para regenerar los resultados publicados.python device/e4_contention.py; E5: python device/e5_reindex.py --backends ort-fp32,ort-int8 --batch 32 (el
tamaño de lote de los resultados publicados: INT8 dinámico depende del lote, y lotes de 64 producen vectores distintos);
E8: python device/e8_device_verify.py --vector-backend ort-fp32.remote/pi_sync.sh copia el repositorio al Pi y remote/pi_fetch.sh recupera los resultados.results/e7/margin_law_squad.json; otros corpus y Fig. 1: results/e7/beir_margins.json
y results/e7/margins/; exposición en el umbral de referencia CPU-INT8: results/e7/cpu_int8_exposure.json;
comprobaciones de precisión numérica y de unidades: results/e7/margin_precision_check.json; calibración del umbral
de referencia INT8 (cuantil exacto, ventanas honestas por debajo de él, recodificación bit a bit en lote 32):
results/e5/int8_calibration_check.json (analysis/e5_int8_calibration_check.py).results/e7/vecdb_quant.json; auditoría de FAISS y ataque ejecutado: results/e7/faiss_integrity.json;
presupuesto residual: results/e7/guard_budget.json.results/e7/analysis.json (respuestas correctas y rechazos) y results/e7/e2e_checks.json
(mismas preguntas, presupuesto angular, carga útil en el contexto top-3).results/e2/decomposition.json; coste junto al modelo de lenguaje (E4): results/e4/.results/figures/fig_margin_law.pdf (Fig. 1) y results/figures/fig_vdb.pdf (Fig. 2), regeneradas por
analysis/make_figures.py.results/e7/squad_question_vectors.npz
(analysis/margin_law_squad.py) y results/e7/proxy_vectors.npz (analysis/margin_law.py).results/e7/vecs/ (escrito por
desktop/beir_margins.py), results/e7/scale_*.npy (escrito por los scripts de verificación de código),
data/beir/ y artifacts/models/ (escrito por desktop/export_onnx.py).Algunos scripts de análisis cargan cachés que ellos mismos crearon con numpy.load(..., allow_pickle=True);
cargue dichos archivos solo desde sus propias ejecuciones, nunca desde fuentes no confiables.
Los modelos, conjuntos de datos y sus licencias se enumeran en DATA_LICENSES.md. Cite también SQuAD 2.0 (Rajpurkar et al., 2018),
BEIR (Thakur et al., 2021), MS MARCO (Bajaj et al., 2016), BGE-M3 (Chen et al., 2024) y Sentence-BERT (Reimers y
Gurevych, 2019) cuando utilice las partes correspondientes.
LICENSE).Copyright 2026 securagen.ai P.C. MIT para el código y nuestros resultados; los datos derivados de SQuAD, los archivos de resultados que contienen texto de SQuAD
y las respuestas generadas mantienen CC BY-SA 4.0; véase LICENSE y DATA_LICENSES.md para los detalles y para los términos
de los otros conjuntos de datos y modelos.