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.
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
- 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.
- 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.
- 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
| Escenario | Embeddings incrementales | Embeddings completos | Incremental (ms) | Completo (ms) |
|---|---|---|---|---|
| Carga inicial | 6 | 6 | 88.6 | 98.0 |
| Editar, agregar y borrar | 2 | 6 | 40.2 | 92.8 |
| Renombrar un documento | 0 | 6 | 9.8 | 96.2 |
| Repetir el mismo corpus | 0 | 6 | 7.8 | 86.0 |
| Vaciar el corpus | 0 | 0 | 7.0 | 3.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.jsonRepetir 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.jsonAlcance 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.
- Revisión consultada:
9de502f73b0992f79fafda8c079e4363fa9d8fa9 - Revisión registrada por el experimento:
37559ac9cfd8c039dbbf884c8814f2e4018e311b - Fecha del informe (UTC):
- Release publicada: v0.1.0 ·