Présentation de la mémoire
Fonctionnement de la mémoire.
Moteur intégré
Backend SQLite par défaut.
Moteur QMD
Processus auxiliaire privilégiant le fonctionnement local.
Recherche en mémoire
Pipeline de recherche et réglages.
Active Memory
Sous-agent de mémoire pour les sessions interactives.
agents.defaults.memorySearch dans openclaw.json (ou dans une substitution agents.list[].memorySearch propre à chaque agent), sauf indication contraire.
Si vous recherchez l’option d’activation de la fonctionnalité Active Memory et la configuration du sous-agent, celles-ci se trouvent sous
plugins.entries.active-memory plutôt que sous memorySearch.Active Memory utilise un modèle à deux conditions :- le Plugin doit être activé et cibler l’identifiant de l’agent actuel
- la requête doit correspondre à une session de discussion interactive persistante admissible
Sélection du fournisseur
Lorsque
provider n’est pas défini, OpenClaw utilise les embeddings OpenAI. Définissez explicitement provider
pour utiliser Bedrock, DeepInfra, Gemini, GitHub Copilot, Mistral, Ollama,
Voyage, un modèle GGUF local ou un point de terminaison /v1/embeddings compatible avec OpenAI.
Les anciennes configurations qui indiquent encore provider: "auto" sont résolues en openai.
Lorsque provider n’est pas défini, que l’ancien paramètre provider: "auto" est présent ou que
provider: "none" sélectionne intentionnellement le mode FTS uniquement, le rappel en mémoire peut toujours
utiliser le classement lexical FTS lorsque les embeddings sont indisponibles.
Les fournisseurs non locaux explicitement définis échouent de manière restrictive. Si vous définissez memorySearch.provider sur
un fournisseur distant précis tel que Bedrock, DeepInfra, Gemini, GitHub
Copilot, LM Studio, Mistral, Ollama, OpenAI, Voyage ou un fournisseur personnalisé
compatible avec OpenAI, et que celui-ci est indisponible lors de l’exécution, memory_search
renvoie un résultat d’indisponibilité au lieu d’utiliser silencieusement un rappel FTS uniquement. Corrigez la
configuration du fournisseur ou de l’authentification, choisissez un fournisseur accessible ou définissez
provider: "none" si vous souhaitez utiliser délibérément un rappel FTS uniquement.
Identifiants de fournisseurs personnalisés
memorySearch.provider peut pointer vers une entrée models.providers.<id> personnalisée pour des adaptateurs propres aux fournisseurs de mémoire, tels que ollama, ou pour des API de modèles compatibles avec OpenAI, telles que openai-responses / openai-completions. OpenClaw résout le propriétaire api de ce fournisseur pour l’adaptateur d’embeddings, tout en conservant l’identifiant du fournisseur personnalisé pour la gestion du point de terminaison, de l’authentification et du préfixe du modèle. Les configurations à plusieurs GPU ou plusieurs hôtes peuvent ainsi réserver les embeddings de mémoire à un point de terminaison local précis :
Résolution de la clé d’API
Les embeddings distants nécessitent une clé d’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 ou clé d’API Bedrock).L’OAuth Codex couvre uniquement les discussions et les complétions, et ne satisfait pas les requêtes d’embeddings.
Configuration du point de terminaison distant
Utilisezprovider: "openai-compatible" pour un serveur générique /v1/embeddings
compatible avec OpenAI qui ne doit pas hériter des identifiants globaux de discussion OpenAI.
string
URL de base personnalisée de l’API.
string
Clé d’API de substitution.
object
En-têtes HTTP supplémentaires (fusionnés avec les valeurs par défaut du fournisseur).
Configuration propre à chaque fournisseur
Gemini
Gemini
Types d’entrées compatibles avec OpenAI
Types d’entrées compatibles avec OpenAI
Les points de terminaison d’embeddings compatibles avec OpenAI peuvent activer des champs de requête La modification de ces valeurs affecte l’identité du cache d’embeddings lors de l’indexation par lots du fournisseur et doit être suivie d’une réindexation de la mémoire lorsque le modèle en amont traite les libellés différemment.
input_type propres au fournisseur. Cela est utile pour les modèles d’embeddings asymétriques qui nécessitent des libellés différents pour les embeddings des requêtes et des documents.Bedrock
Bedrock
Configuration des embeddings Bedrock
Bedrock utilise la chaîne d’identifiants par défaut du SDK AWS ainsi qu’un jeton Bearer vérifié par OpenClaw ; aucune clé d’API n’est donc stockée dans la configuration. Si OpenClaw s’exécute sur EC2 avec un rôle d’instance autorisé à utiliser Bedrock, il suffit de définir le fournisseur et le modèle :Modèles pris en charge (avec détection de la famille et dimensions par défaut) :
Les variantes suffixées par le débit (par exemple,
amazon.titan-embed-text-v1:2:8k) et les ID de profil d’inférence préfixés par la région (par exemple, us.amazon.titan-embed-text-v2:0) héritent de la configuration du modèle de base.Région : résolue dans cet ordre : le remplacement memorySearch.remote.baseUrl, la configuration models.providers.amazon-bedrock.baseUrl, AWS_REGION, AWS_DEFAULT_REGION, puis la valeur par défaut us-east-1.Authentification : OpenClaw recherche d’abord AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY ou AWS_BEARER_TOKEN_BEDROCK, puis utilise la chaîne standard de fournisseurs d’identifiants par défaut du SDK AWS :- Variables d’environnement (
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY), sauf siAWS_PROFILEest également défini - SSO (uniquement lorsque les champs SSO sont configurés)
- Fichiers partagés d’identifiants et de configuration (
fromIni, inclutAWS_PROFILE) - Processus d’identification (
credential_processdans le fichier de configuration AWS) - Identifiants par jeton d’identité Web
- Identifiants issus des métadonnées d’instance ECS ou EC2
InvokeModel au modèle concerné :Local (GGUF + llama.cpp)
Local (GGUF + llama.cpp)
Installez d’abord le fournisseur officiel llama.cpp :
openclaw plugins install @openclaw/llama-cpp-provider.
Modèle par défaut : embeddinggemma-300m-qat-Q8_0.gguf (environ 0,6 Go, téléchargé automatiquement). Les extractions du code source nécessitent toujours l’approbation de la compilation native : pnpm approve-builds puis pnpm rebuild node-llama-cpp.Utilisez la CLI autonome pour vérifier le même chemin de fournisseur que celui utilisé par le Gateway :local.contextSize renseignent également le placement automatique des couches GPU de node-llama-cpp, afin que les poids du modèle et le contexte d’embedding demandé puissent être chargés ensemble. openclaw memory status --deep indique le dernier backend llama.cpp connu, le périphérique, le déchargement, le contexte demandé et les informations de mémoire horodatées après le chargement par l’environnement d’exécution ; l’état passif ne charge aucun modèle.Définissez explicitement provider: "local" pour les embeddings GGUF locaux. hf: et les références de modèle HTTP(S) sont pris en charge pour les configurations locales explicites (via la résolution de modèle de node-llama-cpp), mais ne modifient pas le fournisseur par défaut.Délai d’expiration des embeddings en ligne
number
Remplacez le délai d’expiration des lots d’embeddings en ligne lors de l’indexation de la mémoire.Lorsqu’aucune valeur n’est définie, la valeur par défaut du fournisseur est utilisée : 600 secondes pour les fournisseurs locaux ou auto-hébergés tels que
local, ollama et lmstudio, et 120 secondes pour les fournisseurs hébergés. Augmentez cette valeur lorsque les lots d’embeddings locaux dépendant du processeur fonctionnent correctement, mais lentement.Comportement d’indexation
Toutes les options se trouvent sousmemorySearch.sync, sauf indication contraire :
number
Taille, en jetons, des segments utilisés pour diviser les sources de mémoire avant l’embedding (valeur par défaut : 400).
number
Chevauchement en jetons entre les segments adjacents afin de préserver le contexte près des limites de découpage (valeur par défaut : 80).
La modification de
chunking.tokens ou chunking.overlap change les limites des segments et invalide l’identité de l’index existant (voir l’avertissement sous Sélection du fournisseur).Configuration de la recherche hybride
Toutes les options se trouvent sousmemorySearch.query :
Et sous
memorySearch.query.hybrid :
- MMR (diversité)
- Décroissance temporelle (récence)
Exemple complet
Chemins de mémoire supplémentaires
.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 de l’analyseur QMD sous-jacent.
Pour effectuer une recherche inter-agents dans les transcriptions à l’échelle d’un agent, utilisez agents.list[].memorySearch.qmd.extraCollections au lieu de memory.qmd.paths. Ces collections supplémentaires suivent la même structure { path, name, pattern? }, mais elles sont fusionnées par agent et peuvent conserver des noms partagés explicites lorsque le chemin pointe hors de l’espace de travail actuel. Si le même chemin résolu apparaît à la fois dans memory.qmd.paths et memorySearch.qmd.extraCollections, QMD conserve la première entrée et ignore le doublon.
Mémoire multimodale (Gemini)
Indexez les images et les fichiers audio avec Markdown à l’aide de Gemini Embedding 2 :S’applique uniquement aux fichiers dans
extraPaths. Les racines de mémoire par défaut restent limitées à Markdown. Nécessite gemini-embedding-2-preview. fallback doit être "none"..jpg, .jpeg, .png, .webp, .gif, .heic, .heif (images) ; .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (audio).
Cache des embeddings
Évite de recalculer les embeddings du texte inchangé lors d’une réindexation ou de la mise à jour d’une transcription. Laissez
maxEntries non défini pour un cache sans limite ; définissez-le lorsque la croissance de l’espace disque importe davantage que la vitesse maximale de réindexation. Lorsqu’il est défini, les entrées les plus anciennes (selon leur dernière date de mise à jour) sont supprimées en premier dès que le cache dépasse la limite.
Indexation par lots
Disponible pour
gemini, openai et voyage. Le traitement par lots d’OpenAI est généralement le plus rapide et le moins coûteux pour les remplissages rétrospectifs volumineux.
remote.nonBatchConcurrency contrôle les appels d’embedding en ligne utilisés par les fournisseurs locaux/autohébergés et par les fournisseurs hébergés lorsque leurs API de traitement par lots ne sont pas actives. Ollama utilise par défaut 1 pour l’indexation hors lot afin d’éviter de surcharger les petits hôtes locaux ; définissez une valeur supérieure sur les machines plus puissantes.
Ce paramètre est distinct de sync.embeddingBatchTimeoutSeconds, qui contrôle le délai d’expiration des appels d’embedding en ligne.
Recherche dans la mémoire des sessions (expérimentale)
Indexez les transcriptions de sessions et rendez-les accessibles viamemory_search :
Les résultats provenant des transcriptions de sessions respectent également
tools.sessions.visibility. La visibilité par défaut
tree n’expose que la session actuelle et les sessions qu’elle a créées. Pour
rappeler, depuis une autre session telle qu’un message privé, une session sans lien direct distribuée par le Gateway au même agent,
élargissez délibérément la visibilité à agent (ou à all uniquement
si le rappel inter-agents est également requis et que la politique d’agent à agent l’autorise).
Les exemples ci-dessous placent ces paramètres sous agents.defaults. Vous pouvez également
appliquer des paramètres memorySearch équivalents dans une substitution propre à un agent si un seul
agent doit indexer et rechercher les transcriptions de sessions.
Pour le rappel d’un Gateway vers un message privé au sein d’un même agent :
- Backend intégré
- Backend QMD
agents.defaults.memorySearch.experimental.sessionMemory et
sources: ["sessions"] n’exportent pas à eux seuls les transcriptions vers QMD. Définissez
également memory.qmd.sessions.enabled: true.
Accélération vectorielle SQLite (sqlite-vec)
Lorsque sqlite-vec est indisponible, OpenClaw se rabat automatiquement sur la similarité cosinus calculée dans le processus.
Stockage de l’index
Les index de mémoire intégrés résident dans la base de données SQLite OpenClaw de chaque agent à l’emplacementagents/<agentId>/agent/openclaw-agent.sqlite.
Configuration du backend QMD
Définissezmemory.backend = "qmd" pour l’activer. Tous les paramètres QMD se trouvent sous memory.qmd :
searchMode: "search" utilise uniquement la recherche lexicale/BM25. OpenClaw n’exécute ni sondes de disponibilité vectorielle sémantique ni maintenance des embeddings QMD pour ce mode, y compris pendant memory status --deep ; vsearch et query continuent de nécessiter la disponibilité vectorielle et les embeddings de QMD.
rerank: false ne modifie que le mode query de QMD et nécessite QMD 2.1 ou une version ultérieure. En mode CLI direct, OpenClaw transmet --no-rerank ; en mode MCP reposant sur mcporter, il transmet rerank: false à l’outil de requête unifié de QMD. Laissez-le non défini pour utiliser le comportement de reclassement des requêtes par défaut de QMD.
OpenClaw privilégie les formats actuels des collections QMD et des requêtes MCP, mais maintient la compatibilité avec les anciennes versions de QMD en essayant, si nécessaire, des indicateurs compatibles de motif de collection et les anciens noms d’outils MCP. Lorsque QMD annonce la prise en charge de plusieurs filtres de collection, les collections de même source sont interrogées par un seul processus QMD ; les anciennes versions de QMD conservent le chemin de compatibilité par collection. « Même source » signifie que les collections de mémoire durable (fichiers de mémoire par défaut et chemins personnalisés) sont regroupées, tandis que les collections de transcriptions de sessions restent dans un groupe distinct afin que la diversification des sources conserve bien les deux entrées.
Les substitutions de modèles QMD restent du côté de QMD, et non dans la configuration d’OpenClaw. Pour 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 du Gateway.Intégration de mcporter
Tous les paramètres se trouvent sousmemory.qmd.mcporter. Achemine les recherches QMD par l’intermédiaire d’un démon MCP mcporter de longue durée au lieu de lancer qmd pour chaque requête, ce qui réduit le surcoût du démarrage à froid pour les modèles plus volumineux.
Nécessite que
mcporter soit installé et présent dans PATH, ainsi qu’un serveur mcporter configuré qui exécute qmd mcp. Laissez cette option désactivée pour les configurations locales simples où le coût du lancement d’un processus par requête est acceptable.
Calendrier des mises à jour
Calendrier des mises à jour
Limites
Limites
Portée
Portée
Contrôle quelles sessions peuvent recevoir les résultats de recherche QMD. Même schéma que La valeur par défaut livrée est limitée aux messages privés/directs et refuse les groupes ainsi que les autres types de canaux.
session.sendPolicy :match.keyPrefix correspond à la clé de session normalisée ; match.rawKeyPrefix correspond à la clé brute, y compris agent:<id>:.Citations
Citations
memory.citations s’applique à tous les backends :update.onBoot vaut true et qu’aucune maintenance par intervalle ou intégration n’est configurée, le démarrage utilise un gestionnaire ponctuel pour l’actualisation initiale, puis le ferme. Si un intervalle de mise à jour ou d’intégration est configuré, le démarrage ouvre le gestionnaire QMD de longue durée afin qu’il puisse gérer l’observateur et les minuteurs d’intervalle ; update.onBoot: false ignore uniquement l’actualisation immédiate au démarrage.
Exemple QMD complet
Dreaming
Dreaming est configuré sousplugins.entries.memory-core.config.dreaming, et non sous agents.defaults.memorySearch.
Dreaming s’exécute sous la forme d’un balayage planifié unique et utilise des phases internes légère/profonde/REM comme détail d’implémentation.
Pour le comportement conceptuel et les commandes slash, consultez Dreaming.
Paramètres utilisateur
Exemple
- Dreaming écrit l’état machine dans
memory/.dreams/. - Dreaming écrit la sortie narrative lisible par l’humain dans
DREAMS.md(ou dans le fichierdreams.mdexistant). dreaming.modelutilise le contrôle de confiance existant du sous-agent du Plugin ; définissezplugins.entries.memory-core.subagent.allowModelOverride: trueavant de l’activer.- Dream Diary réessaie une fois avec le modèle par défaut de la session lorsque le modèle configuré n’est pas disponible. Les échecs liés à la confiance ou à la liste d’autorisation sont journalisés et ne font pas l’objet d’une nouvelle tentative silencieuse.
- La stratégie et les seuils des phases légère/profonde/REM relèvent du comportement interne et non de la configuration destinée à l’utilisateur.