Passer au contenu principal

Référence de configuration de la mémoire

Cette page répertorie tous les paramètres de configuration pour la recherche en mémoire d’OpenClaw. Pour des aperçus conceptuels, voir : Tous les paramètres de recherche en mémoire se trouvent sous agents.defaults.memorySearch dans openclaw.json, sauf indication contraire. Si vous recherchez le bouton de fonctionnalité mémoire active et la configuration du sous-agent, ils se trouvent sous plugins.entries.active-memory au lieu de memorySearch. La mémoire active utilise un modèle à deux conditions :
  1. le plugin doit être activé et cibler l’ID de l’agent actuel
  2. la requête doit être une session de chat interactive persistante éligible
Voir Mémoire active pour le modèle d’activation, la configuration gérée par le plugin, la persistance des transcriptions et le modèle de déploiement sûr.

Sélection du fournisseur

CléTypePar défautDescription
providerstringdétecté automatiquementID de l’adaptateur d’embeddings : openai, gemini, voyage, mistral, bedrock, ollama, local
modelstringvaleur par défaut du fournisseurNom du modèle d’embeddings
fallbackstring"none"ID de l’adaptateur de secours en cas d’échec du principal
enabledbooleantrueActiver ou désactiver la recherche en mémoire

Ordre de détection automatique

Lorsque provider n’est pas défini, OpenClaw sélectionne le premier disponible :
  1. local — si memorySearch.local.modelPath est configuré et que le fichier existe.
  2. openai — si une clé OpenAI peut être résolue.
  3. gemini — si une clé Gemini peut être résolue.
  4. voyage — si une clé Voyage peut être résolue.
  5. mistral — si une clé Mistral peut être résolue.
  6. bedrock — si la chaîne d’identifiants AWS SDK est résolue (rôle d’instance, clés d’accès, profil, SSO, identité web ou configuration partagée).
ollama est pris en charge mais n’est pas détecté automatiquement (définissez-le explicitement).

Résolution des clés API

Les embeddings distants nécessitent une clé API. Bedrock utilise à la place la chaîne d’identifiants par défaut du SDK AWS (rôles d’instance, SSO, clés d’accès).
FournisseurVariable d’environnementClé de configuration
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
Bedrockchaîne d’identifiants AWSAucune clé API nécessaire
OllamaOLLAMA_API_KEY (espace réservé)
L’authentification OAuth de Codex couvre uniquement le chat/les complétions et ne satisfait pas les requêtes d’embeddings.

Configuration des points de terminaison distants

Pour des points de terminaison personnalisés compatibles OpenAI ou pour remplacer les valeurs par défaut du fournisseur :
CléTypeDescription
remote.baseUrlstringURL de base de l’API personnalisée
remote.apiKeystringRemplacer la clé API
remote.headersobjectEn-têtes HTTP supplémentaires (fusionnés avec les valeurs par défaut du fournisseur)
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai",
        model: "text-embedding-3-small",
        remote: {
          baseUrl: "https://api.example.com/v1/",
          apiKey: "YOUR_KEY",
        },
      },
    },
  },
}

Configuration spécifique à Gemini

CléTypePar défautDescription
modelstringgemini-embedding-001Prend également en charge gemini-embedding-2-preview
outputDimensionalitynumber3072Pour Embedding 2 : 768, 1536 ou 3072
La modification du modèle ou de outputDimensionality déclenche automatiquement une réindexation complète.

Configuration des embeddings Bedrock

Bedrock utilise la chaîne d’identifiants par défaut du SDK AWS — aucune clé API n’est nécessaire. Si OpenClaw s’exécute sur EC2 avec un rôle d’instance activé pour Bedrock, définissez simplement le fournisseur et le modèle :
{
  agents: {
    defaults: {
      memorySearch: {
        provider: "bedrock",
        model: "amazon.titan-embed-text-v2:0",
      },
    },
  },
}
CléTypePar défautDescription
modelstringamazon.titan-embed-text-v2:0Tout ID de modèle d’embeddings Bedrock
outputDimensionalitynumbervaleur par défaut du modèlePour Titan V2 : 256, 512 ou 1024

Modèles pris en charge

Les modèles suivants sont pris en charge (avec détection de famille et dimensions par défaut) :
ID du modèleFournisseurDimensions par défautDimensions configurables
amazon.titan-embed-text-v2:0Amazon1024256, 512, 1024
amazon.titan-embed-text-v1Amazon1536
amazon.titan-embed-g1-text-02Amazon1536
amazon.titan-embed-image-v1Amazon1024
amazon.nova-2-multimodal-embeddings-v1:0Amazon1024256, 384, 1024, 3072
cohere.embed-english-v3Cohere1024
cohere.embed-multilingual-v3Cohere1024
cohere.embed-v4:0Cohere1536256-1536
twelvelabs.marengo-embed-3-0-v1:0TwelveLabs512
twelvelabs.marengo-embed-2-7-v1:0TwelveLabs1024
Les variantes avec suffixe de débit (par exemple, amazon.titan-embed-text-v1:2:8k) héritent de la configuration du modèle de base.

Authentification

L’authentification Bedrock utilise l’ordre standard de résolution des identifiants du SDK AWS :
  1. Variables d’environnement (AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY)
  2. Cache des jetons SSO
  3. Identifiants de jeton d’identité web
  4. Fichiers partagés d’identifiants et de configuration
  5. Identifiants de métadonnées ECS ou EC2
La région est résolue à partir de AWS_REGION, AWS_DEFAULT_REGION, du baseUrl du fournisseur amazon-bedrock, ou utilise par défaut us-east-1.

Autorisations IAM

Le rôle ou l’utilisateur IAM doit disposer de :
{
  "Effect": "Allow",
  "Action": "bedrock:InvokeModel",
  "Resource": "*"
}
Pour appliquer le principe du moindre privilège, limitez InvokeModel au modèle spécifique :
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0

Configuration des embeddings locaux

CléTypePar défautDescription
local.modelPathstringtéléchargé automatiquementChemin vers le fichier de modèle GGUF
local.modelCacheDirstringvaleur par défaut de node-llama-cppRépertoire de cache pour les modèles téléchargés
Modèle par défaut : embeddinggemma-300m-qat-Q8_0.gguf (~0.6 GB, téléchargé automatiquement). Nécessite une build native : pnpm approve-builds puis pnpm rebuild node-llama-cpp.

Configuration de la recherche hybride

Le tout sous memorySearch.query.hybrid :
CléTypePar défautDescription
enabledbooleantrueActiver la recherche hybride BM25 + vectorielle
vectorWeightnumber0.7Poids des scores vectoriels (0-1)
textWeightnumber0.3Poids des scores BM25 (0-1)
candidateMultipliernumber4Multiplicateur de taille du pool de candidats

MMR (diversité)

CléTypePar défautDescription
mmr.enabledbooleanfalseActiver le reranking MMR
mmr.lambdanumber0.70 = diversité maximale, 1 = pertinence maximale

Décroissance temporelle (récence)

CléTypePar défautDescription
temporalDecay.enabledbooleanfalseActiver le boost de récence
temporalDecay.halfLifeDaysnumber30Le score est divisé par deux tous les N jours
Les fichiers persistants (MEMORY.md, fichiers non datés dans memory/) ne subissent jamais de décroissance.

Exemple complet

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            vectorWeight: 0.7,
            textWeight: 0.3,
            mmr: { enabled: true, lambda: 0.7 },
            temporalDecay: { enabled: true, halfLifeDays: 30 },
          },
        },
      },
    },
  },
}

Chemins de mémoire supplémentaires

CléTypeDescription
extraPathsstring[]Répertoires ou fichiers supplémentaires à indexer
{
  agents: {
    defaults: {
      memorySearch: {
        extraPaths: ["../team-docs", "/srv/shared-notes"],
      },
    },
  },
}
Les chemins peuvent être absolus ou relatifs à l’espace de travail. Les répertoires sont analysés récursivement à la recherche de fichiers .md. La gestion des liens symboliques dépend du backend actif : le moteur intégré ignore les liens symboliques, tandis que QMD suit le comportement du scanner QMD sous-jacent. Pour la recherche de transcriptions inter-agents à portée d’agent, utilisez agents.list[].memorySearch.qmd.extraCollections au lieu de memory.qmd.paths. Ces collections supplémentaires suivent la même forme { path, name, pattern? }, mais elles sont fusionnées par agent et peuvent conserver des noms partagés explicites lorsque le chemin pointe en dehors de l’espace de travail actuel. Si le même chemin résolu apparaît à la fois dans memory.qmd.paths et dans memorySearch.qmd.extraCollections, QMD conserve la première entrée et ignore le doublon.

Mémoire multimodale (Gemini)

Indexez les images et l’audio en plus du Markdown à l’aide de Gemini Embedding 2 :
CléTypePar défautDescription
multimodal.enabledbooleanfalseActiver l’indexation multimodale
multimodal.modalitiesstring[]["image"], ["audio"] ou ["all"]
multimodal.maxFileBytesnumber10000000Taille maximale des fichiers pour l’indexation
S’applique uniquement aux fichiers dans extraPaths. Les racines de mémoire par défaut restent limitées au Markdown. Nécessite gemini-embedding-2-preview. fallback doit être "none". Formats pris en charge : .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (images) ; .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (audio).

Cache des embeddings

CléTypePar défautDescription
cache.enabledbooleanfalseMettre en cache les embeddings de fragments dans SQLite
cache.maxEntriesnumber50000Nombre maximal d’embeddings mis en cache
Empêche de recalculer les embeddings d’un texte inchangé lors d’une réindexation ou de mises à jour de transcriptions.

Indexation par lot

CléTypePar défautDescription
remote.batch.enabledbooleanfalseActiver l’API d’embeddings par lot
remote.batch.concurrencynumber2Tâches par lot parallèles
remote.batch.waitbooleantrueAttendre la fin du lot
remote.batch.pollIntervalMsnumberIntervalle d’interrogation
remote.batch.timeoutMinutesnumberDélai d’expiration du lot
Disponible pour openai, gemini et voyage. Le traitement par lot OpenAI est généralement le plus rapide et le moins cher pour les gros remplissages rétroactifs.

Recherche en mémoire de session (expérimental)

Indexez les transcriptions de session et exposez-les via memory_search :
CléTypePar défautDescription
experimental.sessionMemorybooleanfalseActiver l’indexation des sessions
sourcesstring[]["memory"]Ajouter "sessions" pour inclure les transcriptions
sync.sessions.deltaBytesnumber100000Seuil en octets pour la réindexation
sync.sessions.deltaMessagesnumber50Seuil en messages pour la réindexation
L’indexation des sessions est optionnelle et s’exécute de façon asynchrone. Les résultats peuvent être légèrement obsolètes. Les journaux de session sont stockés sur le disque, considérez donc l’accès au système de fichiers comme la frontière de confiance.

Accélération vectorielle SQLite (sqlite-vec)

CléTypePar défautDescription
store.vector.enabledbooleantrueUtiliser sqlite-vec pour les requêtes vectorielles
store.vector.extensionPathstringintégréRemplacer le chemin de sqlite-vec
Lorsque sqlite-vec n’est pas disponible, OpenClaw revient automatiquement à la similarité cosinus en processus.

Stockage de l’index

CléTypePar défautDescription
store.pathstring~/.openclaw/memory/{agentId}.sqliteEmplacement de l’index (prend en charge le jeton {agentId})
store.fts.tokenizerstringunicode61Tokeniseur FTS5 (unicode61 ou trigram)

Configuration du backend QMD

Définissez memory.backend = "qmd" pour l’activer. Tous les paramètres QMD se trouvent sous memory.qmd :
CléTypePar défautDescription
commandstringqmdChemin de l’exécutable QMD
searchModestringsearchCommande de recherche : search, vsearch, query
includeDefaultMemorybooleantrueIndexer automatiquement MEMORY.md + memory/**/*.md
paths[]arrayChemins supplémentaires : { name, path, pattern? }
sessions.enabledbooleanfalseIndexer les transcriptions de session
sessions.retentionDaysnumberRétention des transcriptions
sessions.exportDirstringRépertoire d’exportation
OpenClaw privilégie les formes actuelles de collection QMD et de requête MCP, mais maintient les anciennes versions de QMD fonctionnelles en revenant si nécessaire aux indicateurs de collection hérités --mask et aux anciens noms d’outils MCP. Les remplacements de modèle QMD restent du côté de QMD, pas dans la configuration d’OpenClaw. Si vous devez remplacer globalement les modèles de QMD, définissez des variables d’environnement telles que QMD_EMBED_MODEL, QMD_RERANK_MODEL et QMD_GENERATE_MODEL dans l’environnement d’exécution de la passerelle.

Planification des mises à jour

CléTypePar défautDescription
update.intervalstring5mIntervalle d’actualisation
update.debounceMsnumber15000Antirebond des changements de fichiers
update.onBootbooleantrueActualiser au démarrage
update.waitForBootSyncbooleanfalseBloquer le démarrage jusqu’à la fin de l’actualisation
update.embedIntervalstringCadence d’embedding distincte
update.commandTimeoutMsnumberDélai d’expiration pour les commandes QMD
update.updateTimeoutMsnumberDélai d’expiration pour les opérations de mise à jour QMD
update.embedTimeoutMsnumberDélai d’expiration pour les opérations d’embedding QMD

Limites

CléTypePar défautDescription
limits.maxResultsnumber6Nombre maximal de résultats de recherche
limits.maxSnippetCharsnumberLimiter la longueur des extraits
limits.maxInjectedCharsnumberLimiter le total de caractères injectés
limits.timeoutMsnumber4000Délai d’expiration de la recherche

Portée

Contrôle quelles sessions peuvent recevoir des résultats de recherche QMD. Même schéma que session.sendPolicy :
{
  memory: {
    qmd: {
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
    },
  },
}
La valeur par défaut est DM-only. match.keyPrefix correspond à la clé de session normalisée ; match.rawKeyPrefix correspond à la clé brute, y compris agent:<id>:.

Citations

memory.citations s’applique à tous les backends :
ValeurComportement
auto (par défaut)Inclure un pied de page Source: <path#line> dans les extraits
onToujours inclure le pied de page
offOmettre le pied de page (le chemin est toujours transmis à l’agent en interne)

Exemple complet QMD

{
  memory: {
    backend: "qmd",
    citations: "auto",
    qmd: {
      includeDefaultMemory: true,
      update: { interval: "5m", debounceMs: 15000 },
      limits: { maxResults: 6, timeoutMs: 4000 },
      scope: {
        default: "deny",
        rules: [{ action: "allow", match: { chatType: "direct" } }],
      },
      paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }],
    },
  },
}

Dreaming (expérimental)

Dreaming est configuré sous plugins.entries.memory-core.config.dreaming, et non sous agents.defaults.memorySearch. Dreaming s’exécute comme un balayage planifié unique et utilise des phases internes léger/profond/REM comme détail d’implémentation. Pour le comportement conceptuel et les commandes slash, voir Dreaming.

Paramètres utilisateur

CléTypePar défautDescription
enabledbooleanfalseActiver ou désactiver complètement dreaming
frequencystring0 3 * * *Cadence cron optionnelle pour le balayage complet de dreaming

Exemple

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            enabled: true,
            frequency: "0 3 * * *",
          },
        },
      },
    },
  },
}
Remarques :
  • Dreaming écrit l’état machine dans memory/.dreams/.
  • Dreaming écrit une sortie narrative lisible par un humain dans DREAMS.md (ou dreams.md existant).
  • La stratégie de phase léger/profond/REM et les seuils sont des comportements internes, pas une configuration destinée à l’utilisateur.