
Измерение и устранение разрыва целостности между текстом и вектором в офлайн-RAG: закон запаса, аудит векторных баз данных и проверка на уровне кода.
Код, данные и результаты для статьи Signed but Steerable: Measuring and Closing the Text-Vector Integrity Gap in Offline Retrieval-Augmented Generation (G. Feretzakis, A. Papaspyridis, securagen.ai).
Архивировано на Zenodo: 10.5281/zenodo.23945569 (все версии; релиз v1.0.2, цитируемый в статье: 10.5281/zenodo.23948839). Идентификатор arXiv статьи будет добавлен, когда он станет доступен.
ragtrust/ — общая библиотека, включая codeverify.py, эталонный верификатор на уровне кода, используемый для каждого
результата проверки кода (неоднозначность решается только по пересчёту верификатора; принятие только по соседям;
канонизация).desktop/ — эксперименты, выполненные на десктопе: оценка воздержания (E1) и её проверка на MS MARCO, атака
рассинхронизации векторов и закон запаса (E7), запасы BEIR, экспозиция векторной базы данных, демонстрация FAISS,
проверка на уровне кода и детерминизм float-конвейеров.device/ — эксперименты, выполненные на CPU Raspberry Pi 5: сокращение контекста (E2), стоимость проверки рядом с
языковой моделью (E4), эмбеддинг на устройстве и точность INT8 (E5), сквозная атака (E7) и обновления пакетов (E8).analysis/ — анализы, проверки точности и единиц измерения, а также make_figures.py, который перегенерирует рисунки.data/ — корпус на основе SQuAD, окна, вопросы и векторы; results/ — выходные данные по экспериментам;
tests/ — модульные тесты; remote/ — вспомогательные скрипты для управления Pi с десктопа (адаптируйте имена хостов).PROTOCOL.md — гипотезы, зафиксированные до сбора данных, и журнал отклонений и исследовательских анализов.
Номера экспериментов соответствуют протоколу; E3 и E6 не входят в этот релиз.pins.json — закреплённые ревизии моделей и инструментов.python tests/test_codeverify.py.bash desktop/setup_desktop.sh; рисунки: python analysis/make_figures.py.device/requirements_device.txt и llama.cpp на коммите из pins.json.На Raspberry Pi после cp device/config.env.example device/config.env (адаптируйте пути) и установки
device/requirements_device.txt в venv_device:
bash device/inner_generate.sh запускает llama-server и выполняет k3_full (первые 60 вопросов,
проверка воспроизводимости), k5_ce3, k10_ce3, k10_ce5, k5_bi3, k5_ce3 с онлайн-селектором INT8 и конфигурации
E7; только сквозная конфигурация CPU-INT8: bash device/run_e7_cpu_int8.sh. Варианты
k5_ce3w, k3_ce3 и k3_ce3w запускаются через python device/e2_generate.py --config <name>, пока llama-server
работает (запускается так же, как в device/inner_generate.sh). Конфигурация пропускается, если существует
results/e2/status_<name>.json; переместите эти файлы в сторону, чтобы перегенерировать опубликованные результаты.python device/e4_contention.py; E5: python device/e5_reindex.py --backends ort-fp32,ort-int8 --batch 32 (размер
батча опубликованных результатов: динамический INT8 зависит от батча, и батчи по 64 дают другие векторы);
E8: python device/e8_device_verify.py --vector-backend ort-fp32.remote/pi_sync.sh копирует репозиторий на Pi, а remote/pi_fetch.sh забирает результаты.results/e7/margin_law_squad.json; другие корпуса и рис. 1: results/e7/beir_margins.json
и results/e7/margins/; экспозиция при эталонном пороге CPU-INT8: results/e7/cpu_int8_exposure.json;
проверки численной точности и единиц измерения: results/e7/margin_precision_check.json; калибровка эталонного
порога INT8 (точный квантиль, честные окна ниже него, побитовое перекодирование при размере батча 32):
results/e5/int8_calibration_check.json (analysis/e5_int8_calibration_check.py).results/e7/vecdb_quant.json; аудит FAISS и выполненная атака: results/e7/faiss_integrity.json;
бюджет невязки: results/e7/guard_budget.json.results/e7/analysis.json (правильные ответы и отказы) и results/e7/e2e_checks.json
(те же вопросы, угловой бюджет, полезная нагрузка в контексте top-3).results/e2/decomposition.json; стоимость рядом с языковой моделью (E4): results/e4/.results/figures/fig_margin_law.pdf (рис. 1) и results/figures/fig_vdb.pdf (рис. 2), перегенерируются
скриптом analysis/make_figures.py.results/e7/squad_question_vectors.npz
(analysis/margin_law_squad.py) и results/e7/proxy_vectors.npz (analysis/margin_law.py).results/e7/vecs/ (записывается
desktop/beir_margins.py), results/e7/scale_*.npy (записывается скриптами проверки кода),
data/beir/ и artifacts/models/ (записывается desktop/export_onnx.py).Некоторые аналитические скрипты загружают кэши, которые они сами создали, с помощью numpy.load(..., allow_pickle=True);
загружайте такие файлы только из собственных запусков и никогда из недоверенных источников.
Модели, наборы данных и их лицензии перечислены в DATA_LICENSES.md. Пожалуйста, также цитируйте SQuAD 2.0 (Rajpurkar et al., 2018),
BEIR (Thakur et al., 2021), MS MARCO (Bajaj et al., 2016), BGE-M3 (Chen et al., 2024) и Sentence-BERT (Reimers and
Gurevych, 2019), когда используете соответствующие части.
LICENSE).Copyright 2026 securagen.ai P.C. MIT для кода и наших результатов; данные, производные от SQuAD, файлы результатов, содержащие текст SQuAD,
и сгенерированные ответы сохраняют CC BY-SA 4.0; см. LICENSE и DATA_LICENSES.md для подробностей и для условий
других наборов данных и моделей.