Le modèle de mémoire
Comment les mémoires sont structurées — catégories, clés, tags, priorités, sources, vérification.
Le modèle de mémoire
Le modèle de mémoire de Synapse est conçu pour les agents LLM — suffisamment structuré pour un rappel fiable, suffisamment flexible pour tout domaine.
Anatomie d'une mémoire
{
"id": "mem_abc123",
"category": "project",
"key": "project_synapse_status",
"content": "Synapse v1.5.0 deployed on vps1. CI green.",
"tags": ["synapse", "deployment", "v1.5.0"],
"priority": "high",
"source": "agent",
"verified": false,
"confidence": 0.85,
"expires_at": null,
"mind_id": "m_xyz789",
"created_at": "2026-06-27T...",
"updated_at": "2026-06-27T..."
}Champs
| Champ | Type | Requis | Description |
|---|---|---|---|
id |
string | auto | Identifiant unique (mem_xxx) |
category |
enum | ✅ | Une des 8 catégories |
key |
string | ✅ | Identifiant stable (utilisé pour les mises à jour) |
content |
string | ✅ | Le contenu de la mémoire (n'importe quel texte) |
tags |
string[] | – | Pour la recherche et le filtrage |
priority |
enum | – | low, normal, high, critical (par défaut : normal) |
source |
enum | auto | user, agent (qui l'a stockée) |
verified |
bool | auto | Un humain a-t-il vérifié ceci ? |
confidence |
float | – | 0.0 à 1.0 (par défaut : 1.0 pour user, 0.7 pour agent) |
expires_at |
timestamp | – | Quand oublier cette mémoire |
mind_id |
string | auto | Quel mind possède ceci |
created_at |
timestamp | auto | Premier stockage |
updated_at |
timestamp | auto | Dernière modification |
Catégories
Huit catégories couvrent les cas d'usage courants des agents LLM :
| Catégorie | Rôle | Exemple de contenu |
|---|---|---|
identity |
Qui est l'utilisateur | "User is Michael Schäfer, software engineer in Berlin" |
preference |
Préférences utilisateur | "Prefers concise technical responses" |
fact |
Faits vérifiables | "Office is in Berlin, timezone Europe/Berlin" |
project |
Statut de projet | "Synapse v1.5.0 deployed, working on v1.6.0 docs" |
skill |
Compétences de l'utilisateur | "Advanced Python, 10+ years" |
mistake |
Erreurs passées | "Forgot to bump npm version — CI failed" |
context |
Contexte de session | "Currently reviewing PR #42" |
note |
Notes diverses | "Try Redis for caching next sprint" |
Clés : identifiants stables
Le champ key est critique — c'est ainsi que vous mettez à jour les mémoires sans
créer de doublons.
# Premier stockage
store("project", "project_synapse_status", "v1.4.0 deployed", priority="high")
# Mise à jour avec la même clé (écrase, ne duplique pas)
store("project", "project_synapse_status", "v1.5.0 deployed", priority="high")Règles de clé :
- Doit être unique dans (catégorie, mind)
- Utilisez
snake_case - Préfixez avec la catégorie pour plus de clarté :
preference_communication,mistake_npm_version - Gardez-la stable — ne changez pas les clés après création
Tags : pour la recherche
Les tags permettent le filtrage et la recherche rapides :
# Trouver toutes les mémoires avec le tag "docker"
GET /memory/by-tag?tag=docker
# Recherche FTS5 dans un sous-ensemble tagué
GET /memory/search?q=swarm&tag=dockerBonnes pratiques de tag :
- 2-5 tags par mémoire (ne pas sur-tagger)
- Minuscules pour la cohérence
- Utilisez des noms de projet, sujets, technologies
- Les tags sont insensibles à la casse
Niveaux de priorité
| Priorité | Quand l'utiliser | Comportement de rappel |
|---|---|---|
critical |
Identité, juridique, irréversible | Toujours en haut du rappel |
high |
Projets actifs, préférences clés | Proéminent dans le rappel |
normal |
La plupart des mémoires (par défaut) | Ordre de rappel standard |
low |
Éphémère, utile à savoir | Peut être résumé |
/memory/recall trie par priorité (critical d'abord), puis par récence.
Source : User vs Agent
Les mémoires sont marquées avec source :
user— stockée par un humain (via JWT ou interface humaine)agent— stockée par un agent LLM (via Mind Key)
Cela affecte :
- Vérification : les mémoires
usersont auto-vérifiées, les mémoiresagentne le sont pas - Confiance :
userpar défaut à 1.0,agentà 0.7 - Rappel :
/memory/recallmarque les mémoires non vérifiées avec « (unverified) »
Vérification
Le drapeau verified indique qu'un humain a confirmé la mémoire :
- Mémoires
user: auto-vérifiées (true) - Mémoires
agent: non vérifiées par défaut (false)
Vérifiez les mémoires via :
curl -X POST https://synapse.schaefer.zone/memory/mem_001/verify \
-H "Authorization: Bearer YOUR_JWT"Confiance
Le champ confidence (0.0 à 1.0) indique la fiabilité de la mémoire :
- 1.0 — directement énoncée par l'utilisateur
- 0.7 — déduite par l'agent
- 0.5 — incertaine, nécessite vérification
- 0.0 — explicitement doutée
Définissez la confiance lors du stockage :
{
"category": "preference",
"key": "prefers_dark_mode",
"content": "User seems to prefer dark mode (based on their IDE screenshots)",
"confidence": 0.5,
"source": "agent"
}Expiration
Définissez expires_at pour les mémoires sensibles au temps :
{
"category": "context",
"key": "current_meeting_topic",
"content": "Discussing Q3 roadmap",
"expires_at": "2026-06-28T00:00:00Z"
}Les mémoires expirées ne sont pas renvoyées par /memory/recall (mais existent
toujours en base). Utilisez /memory/expiring?within=7d pour voir les mémoires
expirant bientôt.
Cycle de vie d'une mémoire
┌─────────────────┐
│ Create │
│ POST /memory │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Active │ ◀──── PUT /memory/:id (update)
│ (in recall) │
└────────┬────────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Expired │ │ Verified │ │ Deleted │
│ (in DB) │ │ (flag) │ │ (gone) │
└──────────┘ └──────────┘ └──────────┘Comportement de rappel
GET /memory/recall renvoie un résumé en texte brut optimisé pour le contexte LLM :
Mind: Michael's Mind
Memories: 12 total (10 verified, 2 unverified)
[001] identity (CRITICAL) [verified]
user_name
Michael Schäfer
Tags: person, identity
[002] preference (HIGH) [verified]
communication_style
Prefers concise technical responses
Tags: communication
[003] project (HIGH) [unverified]
synapse_status
v1.5.0 deployed, working on v1.6.0 docs
Tags: synapse, deployment
...- Trié par priorité (critical → low), puis par récence
- Mémoires non vérifiées marquées avec
[unverified] - Tags inclus pour le contexte
- Texte brut (pas d'analyse JSON nécessaire)