Proyectos / LLM Semantic Cache

LLM Semantic Cache

Caché exacta y semántica en SQLite con aislamiento por usuario, permisos y versión, invalidación transaccional y evaluación local de aciertos correctos e incorrectos.

Autor: · Python 3.11.13 · Licencia: MIT

Ficha publicada: · Ficha actualizada:

Repositorio · Evidencia original · Release v0.1.0

Problema y utilidad para agentes

Dos preguntas parecidas pueden necesitar respuestas distintas al cambiar usuario, permisos, entidad, fecha o fuente. La similitud no autoriza reutilizar una respuesta; calcular embeddings también tiene costo.

El proyecto hace explícito el contexto que permite reutilización y mide si el ahorro neto sobrevive al trabajo extra de la caché semántica. Conserva un diagnóstico inseguro para mostrar el efecto de ignorar esos límites.

Arquitectura

  1. Aislamiento antes de similitud. Filtra por usuario, permisos, versión, entidad, fecha y namespace del modelo de embeddings antes de comparar. Intenta coincidencia exacta antes de calcular un vector.
  2. Invalidación transaccional. SQLite coordina escrituras. Un ticket de generación capturado antes de leer fuentes impide guardar resultados anteriores a una invalidación. Expiración, reemplazo y borrado lógico son explícitos.
  3. Evaluación con modelos locales. MiniLM genera embeddings y FLAN-T5-small responde a 48 solicitudes ficticias por política. Guarda respuestas, decisiones, vectores y tiempos para replay sin inferencia.

Qué demuestra

  • Diseño de fronteras de reutilización y rechazo de escrituras en vuelo después de invalidar.
  • Medición separada de hits correctos, reutilización incorrecta y exactitud de respuestas.
  • Contabilidad de ahorro neto que incluye embedding, lookup, generación, escrituras e invalidación.

Resultados publicados

Una ejecución local de orden fijo con 48 solicitudes por política, en Intel Xeon W-3223 con cuatro hilos. MiniLM y FLAN-T5-small están fijados por revisión; el umbral de similitud es 0,90.

Las tasas de acierto usan todas las solicitudes como denominador. Un hit correcto exige mismo alcance, hecho solicitado y valor de referencia. El ahorro neto incluye trabajo por solicitud y excluye descarga, carga y calentamiento de modelos.

Reutilización y tiempo neto

Resumen de resultados
PolíticaHits correctosHits incorrectosTiempo total (s)Tiempo ahorrado
Sin caché0/480/483.8930%
Exacta con aislamiento12/480/482.91525.1%
Semántica con aislamiento16/480/483.31015.0%
Diagnóstico sin aislamiento8/4832/480.717Beneficio inválido

La caché semántica reutilizó cuatro respuestas más que la exacta, pero ahorró menos tiempo: 15,0 % frente a 25,1 %. Consumió 0,308 s en embeddings. La variación de generación también influye; una sola ejecución no establece un orden estable de rendimiento.

El diagnóstico sin aislamiento produjo 32 reutilizaciones incorrectas, el 80 % de sus hits. Sin caché, con caché exacta y con caché semántica se obtuvo 100 % de exact match sobre preguntas numéricas simples; ese resultado no establece seguridad general. Resumen de resultados.

Reproducir

Biblioteca y replay con Python 3.11 o posterior y SQLite, sin dependencias de modelos. La reproducción neural descarga los dos modelos públicos y usa el lock del entorno medido.

Usá una carpeta de salida nueva y ejecutá una medición por vez. Los comandos son POSIX y el lock corresponde a Intel macOS. El llamador debe obtener permisos y alcance de fuentes confiables en cada solicitud.

Revisar la evidencia guardada

git clone https://github.com/lucioduran/llm-semantic-cache.git
cd llm-semantic-cache
git checkout 78efb52757165a2f1dc5cc2f76197317b853643a
python -m scripts.verify results/reference/report.json

Repetir la medición local

python3.11 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements-models.lock
python -m scripts.evaluate download
OMP_NUM_THREADS=4 OPENBLAS_NUM_THREADS=4 MKL_NUM_THREADS=4 python -m scripts.evaluate run --output results/my-run
python -m scripts.verify results/my-run/report.json

Alcance y límites

  • La biblioteca no autentica usuarios ni interpreta permisos. Una versión que omita dependencias del prompt, modelo, contenido o política puede permitir reutilización obsoleta.
  • Las lecturas concurrentes pueden haber obtenido una respuesta antes de invalidar; no hay barrera de revocación distribuida. La invalidación global de tickets puede rechazar escrituras no relacionadas.
  • Búsqueda semántica lineal por alcance, sin índice vectorial, single-flight, límite de tamaño ni limpieza automática. El borrado es lógico.
  • Corpus pequeño escrito por el autor, una ejecución y sin intervalos temporales. No es auditoría de seguridad, prueba de escala ni evaluación general de calidad.

Fuentes y revisión

Resultados del informe y trazas incluidos en v0.1.0. El informe identifica el commit de implementación, pero no contiene una fecha de ejecución. La fecha de release se muestra por separado.