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

Ingestion
1

Extract

Cron horaire parse les sessions JSONL en resumes structures (.daily-raw/, interactions.md). Zero tokens LLM.

2

Distill

2x/jour, Claude Sonnet compresse daily-raw + interactions en MEMORY.md (25K chars). Dedup et resolution de contradictions.

3

Shepherd

Toutes les 3h, verifie l'integrite de MEMORY.md contre une baseline approuvee. Detecte la derive, restaure si necessaire.

Indexation
4

Reflections

2x/jour, l'agent ecrit des reflexions introspectives autonomes sur son comportement et ses decisions.

5

Vector SQLite

Embeddings locaux (text-embedding-3-small) en SQLite avec sqlite-vec. Couche de recherche semantique de secours.

6

QMD

Recherche hybride BM25 + vectoriel + reranking sur fichiers markdown indexes. 93% de recall contre 55% en vectoriel seul.

Search & Fusion
7

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.

8

Cognee

Graphe de connaissances avec entites et relations typees. Triplets interrogeables (entite -> relation -> entite).

9

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.

Requete agent
parallele

QMD

BM25 + Vectoriel + Rerank

Mem0

Qdrant + auto-faits

Cognee

Graphe de connaissances

SQLite

Vecteur de secours

Fusion : dedup Jaccard + rerank Haiku
Reponse enrichie

QMD (recherche hybride)

Hybride (mots-cles + semantique)

Primaire

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

Faits

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)

Graphe

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)

Secours

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.

CoucheMaxEvaStatut
Vectoriel SQLiteOKOKProduction
QMD (hybride BM25+vec+rerank)OKOKProduction
Mem0 + Qdrant (auto-facts)OKOKProduction
Cognee (graphe de connaissances)OKOKProduction
Memory Fusion (dedup + rerank)OKOKProduction
DaemonFrequenceRole
com.openclaw.memory-extractHoraireParse les sessions, produit interactions.md + .daily-raw/, reindexe
com.openclaw.memory-distill2x/jourLLM compresse daily-raw + interactions en MEMORY.md, reindexe
ai.openclaw.memory-shepherdToutes les 3hProtege la baseline MEMORY.md, archive les notes temporaires
com.openclaw.agent-reflect2x/jourL'agent ecrit une reflexion autonome dans memory/reflect/
ai.openclaw.cognee-serverPermanentServeur 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

  1. Scanne tous les fichiers JSONL de sessions des 24 dernieres heures
  2. Extrait des resumes structures dans .daily-raw/ (retention 4 jours) et memory/interactions.md (40K chars max, fenetre glissante)
  3. Declenche la reindexation QMD apres chaque execution pour garder les embeddings a jour
  4. 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

  1. Lit les resumes .daily-raw/ et memory/interactions.md
  2. Utilise Claude Sonnet (~5K tokens par execution) pour resumer, fusionner et dedupliquer
  3. Reecrit MEMORY.md avec le resultat condense, preserve le contexte important et supprime le bruit
  4. 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

  1. Maintient une copie baseline de MEMORY.md verifiee par l'humain
  2. Toutes les 3h, compare le MEMORY.md actuel avec la baseline par analyse de diff
  3. Si la derive depasse le seuil : archive la version corrompue, restaure la baseline et journalise l'incident
  4. 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

  1. L'agent ecrit des reflexions libres sur son propre comportement, ses decisions et ses interactions dans memory/reflect/
  2. Les reflexions sont indexees par QMD et disponibles pour la recherche de contexte future
  3. 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

  1. Interroge QMD, Mem0/Qdrant et Cognee en parallele via Promise.allSettled (tolere les pannes individuelles)
  2. Deduplique les resultats par similarite Jaccard sur les ensembles de mots (seuil : 0.6 -- 60% de chevauchement = doublon)
  3. Re-classe les resultats dedupliques via Claude Haiku avec scoring de pertinence par resultat (echelle 0-10)
  4. 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.

Pipeline memoire -- Architecture en detail | OpenClaw × Easylab