🗃 SQLite FTS5 — búsqueda de texto completo
FTS5 (Full-Text Search versión 5) es un módulo de SQLite que convierte la base de datos en un motor de búsqueda completo. Cero configuración, cero servidor, cero costo — solo SQLite con superpoderes de búsqueda.
🏗 Esquema de la memoria
💡 ¿Por qué no usar embeddings + vector DB?
Las bases de datos vectoriales son más precisas para la búsqueda semántica, pero añaden complejidad y costos (modelo de embeddings + base de datos aparte). Para un asistente personal con vocabulario consistente, FTS5 + BM25 ofrece un rendimiento excelente con complejidad cero.
📊 BM25 — Clasificación por relevancia
BM25 (Best Match 25) es el algoritmo de clasificación que SQLite FTS5 usa de forma predeterminada. Es el mismo algoritmo que usan Elasticsearch y Solr. Da como resultado recuerdos clasificados según su relevancia real, no por fecha de creación.
🔍 Consulta con BM25
🏗 Sistema de 2 capas de memoria
La arquitectura de memoria resuelve el problema de ventana de contexto: no puedes poner toda la memoria en el system prompt. La solución son 2 capas con propósitos distintos.
📄 Capa 1: MEMORY.md
Hechos estáticos de bootstrap. Siempre en el system prompt. Ejemplo: nombre del usuario, stack tecnológico, empresa, zona horaria.
🗄 Capa 2: memory.db
Hechos dinámicos e historial. Se buscan por relevancia cuando es necesario. Puede crecer indefinidamente: solo los 5 más relevantes se incluyen en el contexto.
🏷 Categorías de memoria
Cada entrada en memory.db tiene una categoría que permite búsquedas más precisas. Cuando Jarvis necesita contexto, filtra por la categoría más relevante para la pregunta actual.
Hechos sobre el usuario y el mundo
Preferencias, configuraciones, información sobre proyectos. Ej.: "El usuario usa PostgreSQL 16 en producción"
Fragmentos de conversaciones importantes
Decisiones tomadas y contexto de proyectos discutidos. Ej.: "En 2026-04, decidimos usar Redis para las sesiones"
Soluciones que funcionaron
Cómo se resolvieron los problemas. Jarvis consulta esta información antes de sugerir soluciones. Ej.: "Docker build lento → agregar .dockerignore lo resolvió"
🔍 Deduplicación automática
Sin deduplicación, la memoria acumula variaciones del mismo hecho. El store.py implementa una operación upsert inteligente: antes de guardar, busca hechos similares y actualiza el existente si la similitud es alta.
🔄 Algoritmo de deduplicación
🗜 Compactación automática
Una memoria que crece sin límite se vuelve lenta de buscar. Compactación automática resume periódicamente las entradas antiguas en hechos más concisos, manteniendo la relevancia sin consumir espacio de forma descontrolada.
✓ Qué compactar
- ✓Conversaciones de más de 30 días
- ✓Hechos redundantes sobre el mismo tema
- ✓Historial de decisiones anteriores
✗ Qué preservar
- ✗Soluciones que funcionaron (alto valor)
- ✗Preferencias fundamentales del usuario
- ✗Hechos consultados con frecuencia
✅ Resumen del Módulo 2.3
Próxima ruta:
Ruta 3 — Seguridad Zero-Trust: la ruta más importante del curso