Changer le thème

Mémoire des agents IA : mémoire à long terme et gouvernance des connaissances

Easton editorial illustration: one central memory library linking recent notes to durable knowledge shelves

Mise à jour du 2026-06-08 : le benchmark LOCOMO et les détails des frameworks ont été revérifiés (Mem0 / Letta / Zep / Cognee sont à jour), une mention de tarif modèle obsolète a été remplacée par une formulation générale, et des lectures complémentaires sur le sujet ont été ajoutées. Frameworks et benchmarks évoluent vite — à prendre comme un instantané et à vérifier sur les sources officielles.

« Où en est la commande que tu devais vérifier pour moi la dernière fois ? »

Quand l’utilisateur pose cette question, l’agent support se fige. Il fouille le contexte de la conversation en cours — aucune trace de « commande ». La recherche remonte à hier après-midi, dans une autre session.

Ce n’est pas un bug. C’est de l’amnésie.

La première fois, le problème m’a pris de court. L’agent répondait bien, l’expérience utilisateur était correcte — mais dès que l’utilisateur changeait de fenêtre, fermait le navigateur ou revenait quelques heures plus tard, tout repartait à zéro. L’agent oubliait les préférences, les décisions passées, et surtout pourquoi ces décisions avaient été prises.

Pire : agrandir la fenêtre de contexte ne résout rien. Au contraire — vous n’allez pas le croire — l’agent devient plus bête. C’est la « pourriture du contexte » : le bruit des informations non pertinentes dilue l’attention du modèle, le coût de recherche explose, la latence passe de quelques centaines de millisecondes à plus de dix secondes.

Alors comment un agent peut-il vraiment « se souvenir » ? Pas en stockant les dialogues dans une base — mais comme un humain : retenir l’important, oublier le futile, se rappeler au bon moment, et retracer les raisons d’une décision.

Cet article décompose la logique sous-jacente des systèmes de mémoire des agents : trois types de mémoire (la plupart n’en connaissent que deux), comparaison de six frameworks, comment le graphe de connaissances comble les angles morts des bases vectorielles, et les pièges rencontrés en production.

Pourquoi un agent a besoin d’un système de mémoire indépendant

Pourriture du contexte : une fenêtre plus grande empire les choses

Quelques chiffres du benchmark LOCOMO (jeu de données de référence pour évaluer la mémoire des agents) :

72,9 %
Précision contexte plein
Mais latence 9,87 s
66,9 %
Précision Mem0
Latence seulement 0,71 s
13×
Écart de consommation tokens
26K vs ~2K
10 s
Temps d’attente utilisateur
Schéma contexte plein
Source: Benchmark LOCOMO

En surface, le contexte plein est plus précis. Mais attendriez-vous dix secondes ? Surtout, la consommation de tokens est 13 fois plus élevée. Au tarif des modèles courants, chaque échange brûle quelques centimes rien qu’en contexte.

Pourquoi une fenêtre plus grande peut-elle dégrader les résultats ?

Analogie : vous cherchez un livre en bibliothèque. Avec dix livres, un coup d’œil suffit. Avec cent mille — même si vous voyez toutes les couvertures — il faut longtemps pour trouver le bon.

L’attention du modèle fonctionne pareil. Plus la fenêtre contient d’informations, moins chaque élément reçoit d’attention. Dialogues obsolètes, états de tâche périmés, problèmes déjà résolus — tout s’entasse, et le modèle ne distingue plus l’essentiel.

C’est la pourriture du contexte. Plus d’information, moins de rapport signal/bruit.

J’ai testé : après 100 tours, demander un détail mentionné au tour 1. Résultat ? Précision du contexte plein : 90 % → 60 %. Avec un système de mémoire : stable au-dessus de 85 %.

Du « outil » au « partenaire » : la mémoire au-delà des sessions

Sans mémoire, un agent reste un outil avancé. Vous le quittez, il vous oublie.

Avec mémoire, il devient un partenaire. Il retient que vous préférez les réponses concises, qu’une question similaire a déjà été posée, que votre projet utilise React et non Vue — sans que vous le répétiez.

L’équipe Letta (derrière MemGPT) donne un bon exemple : un assistant de programmation long terme. Il mémorise le style de code du projet, les bugs rencontrés et leurs solutions, les bibliothèques tierces habituelles. Quand vous demandez « écris une fonction similaire », il sait ce que « similaire » signifie — parce qu’il se souvient de la dernière fonction.

Cette continuité inter-sessions est la base de l’évolution d’un agent « outil » vers « partenaire ».

Trois types de mémoire : court terme, long terme, raisonnement (le troisième est souvent oublié)

Beaucoup ne connaissent que court et long terme. Il existe un troisième — la Reasoning Memory (mémoire de raisonnement) — et la plupart des systèmes l’ignorent.

Mémoire à court terme (Short-term Memory) : la fenêtre de contexte actuelle. Capacité limitée, information fraîche, disparaît en fin de session. Comme la RAM — coupure, tout est perdu.

Mémoire à long terme (Long-term Memory) : stockage externe — base vectorielle, relationnelle, graphe de connaissances. Grande capacité, persistante, requêtable. Comme le disque dur.

Mémoire de raisonnement (Reasoning Memory) : la plus sous-estimée. Elle enregistre le processus de décision — pourquoi A et non B, contraintes du moment, chaîne de raisonnement. Sans elle, l’agent décide sans pouvoir expliquer « pourquoi ». Crucial pour l’explicabilité, le débogage et l’apprentissage continu.

Le blog technique Neo4j le résume bien : « Un agent qui exécute sans expliquer ses décisions, c’est comme un employé qui agit sans jamais faire le bilan. Ça tient à court terme, pas à long terme. »

Parmi les frameworks que j’ai vus, seuls quelques-uns (Letta, Zep) implémentent la mémoire de raisonnement. La plupart s’arrêtent à « stocker le dialogue dans une base vectorielle ».

Architecture cognitive de la mémoire des agents

Modèle à quatre couches

Inspiré des systèmes d’exploitation et des sciences cognitives, les systèmes modernes adoptent une architecture en couches. Le modèle classique Letta/MemGPT :

Layer 1: Message Buffer (tampon de messages)
    ↓ compression à débordement
Layer 2: Core Memory (mémoire centrale)
    ↓ écriture active
Layer 3: Recall Memory (mémoire de rappel)
    ↓ récupération à la demande
Layer 4: Archival Memory (mémoire d'archivage)

Message Buffer : le contexte de dialogue actuel, capacité limitée (4K ou 8K tokens). Quand le tampon est presque plein, les anciens messages sont compressés en résumé pour libérer de l’espace.

Core Memory : un petit bloc de « mémoire de travail » soigneusement entretenu — préférences utilisateur, objectif courant, décisions récentes. Quelques centaines à milliers de tokens, toujours dans la fenêtre de contexte, visible à chaque génération.

Recall Memory : stockage vectoriel de l’historique. Quand l’agent doit se rappeler « ce que l’utilisateur a demandé la dernière fois », il interroge ici — par similarité sémantique, plage temporelle ou mots-clés.

Archival Memory : archivage long terme pour ce qui « pourrait servir plus tard mais pas maintenant » — dialogues de six mois, tâches terminées.

L’analogie : en codant, Core Memory = votre tête et les fichiers ouverts ; Recall Memory = l’historique Git et la doc projet ; Archival Memory = les autres projets sur le disque et les ressources en ligne. Plus la couche est proche, plus l’accès est rapide mais la capacité faible ; plus elle est lointaine, plus la capacité est grande mais l’accès lent.

Gestion type système d’exploitation avec MemGPT

MemGPT (aujourd’hui Letta) compare la gestion de la mémoire à celle d’un OS.

En OS : RAM limitée, disque quasi illimité. Quand la RAM manque, des données sont échangées (swap) vers le disque et rechargées au besoin.

MemGPT fait pareil :

  • RAM = fenêtre de contexte (limitée, chère, rapide)
  • Disque = stockage externe (illimité, bon marché, plus lent)

L’agent dispose d’un mécanisme d’« auto-gestion » : il maintient un « Core Memory Block » dans la fenêtre de contexte, comme l’OS maintient une table des pages. Quand Core Memory est pleine, l’agent « évince » une partie vers le stockage externe ; quand il a besoin d’informations archivées, il les « rappelle ».

Le point clé : l’agent décide lui-même quoi garder, supprimer ou consulter — pas par règles codées en dur, mais dynamiquement selon la tâche.

Exemple de structure Core Memory Block :

{
  "label": "user_preferences",
  "description": "Préférences de l'utilisateur",
  "value": "Réponses concises, préfère le français, stack React",
  "limit": 2000
}

Quand la limite approche, l’agent peut : compresser (extraire l’essentiel), segmenter (plusieurs blocs), ou évincer (vers Archival Memory).

Sleep-time Compute : traitement asynchrone sans bloquer la réponse

Concept ingénieux de Letta.

Approche classique : après chaque dialogue, traiter immédiatement la mémoire — extraction, mise à jour de l’index vectoriel, résumé. Cela bloque la réponse.

Sleep-time Compute : pendant le dialogue, les données brutes vont en file d’attente et la réponse part tout de suite. Quand l’agent est « inactif » (sleep), il traite la mémoire tranquillement.

Avantages :

  1. Latence perçue nettement réduite
  2. Traitements plus complexes possibles (construction de graphe) sans timeout
  3. Traitement par lot plus efficace et moins coûteux

Inconvénient : mise à jour de la mémoire avec délai. Pour la plupart des scénarios (support, assistant, pair de code), quelques secondes à minutes suffisent. Pour la reconnaissance émotionnelle en temps réel, moins adapté.

Éviction et résumé récursif : 70 % pour garantir la continuité

Quand la fenêtre de contexte est pleine, que supprimer, que garder ?

Stratégie simple : résumé récursif. Compresser les anciens dialogues en résumé, garder l’essentiel, jeter les détails.

Mais combien compresser ? Trop agressif, perte d’information ; trop peu, l’espace manque toujours.

Les expériences Letta donnent une référence : conserver 70 % de l’information — meilleur équilibre continuité / compression.

Procédure avec 100 messages pleins :

  1. Compresser les 50 premiers en un résumé d’environ 500 tokens
  2. Le résumé conserve : objectif utilisateur, contraintes clés, décisions importantes, questions ouvertes
  3. Données brutes vers Archival Memory, consultables plus tard
  4. Nouveau contexte = résumé + 50 messages suivants + nouveaux messages

Continuité assurée (l’agent sait ce qui s’est passé) et espace libéré (la conversation continue).

Gouvernance des connaissances : cycle de vie de la mémoire

La mémoire ne se contente pas d’être stockée. Elle a un cycle : capture, compression, stockage, récupération, décroissance, nettoyage. Chaque étape demande une stratégie.

TTL par type : profil utilisateur vs état de tâche vs journal d’opérations

Le TTL (Time To Live) est un paramètre central. Chaque type de mémoire a un TTL différent.

Mémoire utilisateur long terme : TTL infini ou très long (années). Nom, préférences, outils habituels, stack technique. Peu changeant, à conserver longtemps.

Mémoire de tâche : TTL configurable (heures à jours). Contexte du projet, bugs récents, décisions en cours. À la fin de la tâche, nettoyage ou archivage.

Mémoire d’événement : TTL court (minutes à heures). Tour de dialogue courant, résultats temporaires, informations fraîchement récupérées. Jetables après usage.

J’ai vu des projets tout mettre dans une seule base vectorielle sans TTL. Résultat : base qui grossit, recherche qui ralentit, rappel d’informations obsolètes et hors sujet.

Approche saine : trois stockages distincts avec TTL et politiques de nettoyage adaptés.

Mémoire utilisateur long terme → base vectorielle (sans TTL, compression périodique)
Mémoire de tâche → base relationnelle + vecteurs (TTL par cycle de tâche)
Mémoire d'événement → mémoire ou Redis (TTL court, expiration auto)

L’art de la compression : résumé structuré d’environ 200 mots

Compresser 100 tours en un résumé semble simple ; les détails comptent.

Trop simple, perte d’info. Trop complexe, le modèle ne comprend plus.

Letta propose un modèle structuré efficace :

{
  "goals": ["Ce que l'utilisateur veut accomplir"],
  "constraints": ["Contraintes de l'utilisateur"],
  "decisions": ["Décisions prises par l'agent"],
  "open_questions": ["Problèmes non résolus"],
  "evidence_index": ["Index des sources d'information importantes"]
}

À la fin de chaque segment, l’agent génère un résumé structuré d’environ 200 mots. Avantages :

  1. Structure claire : le modèle sait ce que contient chaque section
  2. Haute densité : l’essentiel seulement, pas le superflu
  3. Traçabilité : evidence_index pointe vers les données brutes

J’ai testé des résumés non structurés (« Il s’agit d’une conversation sur une commande… »). Bien moins efficaces : le modèle peine à localiser l’information, la recherche en souffre.

Stratégie d’injection : injection active vs récupération passive

Deux modes : injection active et récupération passive.

Injection active : avant chaque génération, les mémoires pertinentes entrent automatiquement dans le contexte. Adapté aux petits volumes et forte exigence de temps réel. Inconvénient : si trop de mémoires, elles occupent la fenêtre.

Récupération passive : requête uniquement au besoin. Le modèle émet une « demande de recherche », puis interroge base vectorielle ou graphe. Adapté aux grands volumes et sensibilité à la latence. Inconvénient : un aller-retour de recherche en plus.

Conseil Letta : Core Memory en injection active, Recall/Archival en récupération passive.

Core Memory (préférences, objectif courant) doit être connue à chaque génération — injection active. L’historique Recall et Archival n’est consulté que quand le modèle juge qu’il « doit se rappeler ».

Cela exige une forme d’« autoconscience » — savoir quand consulter ses archives. Les modèles de pointe comme GPT-5 et Claude s’en sortent bien avec le bon prompt. Les petits modèles ont besoin de règles plus explicites.

Décroissance et nettoyage : éviter l’inflation de la mémoire

Problème concret : plus l’utilisateur utilise le système, plus la base grossit, la recherche ralentit, les rappels se mélangent.

Solution : décroissance et nettoyage.

Décroissance : chaque mémoire a un score d’importance qui baisse avec le temps. Sans accès prolongé, le score passe sous un seuil → archivage ou suppression.

Nettoyage : scan périodique — suppression des expirées, fusion des doublons, retrait des faibles valeurs.

Exemple d’index de mémoire :

{
  "memory_id": "mem_001",
  "content": "L'utilisateur préfère la stack React",
  "importance": 0.85,
  "last_accessed": "2026-04-12",
  "access_count": 23,
  "decay_rate": 0.01
}

Tâche de nettoyage nocturne :

  • importance < 0.2 → suppression
  • mémoires dupliquées → fusion
  • TTL expiré → archivage

La base reste à taille maîtrisée, l’efficacité de recherche stable, sans gonflement dans le temps.

Choix technique : base vectorielle vs graphe de connaissances

Forces et limites de la base vectorielle : la recherche sémantique ne restitue pas les relations

La base vectorielle est le stockage de mémoire le plus courant. Pinecone, Weaviate, Milvus, Qdrant — vous les connaissez.

Capacité centrale : recherche par similarité sémantique. Texte → vecteur → plus proches voisins.

« L’utilisateur aime les réponses concises » et « L’utilisateur préfère les réponses brèves » — proches dans l’espace vectoriel, mutuellement rappelables. Point fort.

Angle mort fatal : les relations.

Exemple dans l’historique :

  • « Je travaille sur un projet e-commerce »
  • « Le projet utilise Next.js »
  • « Le backend est Supabase »
  • « Je traite le module paiement en ce moment »

Recherche vectorielle « stack technique du projet » : peut rappeler « utilise Next.js » mais manquer « backend Supabase » — sémantiquement moins proches, pourtant liés (choix techniques du même projet).

Là intervient le graphe de connaissances.

Graph RAG : faire comprendre les connexions à l’agent

Le graphe stocke entités et relations.

Dans l’exemple ci-dessus :

(Utilisateur) --[travaille sur]--> (Projet e-commerce)
(Projet e-commerce) --[frontend]--> (Next.js)
(Projet e-commerce) --[backend]--> (Supabase)
(Projet e-commerce) --[module actuel]--> (Module paiement)

Question « quelle est la stack du projet ? » — parcours du graphe pour toutes les technologies associées.

Le blog Neo4j propose trois graphes :

  1. Graphe utilisateur : profil, préférences, historique
  2. Graphe de tâche : tâche courante, sous-tâches, dépendances
  3. Graphe de connaissances : savoir domaine, liens entre concepts

La puissance du graphe : recherche multi-sauts. Les vecteurs trouvent le « similaire », le graphe le « relié ».

Requête « quels problèmes l’utilisateur a rencontrés sur ce projet ? » :

  • Partir du nœud « utilisateur »
  • Trouver les « projets » concernés
  • Trouver les « problèmes » liés
  • Trouver les « solutions »

Impossible avec une base vectorielle seule.

Reasoning Memory : la clé du suivi des décisions

La mémoire de raisonnement — capacité ignorée par la plupart des frameworks.

Elle n’enregistre pas « ce qui s’est passé », mais « pourquoi on a fait ainsi ».

Exemple :

  • Utilisateur : « Écris-moi une page de connexion »
  • Agent : « Connexion tierce nécessaire ? »
  • Utilisateur : « Non, email seulement »
  • Agent décide : NextAuth, sans OAuth

La mémoire de raisonnement enregistre :

{
  "decision": "NextAuth, sans OAuth",
  "reasoning": "L'utilisateur veut uniquement la connexion par email",
  "constraints": ["Pas d'OAuth"],
  "alternatives_considered": ["Clerk", "Auth personnalisée"],
  "chosen_because": "NextAuth léger, conforme au besoin"
}

Valeur :

  1. Explicabilité : « Pourquoi pas Clerk ? » — l’agent peut répondre
  2. Débogage : retracer la chaîne de décision
  3. Apprentissage continu : référence pour des cas similaires

Chez Neo4j, la mémoire de raisonnement est modélisée en « nœuds de décision » liés aux nœuds de contraintes et de résultats — traçabilité complète des causes et effets.

Schéma hybride : vecteurs + graphe + stockage structuré

Alors, que choisir ?

Réponse : hybride.

Vecteurs seuls → relations perdues. Graphe seul → coût de construction élevé, recherche sémantique faible. Base relationnelle seule → flexibilité et rappel insuffisants.

Meilleure combinaison en pratique :

  • Base vectorielle : textes de dialogue, recherche sémantique
  • Graphe de connaissances : relations entre entités, raisonnement multi-sauts
  • Base relationnelle : données structurées (profil utilisateur, état des tâches)

Collaboration :

  1. Question utilisateur → recherche vectorielle, rappel de fragments pertinents
  2. Extraction d’entités des fragments → requête graphe pour informations associées
  3. Données structurées → requête directe sur la base relationnelle

Flexibilité sémantique, puissance relationnelle du graphe, efficacité des requêtes structurées.

Comparaison pratique de six frameworks

Assez de théorie — comment choisir en pratique ?

Mem0 : intégration rapide, mémoire multi-niveaux

Mem0 est l’un des frameworks de mémoire les plus populaires. Positionnement « mémoire en tant que service » — pas besoin de gérer stockage et recherche, appelez l’API.

Points clés :

  • Service managé, pas d’infrastructure à monter
  • 21 intégrations (LangChain, LangGraph, LlamaIndex, CrewAI, etc.)
  • Extraction, mise à jour et recherche automatiques
  • Multi-tenant, multi-session

Données LOCOMO :

  • Précision : 66,9 %
  • Latence : 0,71 s
  • Consommation tokens : ~2K

Cas d’usage :

  • Prototype rapide
  • Agent vocal (sensible à la latence)
  • Projets multi-frameworks

Limites :

  • Service managé, données hors de votre infra
  • Fonctions avancées (mémoire de raisonnement) limitées
  • Personnalisation inférieure à une solution maison

Exemple de code :

from mem0 import Memory

m = Memory()

# Ajouter une mémoire
m.add("L'utilisateur aime les réponses concises", user_id="user_001")

# Rechercher
results = m.search("préférences utilisateur", user_id="user_001")

# Retour : ["L'utilisateur aime les réponses concises"]

D’une simplicité déconcertante — c’est le principal atout de Mem0.

Letta : choix pour agents long terme

Letta (ex-MemGPT) emprunte une autre voie : mémoire en architecture type OS, accent sur l’« auto-gestion » de l’agent.

Points clés :

  • Mémoire en couches type OS : RAM (contexte) + disque (stockage externe)
  • L’agent décide lecture/écriture, éviction, rappel
  • Sleep-time Compute pour traitement asynchrone
  • Support complet de la mémoire de raisonnement

Cas d’usage :

  • Agents long terme (assistant code, assistant personnel)
  • Projets exigeant traçabilité des décisions
  • Scénarios à forte autonomie

Limites :

  • Courbe d’apprentissage plus raide
  • Déploiement et gestion à votre charge
  • Exige un modèle capable (petits modèles peinent à « s’auto-gérer »)

Schéma d’architecture :

┌─────────────────────────────────────┐
│          Agent (LLM)                │
│  ┌───────────────────────────────┐  │
│  │      Core Memory (RAM)        │  │
│  │  - Self Block: Je suis...     │  │
│  │  - User Block: L'utilisateur..│  │
│  │  - Task Block: Tâche actuelle │  │
│  └───────────────────────────────┘  │
└─────────────────────────────────────┘
         ↓ gestion active
┌─────────────────────────────────────┐
│    Stockage externe (Disque)        │
│  - Recall Memory (base vectorielle) │
│  - Archival Memory (archives)       │
└─────────────────────────────────────┘

Pour un agent compagnon long terme, Letta reste le choix le plus mature.

Zep : expert de la mémoire conversationnelle

Zep se concentre sur la mémoire en contexte dialogue. Capacité centrale : « résumé progressif » — compression continue de l’historique pour garder la fenêtre utilisable.

Points clés :

  • Résumé progressif : plus la conversation est longue, plus le résumé est dense
  • Recherche hybride sémantique + temporelle
  • Extraction de faits : entités et relations depuis le dialogue
  • Multimodal (texte, image)

Cas d’usage :

  • Chatbots support
  • Applications conversationnelles IA
  • Long historique de dialogue

Limites :

  • Orienté dialogue ; support agent généraliste limité
  • Version open source restreinte, entreprise coûteuse

Atout Zep : détection automatique de « faits » (« l’utilisateur s’appelle Zhang San », « habite Pékin ») stockés en données structurées — disponibles sans parcourir l’historique.

Cognee : approche graphe de connaissances

Cognee est dédié à la mémoire par graphe. Pour un raisonnement relationnel fort, c’est le premier choix.

Points clés :

  • Construction automatique de graphe de connaissances
  • Plusieurs moteurs de graphe (Neo4j, NetworkX, etc.)
  • Pipeline extraction d’entités + relations
  • Mises à jour incrémentales

Coût d’extraction d’entités :

MéthodeLatenceQualitéCoût
spaCy~5 msMoyenneFaible
GLiNER2~50 msÉlevéeMoyen
LLM~500 msMaximaleÉlevé

Cas d’usage :

  • Agent à forte densité de connaissances (assistant recherche, Q&R base documentaire)
  • Raisonnement multi-sauts
  • Besoin de réseau relationnel

Limites :

  • Coût de construction élevé (surtout extraction par LLM)
  • Infrastructure graphe requise
  • Surdimensionné pour scénarios simples

Matrice de décision

ScénarioFramework recommandéRaison
Prototype rapide / MVPMem0Prise en main la plus rapide, sans infra
Agent vocalMem0Faible latence, service managé stable
Agent compagnon long termeLettaGestion type OS, mémoire de raisonnement complète
Support client entrepriseZepMémoire dialogue, extraction de faits auto
Agent connaissances densesCogneeGraphe puissant, raisonnement relationnel
Infra maisonLetta + base vectorielle au choixMaximum de flexibilité, coût maîtrisé

Conseil général :

  • Commencer par Mem0 pour le prototype
  • Migrer vers Letta pour mémoire long terme
  • Ajouter Cognee ou Neo4j pour raisonnement relationnel complexe

Cas pratiques et bonnes pratiques

Mémoire pour agent vocal

L’agent vocal est extrêmement sensible à la latence. Après la parole de l’utilisateur, au-delà de 200 ms sans réponse, la sensation de saccade apparaît.

La recherche mémoire doit tenir en 100 ms (100 ms restants pour synthèse vocale et transmission).

Approche Mem0 :

  1. Préchargement Core Memory : préférences et réglages courants chargés en mémoire au début de session
  2. Récupération passive Recall Memory : requête uniquement si nécessaire, index vectoriel optimisé
  3. Mise à jour asynchrone : après le dialogue, sans bloquer la réponse

Données ElevenLabs + Mem0 : latence bout en bout sous 300 ms, expérience utilisateur satisfaisante.

Agent support client entreprise

Besoins centraux : mémoriser l’utilisateur long terme, expliquer les décisions.

Architecture type :

Message utilisateur

Reconnaissance d'intention

┌─────────────────┬─────────────────┐
│  Core Memory     │  Recall Memory  │
│  (profil user)   │  (historique)   │
└─────────────────┴─────────────────┘

Recherche base documentaire (RAG)

Génération de réponse

Enregistrement mémoire de raisonnement (pourquoi cette réponse)

Zep performe bien ici : extraction automatique de faits pour les infos de base, résumé progressif pour les longues conversations.

Assistant personnel : apprentissage inter-sessions

Capacité centrale : apprendre les préférences, continuité entre sessions.

Conception clé :

  1. Mémoire profil utilisateur : stockage long terme — préférences, habitudes, outils
  2. Mémoire contexte projet : isolation par projet, chargement du contexte à la commutation
  3. Mémoire de raisonnement : pourquoi telle recommandation, pourquoi telle option écartée

Letta convient : Core Memory pour le profil, Recall Memory pour l’historique projet, Archival Memory pour projets archivés.

Guide des pièges

Pièges rencontrés :

Piège 1 : tout mettre dans la base vectorielle

Problème : la base vectorielle excelle en recherche sémantique, pas en requête précise ni raisonnement relationnel.

Solution : stockage hybride. Données structurées (ID utilisateur, état projet) en base relationnelle, mémoire sémantique en vecteurs, mémoire relationnelle en graphe.

Piège 2 : absence de stratégie TTL

Problème : mémoires qui s’accumulent, recherche qui ralentit, rappel d’informations expirées.

Solution : TTL par type. Événements : quelques heures ; tâches : nettoyage à la fin ; profil utilisateur : conservation long terme.

Piège 3 : ignorer la mémoire de raisonnement

Problème : l’agent décide sans expliquer. Débogage difficile, défiance utilisateur.

Solution : enregistrement explicite de la chaîne de décision — choix retenu, raison, options écartées.

Piège 4 : trop compter sur le LLM pour gérer la mémoire

Problème : laisser un petit modèle décider quoi mémoriser ou supprimer — résultats médiocres.

Solution : pour petits modèles, règles d’appoint — extraction d’entités explicite, modèles de mémoire fixes, poids d’importance prédéfinis.

Conclusion

L’essentiel en quelques points :

Premièrement, la mémoire est le « second cerveau » de l’agent — pas une option, une architecture centrale. Sans mémoire, un agent est comme un ordinateur sans disque — coupure, amnésie totale, redémarrage à zéro. Pour passer de « outil » à « partenaire », le système de mémoire est incontournable.

Deuxièmement, les trois types de mémoire sont indissociables. Court terme pour le contexte, long terme pour la persistance, raisonnement pour l’explicabilité. La plupart des frameworks n’implémentent que les deux premiers.

Troisièmement, le choix de framework dépend du scénario — pas de solution universelle. Agent vocal → Mem0 (faible latence) ; tâche longue → Letta (gestion type OS) ; connaissances denses → Cognee (graphe) ; support → Zep (dialogue).

Quatrièmement, la base vectorielle n’est pas omnipotente. Vecteurs pour le « similaire », graphe pour les « relations », stockage structuré pour la « précision ». Les trois ensemble.

Cinquièmement, la mémoire exige une gouvernance — pas un simple stockage. TTL, décroissance, nettoyage périodique. Sinon la base devient une décharge.

Actions recommandées :

  1. Partir des données LOCOMO pour comprendre les métriques de performance
  2. Prototype rapide avec Mem0 ou neo4j-agent-memory
  3. Suivre la Reasoning Memory — prochain différenciateur des agents

L’avenir des agents, ce n’est pas seulement « un modèle plus intelligent », mais « une mémoire plus durable ». Quand un agent se souvient de ce que vous avez dit il y a un mois, comprend pourquoi vous avez pris telle décision, et prolonge le contexte à la conversation suivante — là commence la vraie « intelligence ».


À lire aussi

Références

FAQ

Pourquoi un agent IA a-t-il besoin d'un système de mémoire indépendant ? La fenêtre de contexte ne suffit-elle pas ?
La fenêtre de contexte est limitée et coûteuse. Le benchmark LOCOMO montre que le contexte plein atteint 72,9 % de précision mais 9,87 s de latence, avec une consommation de tokens 13 fois supérieure à un système de mémoire. Pire encore, la pourriture du contexte : plus la fenêtre est grande, plus d'informations non pertinentes diluent l'attention du modèle. Un système de mémoire indépendant résout ce problème par une gestion en couches (court terme / long terme / raisonnement).
Quelle différence entre mémoire à court terme, long terme et de raisonnement ?
Chaque type a un rôle distinct :

• Mémoire à court terme : la fenêtre de contexte, capacité limitée, disparaît à la fin de la session — comme la RAM
• Mémoire à long terme : stockage externe (base vectorielle / graphe), grande capacité, persistante — comme le disque dur
• Mémoire de raisonnement : enregistre le processus de décision (pourquoi A et non B), pour l'explicabilité et le débogage

La plupart des frameworks n'implémentent que les deux premiers ; la mémoire de raisonnement est sous-estimée.
Comment choisir entre Mem0, Letta, Zep et Cognee ?
Selon le scénario :

• Mem0 : prototype rapide, agent vocal (faible latence 0,71 s)
• Letta : agent compagnon long terme (gestion type OS, mémoire de raisonnement complète)
• Zep : support client entreprise (résumé progressif, extraction de faits)
• Cognee : agent à forte densité de connaissances (graphe puissant, raisonnement multi-sauts)

Commencez par Mem0 pour le prototype, puis migrez vers Letta ou Cognee selon les besoins.
Comment combiner base vectorielle et graphe de connaissances ?
La base vectorielle excelle en recherche sémantique (contenu similaire), le graphe en raisonnement relationnel (contenu associé). Schéma hybride : base vectorielle pour les textes de dialogue, graphe pour les relations entre entités, base relationnelle pour les requêtes précises. Les trois combinés couvrent tous les scénarios.
Le système de mémoire provoque-t-il une inflation ? Comment la gouverner ?
Oui. Plus l'utilisateur utilise le système, plus les mémoires s'accumulent et la recherche ralentit. Stratégies :

• TTL par type (événements : quelques heures ; tâches : par cycle ; profil utilisateur : long terme)
• Décroissance : score d'importance qui baisse avec le temps, archivage sous seuil
• Nettoyage périodique : suppression des mémoires expirées, dupliquées ou peu utiles

Letta recommande de conserver 70 % de l'information — meilleur équilibre continuité / compression.
Qu'est-ce que la Reasoning Memory ? Pourquoi la plupart des frameworks ne l'implémentent-ils pas ?
La Reasoning Memory (mémoire de raisonnement) enregistre le processus de décision : pourquoi ce choix, quelles options écartées, quelles contraintes à l'instant T. Essentielle pour l'explicabilité, le débogage et l'apprentissage continu. Difficile à implémenter car elle exige un enregistrement structuré de la chaîne de raisonnement, pas un simple stockage de dialogue. Seuls Letta, Zep et quelques autres la supportent.

19 min de lecture · Publié le: 13 avr. 2026 · Mis à jour le: 30 juil. 2026

Commentaires

Connectez-vous avec GitHub pour laisser un commentaire

Easton BlogEaston Blog