Proyectos / Incremental RAG Index

Incremental RAG Index

Índices RAG versionados en SQLite, reutilización de embeddings por hash y publicación atómica. Compara reconstrucción completa e incremental e inyecta cortes del proceso.

Autor: · Python 3.11.13 · Licencia: MIT

Ficha publicada: · Ficha actualizada:

Repositorio · Evidencia original · Release v0.1.0

Problema y utilidad para agentes

Una actualización puede fallar después de extraer documentos o calcular embeddings. El lector necesita una versión completa, y un reintento después de perder la confirmación no debe duplicar versiones ni restaurar documentos borrados.

El índice conserva versiones y un diario de cambios. Se puede examinar qué cambió, interrumpir la publicación y comparar la recuperación con una reconstrucción completa.

Arquitectura

  1. Contenido identificado por hash. Recibe el corpus completo como mapa de IDs y textos. Reutiliza embeddings de contenido idéntico, invalida la reutilización al cambiar el adaptador y elimina IDs ausentes de la versión actual.
  2. Publicación transaccional. SQLite confirma una versión completa y su diario de forma atómica. Un escritor basado en una versión obsoleta es rechazado.
  3. Recuperación observable. Las salidas del proceso antes y después del commit dejan evidencia de versión, integridad y reintentos. Los informes comparan documentos, vectores, raíces y rankings.

Qué demuestra

  • Coherencia entre actualizaciones incrementales y reconstrucciones completas.
  • Diseño de publicación atómica, control de escritores y reintentos tras una confirmación perdida.
  • Separación entre equivalencia del índice y calidad de recuperación.

Resultados publicados

Dos experimentos publicados: adaptador determinista y MiniLM local. Cada uno cubre cinco escenarios y cuatro puntos de interrupción. La tabla muestra MiniLM con seis documentos sintéticos, Python 3.11.13, SQLite 3.50.4 y dos hilos de CPU.

Documentos, vectores, raíces y rankings coinciden exactamente entre actualización incremental y reconstrucción completa en los cinco escenarios de ambos adaptadores. Los tiempos excluyen la carga del modelo y el embedding de la consulta.

Embeddings calculados y tiempo de actualización

Evidencia original ·
EscenarioEmbeddings incrementalesEmbeddings completosIncremental (ms)Completo (ms)
Carga inicial6688.698.0
Editar, agregar y borrar2640.292.8
Renombrar un documento069.896.2
Repetir el mismo corpus067.886.0
Vaciar el corpus007.03.3

Las tres interrupciones anteriores al commit conservaron la versión vieja; la posterior conservó la nueva. El reintento posterior no creó otra versión. Las cuatro bases recuperadas por adaptador pasaron el control de integridad de SQLite.

Los IDs borrados desaparecen de la versión actual y de sus búsquedas. Las versiones históricas retienen esos documentos: no se trata de borrado físico. Diseño y metodología.

Reproducir

La biblioteca, CLI y replay usan Python 3.11 o posterior sin dependencias de modelos. La reproducción neural descarga MiniLM y utiliza las dependencias del entorno medido.

Usá rutas de salida nuevas y ejecutá los experimentos en serie. Los comandos usan shell POSIX; el lock de dependencias corresponde a Intel macOS. El adaptador predeterminado es hashing determinista para verificar almacenamiento, no un encoder semántico.

Revisar la evidencia guardada

git clone https://github.com/lucioduran/incremental-rag-index.git
cd incremental-rag-index
git checkout 9de502f73b0992f79fafda8c079e4363fa9d8fa9
python -m experiments.verify results/deterministic.json
python -m experiments.verify results/minilm.json

Repetir la medición local

python3.11 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements-local.lock
python -m experiments.download --output build/minilm
OMP_NUM_THREADS=2 MKL_NUM_THREADS=2 TOKENIZERS_PARALLELISM=false HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 python -m experiments.reproduce --model build/minilm --output build/minilm-report.json
python -m experiments.verify build/minilm-report.json
python -m experiments.reproduce --output build/deterministic-report.json
python -m experiments.verify build/deterministic-report.json

Alcance y límites

  • Hashing del corpus y escritura de snapshots completos siguen siendo lineales. No hay compacción, índice ANN ni crawler incremental.
  • Seis documentos y una observación de tiempo por escenario no establecen mejoras de producción. No se evaluaron cortes eléctricos, disco lleno ni carga concurrente de producción.
  • Las garantías dependen de SQLite y del sistema de archivos local. Los lectores que ya poseen una versión y el historial conservan datos anteriores.
  • MiniLM limita documentos a 256 tokens. Los hashes detectan inconsistencias, pero no autentican datos frente a un atacante con acceso de escritura.

Fuentes y revisión

Los valores de esta ficha provienen del informe enlazado. No son una medición en vivo. El informe conserva la revisión ejecutada; la revisión consultada incluye la publicación posterior de ese informe.