Skip to content

v1.16.6 — Long-term memory precision overhaul

Choose a tag to compare

@jgouviergmail jgouviergmail released this 18 Apr 17:31

🧠 Long-term memory — Precision overhaul

Refonte complète du pipeline mémoire long-terme sur trois axes : prompt d'extraction, formule de rétention, et consolidation sémantique quotidienne. Corrige au passage deux bugs silencieux dans l'ancien système de purge.

✨ Highlights user-facing

  • Vos corrections factuelles tiennent vraiment — « en fait j'ai changé de job, je suis chez Meta » met à jour la mémoire au lieu de créer un doublon contradictoire.
  • Mémoires épinglées strictement protégées — plus aucun risque que LIA les modifie ou les supprime automatiquement.
  • Moins de doublons — un nouveau job quotidien fusionne les mémoires quasi-identiques accumulées au fil des conversations.
  • Mémoires qui vieillissent mieux — préférences moyennes purgées autour de 30 jours, informations importantes (famille, identité) préservées durablement.

🛠️ Côté technique

Added

  • memory_consolidation job quotidien à 5h UTC (cosine similarity ≥ 0.9, skip pinned/catégories-différentes/emotional-divergent)
  • Tag [PINNED] dans le prompt d'extraction + règle explicite de non-modification
  • Détection active de contradictions factuelles dans le prompt
  • 9 nouveaux settings Pydantic exposés via .env, 2 dedup constants promues en settings
  • Log structuré memory_action_applied sur chaque create/update/delete
  • 26 nouveaux tests unitaires

Changed

  • Prompt memory_extraction_prompt.txt entièrement réécrit (WHAT/WHAT NOT, 7 règles refined, catégories précises, 3 few-shots)
  • Formule de rétention : 0.7 * importance + 0.3 * recency_factor + pénalité négative * 0.5 si usage_count==0 past 30j
  • Seuil dédup 0.5 → 0.4 pour capter les contradictions factuelles
  • logger.exception() pour stack trace complète dans les handlers scheduler

Fixed

  • recency_factor était systématiquement à 0 en pratique (double-usage de max_age_days comme gate ET dénominateur decay)
  • Mémoires importance 0.5 n'étaient jamais purgées malgré leur âge
  • Corrections factuelles utilisateur créaient des doublons contradictoires
  • Protections obsolètes dans les ADRs qui n'étaient jamais implémentées

Removed

  • 3 settings obsolètes : MEMORY_MAX_AGE_DAYS, MEMORY_MIN_USAGE_COUNT, MEMORY_RETENTION_WEIGHT_USAGE
  • Règle Exact words only du prompt (remplacée par Facts exact, affect interpretable)

📚 Documentation

  • ADR-037, ADR-042, ADR-046 mis à jour (formule + protections)
  • docs/ARCHITECTURE.md : memory_consolidation ajouté aux cron jobs
  • docs/guides/GUIDE_BACKGROUND_JOBS_APSCHEDULER.md : settings alignés
  • docs/knowledge/03_settings.md : section mémoire enrichie

Voir CHANGELOG.md pour le détail technique complet.

🤖 Generated with Claude Code