logo
Développement
Rechercher
Système de mémoire tridimensionnel

Système de mémoire tridimensionnel

Vue d'ensemble

Le système de mémoire de l'espace de travail adopte une architecture tridimensionnelle, stockant et gérant les connaissances selon trois dimensions : le compte, l'entreprise et la session. La mémoire est profondément intégrée aux conversations — chaque conversation interroge la mémoire pertinente pour l'injecter dans le contexte, et de nouveaux souvenirs sont automatiquement extraits à la fin de chaque tour d'interaction.

Socle technique : API REST mem0 + graphe de connaissances Neo4j.


Architecture tridimensionnelle

Dimension Portée Mode d'écriture Droits de gestion Injection en conversation
Niveau compte userId (inter-organisations) Ajout manuel + extraction automatique en conversation Géré par l'utilisateur « Profil utilisateur » injecté dans le system prompt
Niveau entreprise orgId (isolation par organisation) Maintenance manuelle par l'administrateur Uniquement l'administrateur de l'espace de travail « Profil entreprise » injecté dans le system prompt
Niveau session runId (session unique) Extraction automatique à chaque tour Gestion automatique Recherche sémantique au sein de la session

Mémoire de niveau compte

  • Partage inter-organisations : liée au userId, disponible dans toutes les organisations de l'utilisateur
  • Mode d'écriture :
    • Manuel : ajoutée via l'interface de gestion de la mémoire ou par une commande dans la conversation
    • Automatique : détection automatique en conversation des informations dignes d'être mémorisées
  • Interface de gestion : Paramètres APP → Mémoire
  • Documentation détaillée : Gestion de la mémoire

Mémoire de niveau entreprise

  • Isolation par organisation : liée à l'orgId, visible uniquement par les membres de l'organisation courante
  • Droits de gestion : seul l'administrateur de l'espace de travail peut la maintenir
  • Interface de gestion : Gestion de l'espace → Paramètres avancés → Mémoire d'entreprise
  • Documentation détaillée : Paramètres avancés — Mémoire d'entreprise

Mémoire de niveau session

  • Session unique : liée au runId, valable uniquement au sein de la session courante
  • Extraction à chaque tour : analyse et extraction automatiques de la mémoire à la fin de chaque tour de conversation
  • Aucune gestion requise : le système traite tout automatiquement

Mécanisme d'extraction de la mémoire

Commandes explicites (indice de confiance 0,99)

L'utilisateur demande directement à l'Agent de mémoriser ou d'oublier une information :

Action Mots-clés déclencheurs
Ajouter un souvenir « retiens », « note », « enregistre en mémoire », « sauvegarde en mémoire », « remember », « store in memory »
Supprimer un souvenir « supprime le souvenir », « oublie », « oublie ça », « forget this », « remove from memory »

Détection implicite (indice de confiance 0,5-0,93)

Le système détecte automatiquement, à l'aide de motifs d'expressions régulières, les faits persistants au sein de la conversation :

Type de signal Exemple Indice de confiance
Profil personnel « je m'appelle Zhang San », « je suis développeur front-end », « my name is » 0,93
Possession personnelle « j'ai un chat », « j'élève », « I own » 0,90
Préférence personnelle « je préfère utiliser TypeScript », « I prefer » 0,88
Style de l'assistant « à l'avenir, réponds en chinois », « always use », « préférence de format de réponse » 0,86

Seuils de confiance

Mode Seuil Description
strict 0,85 Mode conservateur, n'extrait que les souvenirs à forte confiance
standard (par défaut) 0,65 Mode équilibré
relaxed 0,50 Mode agressif, davantage de contenu est mémorisé

Règles d'exclusion automatique

Les contenus suivants ne sont pas extraits comme souvenirs :

  • Simples questions (se terminant par un point d'interrogation, commençant par un mot interrogatif)
  • Bavardages / formules de politesse
  • Contenus figurant dans les blocs de code
  • Informations à durée limitée / liées au temps (dates, actualités, états temporaires)
  • Sujets non persistants (rapports de bug, messages d'erreur)

Graphe de connaissances

Stockage back-end (Neo4j)

Les relations de mémoire sont stockées sous forme de triplets dans la base de données graphe Neo4j :

(entité source) --[relationship]--> (entité cible)
                      
                      (entité source) --[relationship]--> (entité cible)

                    
Ce bloc de code dans la fenêtre flottante

Requête de voisinage N-hop (1 à 4 sauts) :

MATCH path = (n {name: $entity})-[*1..depth]-(m) WHERE ALL(node IN nodes(path) WHERE node.user_id = $user_id) UNWIND relationships(path) AS rel RETURN source, relationship, target
                      
                      MATCH path = (n {name: $entity})-[*1..depth]-(m)
WHERE ALL(node IN nodes(path) WHERE node.user_id = $user_id)
UNWIND relationships(path) AS rel
RETURN source, relationship, target

                    
Ce bloc de code dans la fenêtre flottante

La requête Cypher garantit qu'elle ne franchit jamais les frontières entre utilisateurs.

Visualisation front-end

Utilise react-force-graph-2d pour le rendu d'un graphe à disposition dirigée par les forces :

Type de nœud Couleur Description
Hub Violet #6d28d9 Nœud central utilisateur/organisation
Fact Bleu #2563eb Entrée de mémoire
Entity Ambre #f59e0b (par défaut) Entité extraite ; la couleur exacte est déterminée par un mappage de hash djb2 vers une palette de 10 couleurs

Optimisation du rendu du graphe (mise à jour 2026-04) NEW

La nouvelle version du graphe introduit deux seuils de densité afin d'éviter le chevauchement des étiquettes lorsque les nœuds sont trop nombreux :

Constante de seuil Valeur Signification
PILL_READABILITY_MIN_SCALE 1.5 Aucune étiquette textuelle rendue en dessous d'un zoom de 1,5x
PILL_MIN_SCREEN_AREA_PER_NODE 3000 Aucune étiquette rendue si la surface d'écran par nœud est inférieure à 3000 pixels

Les étiquettes ne s'affichent que si les deux conditions sont simultanément satisfaites. Sinon, seuls des points sont rendus.

Stabilisation des couleurs par Entity Type :

  • Calcul de l'indice de couleur du type d'entité via un hash djb2 → indice de couleur
  • Les entités d'un même type conservent la même couleur d'une vue à l'autre et dans le temps
  • La palette de 10 couleurs permet une réutilisation cyclique pour un nombre illimité de types

Correction de bug : lors du mappage des relations du graphe, les champs sourceTypes / targetTypes étaient auparavant ignorés, ce qui faisait retomber tous les nœuds sur la couleur grise de secours. Ce bug est corrigé (voir sidecar/src/mem0Service.ts).

Exploration multi-niveaux

Cliquer sur un nœud permet de déployer les entités qui lui sont associées, pour explorer le réseau de connaissances couche par couche. Le moteur graphe prend en charge :

  • neighborhood() — requête de voisinage N-hop
  • shortestPath() — chemin le plus court entre deux entités
  • extractEntitiesFromText() — extraction des noms d'entités à partir du texte

Synergie entre mémoire et conversation

Moments d'interrogation de la mémoire

Moment Action
Nouvelle conversation Interrogation de la mémoire du profil de compte + de la mémoire du profil d'entreprise, concaténées dans le system prompt
Envoi d'un message par l'utilisateur L'outil memory_query effectue une recherche sémantique des souvenirs pertinents
Expansion du graphe searchWithGraphExpansion — recherche sémantique + expansion du graphe sur 1 hop, renvoyant les entités et arêtes pertinentes

Emplacement d'injection de la mémoire

Deux résumés de mémoire sont injectés dans le system prompt :

Vous êtes l'assistant IA GPTBots... ## Profil utilisateur - L'utilisateur est ingénieur en développement front-end - Préfère utiliser TypeScript - ... ## Profil entreprise - L'entreprise utilise la stack technique React - Nom de code du projet : Project Alpha - ...
                      
                      Vous êtes l'assistant IA GPTBots...

## Profil utilisateur
- L'utilisateur est ingénieur en développement front-end
- Préfère utiliser TypeScript
- ...

## Profil entreprise
- L'entreprise utilise la stack technique React
- Nom de code du projet : Project Alpha
- ...

                    
Ce bloc de code dans la fenêtre flottante

Outils de mémoire

L'Agent peut interroger et gérer activement la mémoire via les outils suivants :

Outil Opération Description
memory_query list / search / graph_traverse Liste, recherche sémantique, parcours du graphe
memory_manage add / update / delete Ajout, modification, suppression de souvenirs
conversation_search search Recherche dans l'historique des conversations
recent_chats list Liste des conversations récentes

Isolation Gateway inter-comptes NEW

Lorsqu'un nœud est appelé de manière inter-comptes avec une portée enterprise :

  • Mémoire de niveau compte (liée au userId) : ❌ inaccessible
  • Mémoire de niveau entreprise (liée à l'orgId) : ✅ accessible
  • Mémoire de niveau session (au sein de la session courante) : ✅ accessible

Un filtrage forcé est appliqué lors de la phase d'interrogation dans mem0Service via l'indicateur isRemoteSession — un appel inter-comptes ne peut pas lire les souvenirs personnels du propriétaire du nœud cible.

Objectif de conception : protéger la vie privée tout en préservant le partage collaboratif des connaissances au niveau de l'organisation. Voir Architecture multi-nœuds.


Capacités de mem0

Le back-end de mémoire, basé sur mem0, fournit les capacités automatisées suivantes :

Capacité Description
Mise à jour automatique Les nouvelles informations remplacent les anciennes (par exemple « j'aime Python » → « j'aime TypeScript »)
Fusion automatique Les souvenirs similaires sont fusionnés en une entrée plus complète
Oubli automatique Les informations contradictoires entraînent le nettoyage automatique des anciennes versions

Protection par délai d'expiration

Opération Délai d'expiration
Interrogation / gestion de la mémoire 25 secondes
Opérations de mémoire de niveau session 5 secondes (délai court, pour ne pas bloquer la conversation)
Récupération des relations du graphe 3 secondes (dégradation gracieuse après expiration)

Ce que cela signifie pour l'utilisateur

Le système de mémoire permet à l'Agent de « vous connaître ». Sans mémoire, l'Agent aborde chaque conversation comme un inconnu rencontré pour la première fois ; avec la mémoire, l'Agent connaît vos préférences, le contexte de vos projets et vos habitudes de travail.

Concrétisation des trois dimensions en pratique :

  • Mémoire de compte : « Vous avez dit préférer TypeScript » → l'Agent privilégie TypeScript dans les conversations de toutes vos organisations
  • Mémoire d'entreprise : l'administrateur a ajouté « l'entreprise utilise la base de données PostgreSQL » → lorsqu'ils discutent de bases de données avec l'Agent, tous les membres de l'organisation se voient recommander par défaut une solution PostgreSQL
  • Mémoire de session : vous dites au cours de cette conversation « le projet actuel s'appelle Project Alpha » → l'Agent s'en souvient dans cette conversation, mais pas nécessairement dans une nouvelle

Vous pouvez gérer la mémoire ainsi :

  • Pour les préférences personnelles : dites dans la conversation « retiens que je préfère le thème dark », ou ajoutez-la manuellement dans Paramètres APP → Mémoire
  • Pour les connaissances d'entreprise : contactez l'administrateur pour qu'il les ajoute dans Gestion de l'espace → Paramètres avancés → Mémoire d'entreprise
  • Si un souvenir est erroné : dites dans la conversation « oublie ma préférence antérieure concernant Python », ou supprimez-la directement dans la gestion de la mémoire
  • Pour consulter les souvenirs existants : Paramètres APP → Mémoire, où vous pouvez parcourir la liste et le graphe

Documents associés