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)
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
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-hopshortestPath()— chemin le plus court entre deux entitésextractEntitiesFromText()— 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
- ...
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
- Gestion de la mémoire — Interface de gestion de la mémoire côté APP
- Paramètres avancés — Mémoire d'entreprise — Gestion de la mémoire de niveau entreprise
- Gestion des outils — Outils liés à la mémoire (memory_query, memory_manage)
- Architecture multi-nœuds — Mécanisme d'isolation Gateway inter-comptes
