Pipeline memoire
Des conversations brutes a la connaissance curatee
La memoire est ce qui transforme un modele de langage en assistant veritablement utile. Notre systeme traite les sessions de conversation brutes via un pipeline en 9 etapes -- de l'extraction au graphe de connaissances -- et les rend cherchables a travers 4 couches de recherche paralleles fusionnees par un plugin dedie (memory-fusion) qui deduplique, re-classe et injecte un seul bloc de contexte propre.
9
etapes dans le pipeline memoire
4
sources de recherche interrogees en parallele
Deduplication
Jaccard (seuil 60% de similarite)
Reranking
par Claude Haiku (scoring 0-10 par resultat)
6
000 caracteres injectes max par requete
Deploye
sur les 2 instances (Max et Eva)
9 etapes des donnees brutes a la connaissance fusionnee
Extract
Cron horaire parse les sessions JSONL en resumes structures (.daily-raw/, interactions.md). Zero tokens LLM.
Distill
2x/jour, Claude Sonnet compresse daily-raw + interactions en MEMORY.md (25K chars). Dedup et resolution de contradictions.
Shepherd
Toutes les 3h, verifie l'integrite de MEMORY.md contre une baseline approuvee. Detecte la derive, restaure si necessaire.
Reflections
2x/jour, l'agent ecrit des reflexions introspectives autonomes sur son comportement et ses decisions.
Vector SQLite
Embeddings locaux (text-embedding-3-small) en SQLite avec sqlite-vec. Couche de recherche semantique de secours.
QMD
Recherche hybride BM25 + vectoriel + reranking sur fichiers markdown indexes. 93% de recall contre 55% en vectoriel seul.
Mem0 + Qdrant
Extraction automatique de faits via Mem0 v1.0.5, stockes dans Qdrant server v1.17.0 (binaire standalone, collection openclaw_mem0, embeddings 1536 dims, distance Cosine). Auto-recall des 5 meilleurs souvenirs.
Cognee
Graphe de connaissances avec entites et relations typees. Triplets interrogeables (entite -> relation -> entite).
Fusion
Fusionne les resultats de QMD + Mem0/Qdrant + Cognee en parallele. Dedup Jaccard, reranking Haiku (0-10), budget 6000 chars.
Chaque couche a ses forces. Toutes s'executent simultanement.
QMD
BM25 + Vectoriel + Rerank
Mem0
Qdrant + auto-faits
Cognee
Graphe de connaissances
SQLite
Vecteur de secours
QMD (recherche hybride)
Hybride (mots-cles + semantique)
Backend memoire natif d'OpenClaw. Combine BM25 (mots-cles exacts) + recherche vectorielle (similarite semantique) + reranking LLM avec modeles GGUF locaux.
Modeles : embeddinggemma-300M, Qwen3-Reranker-0.6B, qmd-query-expansion-1.7B. Mode : query. 93% de recall contre 55% en vectoriel seul.
Mem0 + Qdrant (auto-facts)
Faits et preferences extraits automatiquement
Mem0 v1.0.5 extrait automatiquement les faits apres chaque conversation avec deduplication intelligente. L'auto-recall injecte les 5 souvenirs les plus pertinents avant chaque reponse.
Backend : Qdrant server v1.17.0 (binaire standalone, pas Docker). Collection openclaw_mem0, embeddings 1536 dims (text-embedding-3-small), distance Cosine. Port 6334, loopback uniquement. ~80-180 MB RAM. LLM : gpt-4o-mini.
Cognee (graphe de connaissances)
Triplets relationnels (entite -> relation -> entite)
Extrait les entites et relations depuis les fichiers memoire. Construit un graphe interrogeable (ex : julien -> corrected_by -> bug gateway).
Serveur FastAPI sur localhost:8000. Mode de recherche : INSIGHTS (triplets entite-relation-entite). 19 fichiers indexes. Deploye sur Max et Eva.
Vectoriel SQLite (secours)
Semantique pure (similarite cosinus)
L'ancien index vectoriel, toujours actif comme filet de securite. Embeddings via OpenAI text-embedding-3-small, stockes en SQLite local.
Recherche hybride : 70% vectoriel + 30% full-text. Couvre tout l'historique.
| Couche | Max | Eva | Statut |
|---|---|---|---|
| Vectoriel SQLite | OK | OK | Production |
| QMD (hybride BM25+vec+rerank) | OK | OK | Production |
| Mem0 + Qdrant (auto-facts) | OK | OK | Production |
| Cognee (graphe de connaissances) | OK | OK | Production |
| Memory Fusion (dedup + rerank) | OK | OK | Production |
| Daemon | Frequence | Role |
|---|---|---|
com.openclaw.memory-extract | Horaire | Parse les sessions, produit interactions.md + .daily-raw/, reindexe |
com.openclaw.memory-distill | 2x/jour | LLM compresse daily-raw + interactions en MEMORY.md, reindexe |
ai.openclaw.memory-shepherd | Toutes les 3h | Protege la baseline MEMORY.md, archive les notes temporaires |
com.openclaw.agent-reflect | 2x/jour | L'agent ecrit une reflexion autonome dans memory/reflect/ |
ai.openclaw.cognee-server | Permanent | Serveur FastAPI Cognee (port 8000) |
Comment chaque composant fonctionne et pourquoi il existe.
extract-and-reindex.py
Cron horaire (launchd)Transforme les sessions de conversation brutes en memoire structuree et cherchable.
HOW IT WORKS
- Scanne tous les fichiers JSONL de sessions des 24 dernieres heures
- Extrait des resumes structures dans .daily-raw/ (retention 4 jours) et memory/interactions.md (40K chars max, fenetre glissante)
- Declenche la reindexation QMD apres chaque execution pour garder les embeddings a jour
- Zero tokens LLM -- parsing Python pur, aucun appel API
WHY IT MATTERS
Sans extraction, l'agent n'aurait que des logs JSONL bruts. Ce script cree la couche structuree sur laquelle tous les autres systemes memoire s'appuient.
distill-memory.py
2x/jour (launchd)Compresse les interactions quotidiennes en un MEMORY.md curate et durable.
HOW IT WORKS
- Lit les resumes .daily-raw/ et memory/interactions.md
- Utilise Claude Sonnet (~5K tokens par execution) pour resumer, fusionner et dedupliquer
- Reecrit MEMORY.md avec le resultat condense, preserve le contexte important et supprime le bruit
- Declenche la reindexation QMD apres chaque cycle de distillation
WHY IT MATTERS
Les interactions brutes s'accumulent vite. Sans distillation, MEMORY.md grossirait indefiniment et perdrait en signal. Le LLM agit comme curateur, ne gardant que l'essentiel.
memory-shepherd
Toutes les 3 heures (launchd)Protege MEMORY.md contre la derive identitaire lente causee par la reecriture LLM repetee.
HOW IT WORKS
- Maintient une copie baseline de MEMORY.md verifiee par l'humain
- Toutes les 3h, compare le MEMORY.md actuel avec la baseline par analyse de diff
- Si la derive depasse le seuil : archive la version corrompue, restaure la baseline et journalise l'incident
- Archive aussi les notes temporaires (scratch notes) pour eviter l'accumulation
WHY IT MATTERS
Le script distill utilise un LLM pour reecrire MEMORY.md deux fois par jour. Sur des centaines de cycles, les petites deviations s'accumulent -- la personnalite, les instructions ou les connaissances de l'agent pourraient changer silencieusement. Le shepherd ancre tout sur une reference approuvee par l'humain.
agent-reflect
2x/jour (launchd)Donne a l'agent des capacites d'introspection autonome.
HOW IT WORKS
- L'agent ecrit des reflexions libres sur son propre comportement, ses decisions et ses interactions dans memory/reflect/
- Les reflexions sont indexees par QMD et disponibles pour la recherche de contexte future
- Aucune revue humaine requise -- c'est l'agent qui reflechit sur lui-meme
WHY IT MATTERS
L'auto-reflexion permet une amelioration comportementale au fil du temps. L'agent peut reconnaitre les patterns dans ses propres erreurs et s'ajuster sans correction humaine explicite.
memory-fusion
A chaque requete (plugin)Deduplique et re-classe les resultats des 3 sources memoire (QMD + Mem0/Qdrant + Cognee) en un seul bloc propre.
HOW IT WORKS
- Interroge QMD, Mem0/Qdrant et Cognee en parallele via Promise.allSettled (tolere les pannes individuelles)
- Deduplique les resultats par similarite Jaccard sur les ensembles de mots (seuil : 0.6 -- 60% de chevauchement = doublon)
- Re-classe les resultats dedupliques via Claude Haiku avec scoring de pertinence par resultat (echelle 0-10)
- Injecte un seul bloc memory fusionne respectant un budget de 6 000 caracteres (max 8 resultats) dans le contexte
WHY IT MATTERS
Sans fusion, les 3 sources injecteraient chacune leurs propres resultats, creant des doublons et du bruit. La fusion donne a l'agent un seul contexte memoire propre et classe au lieu de trois qui se chevauchent.
