Aller au contenu

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

Cette page répertorie tous les paramètres de configuration pour la recherche mémoire OpenClaw. Pour des aperçus conceptuels, voir :

Vue d'ensemble de la mémoire

Fonctionnement de la mémoire.

Moteur intégré

Backend SQLite par défaut.

Moteur QMD

Sidecar local-first.

Recherche mémoire

Pipeline de recherche et réglage.

Mémoire active

Sous-agent mémoire pour les sessions interactives.

Tous les paramètres de recherche mémoire se trouvent sous agents.defaults.memorySearch dans openclaw.json sauf indication contraire.


CléTypePar défautDescription
providerstring"openai"ID de l’adaptateur d’embedding tel que bedrock, deepinfra, gemini, github-copilot, local, mistral, ollama, openai, openai-compatible ou voyage ; peut également être un models.providers.<id> configuré dont le api pointe vers un adaptateur d’embedding mémoire ou une API de modèle compatible OpenAIAPI
modelstringprovider par défautNom du modèle d’embedding
fallbackstring"none"ID de l’adaptateur de secours si le principal échoue
enabledbooleantrueActiver ou désactiver la recherche mémoire

Lorsque provider n’est pas défini, OpenClaw utilise les embeddings OpenAI. Définissez provider explicitement pour utiliser Gemini, Voyage, Mistral, DeepInfra, Bedrock, GitHub Copilot, Ollama ou un point de terminaison /v1/embeddings compatible OpenAI. Les configurations héritées qui indiquent encore provider: "auto" sont résolues vers openai.

Si les embeddings OpenAI sont inaccessibles depuis votre réseau, la récupération de mémoire échoue de manière ouverte au lieu de bloquer le tour. Définissez le champ OpenAImemorySearch.providerOllamaOpenAI existant sur un fournisseur local accessible, Ollama, régional ou compatible OpenAI pour restaurer le classement sémantique.

memorySearch.provider peut pointer vers une entrée models.providers.<id> personnalisée pour des adaptateurs de fournisseur spécifiques à la mémoire tels que ollamaOpenAI, ou pour des API de modèle compatibles OpenAI telles que openai-responses / openai-completionsOpenClaw. OpenClaw résout le propriétaire api de ce fournisseur pour l’adaptateur d’embeddings tout en préservant l’identifiant de fournisseur personnalisé pour la gestion du point de terminaison, de l’authentification et du préfixe de modèle. Cela permet aux configurations multi-GPU ou multi-hôte de dédier les embeddings de mémoire à un point de terminaison local spécifique :

{
models: {
providers: {
"ollama-5080": {
api: "ollama",
baseUrl: "http://gpu-box.local:11435",
apiKey: "ollama-local",
models: [{ id: "qwen3-embedding:0.6b" }],
},
},
},
agents: {
defaults: {
memorySearch: {
provider: "ollama-5080",
model: "qwen3-embedding:0.6b",
},
},
},
}

Les embeddings distants nécessitent une clé API. Bedrock utilise à la place la chaîne de credentials par défaut du AWS SDK (rôles d’instance, SSO, clés d’accès).

ProviderEnv varConfig key
BedrockAWS credential chainNo API key needed
DeepInfraDEEPINFRA_API_KEYmodels.providers.deepinfra.apiKey
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
GitHub CopilotCOPILOT_GITHUB_TOKEN, GH_TOKEN, GITHUB_TOKENAuth profile via device login
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (placeholder)
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey


Use provider: "openai-compatible" for a generic OpenAI-compatible /v1/embeddings server that should not inherit global OpenAI chat credentials.

Custom API base URL. Override API key. Extra HTTP headers (merged with provider defaults).
{
agents: {
defaults: {
memorySearch: {
provider: "openai-compatible",
model: "text-embedding-3-small",
remote: {
baseUrl: "https://api.example.com/v1/",
apiKey: "YOUR_KEY",
},
},
},
},
}

Gemini
KeyTypeDefaultDescription
modelstringgemini-embedding-001Also supports gemini-embedding-2-preview
outputDimensionalitynumber3072For Embedding 2: 768, 1536, or 3072
Types d'entrée compatibles OpenAI

Les points de terminaison d’incorporation compatibles OpenAI peuvent opter pour des champs de requête input_type spécifiques au provider. Ceci est utile pour les modèles d’incorporation asymétriques qui nécessitent des étiquettes différentes pour les incorporations de requêtes et de documents.

CléTypePar défautDescription
inputTypestringnon définiinput_type partagé pour les incorporations de requêtes et de documents
queryInputTypestringnon définiinput_type au moment de la requête ; remplace inputType
documentInputTypestringnon définiinput_type d’index/document ; remplace inputType
{
agents: {
defaults: {
memorySearch: {
provider: "openai-compatible",
remote: {
baseUrl: "https://embeddings.example/v1",
apiKey: "${EMBEDDINGS_API_KEY}",
},
model: "asymmetric-embedder",
queryInputType: "query",
documentInputType: "passage",
},
},
},
}

La modification de ces valeurs affecte l’identité du cache d’incorporation pour l’indexation par lots du provider et doit être suivie d’une réindexation de la mémoire lorsque le modèle en amont traite les étiquettes différemment.

Bedrock

Bedrock utilise la chaîne de certificats par défaut du AWS SDK — aucune clé d’API nécessaire. Si OpenClaw s’exécute sur EC2 avec un rôle d’instance activé pour Bedrock, définissez simplement le provider 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:0ID de tout modèle d’incorporation Bedrock
outputDimensionalitynumbermodèle par défautPour Titan V2 : 256, 512 ou 1024

Modèles pris en charge (avec détection de famille et dimensions par défaut) :

ID du modèleProviderDimensions 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 de résolution des informations d’identification standard du AWS SDK :

  1. Variables d’environnement (AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY)
  2. Cache de jetons SSO
  3. Informations d’identification de jeton d’identité Web
  4. Fichiers d’informations d’identification et de configuration partagés
  5. Informations d’identification des métadonnées ECS ou EC2

La région est résolue à partir de AWS_REGION, AWS_DEFAULT_REGION, la baseUrl du provider amazon-bedrock, ou par défaut us-east-1.

Autorisations IAM : le rôle ou l’utilisateur IAM a besoin de :

{
"Effect": "Allow",
"Action": "bedrock:InvokeModel",
"Resource": "*"
}

Pour le privilège minimum, limitez InvokeModel au modèle spécifique :

arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0
Local (GGUF + node-llama-cpp)
CléTypeValeur par défautDescription
local.modelPathstringtéléchargé automatiquementChemin vers le fichier modèle GGUF
local.modelCacheDirstringnode-llama-cpp par défautRépertoire de cache pour les modèles téléchargés
local.contextSizenumber | "auto"4096Taille de la fenêtre de contexte pour le contexte d’embedding. 4096 couvre les segments typiques (128–512 tokens) tout en limitant la VRAM non pondérée. Abaissez à 1024–2048 sur les hôtes contraints. "auto" utilise le maximum entraîné du modèle — non recommandé pour les modèles 8B+ (Qwen3-Embedding-8B: 40 960 tokens → ~32 Go VRAM vs ~8.8 Go à 4096).

Modèle par défaut : embeddinggemma-300m-qat-Q8_0.gguf (~0.6 Go, téléchargé automatiquement). Les checkouts source nécessitent toujours une approbation de build natif : pnpm approve-builds puis pnpm rebuild node-llama-cpp.

Utilisez la CLI autonome pour vérifier le même chemin de provider que celui utilisé par la Gateway :

Fenêtre de terminal
openclaw memory status --deep --agent main
openclaw memory index --force --agent main

Définissez provider: "local" explicitement pour les embeddings GGUF locaux. hf: et les références de modèles HTTP(S) sont prises en charge pour les configurations locales explicites, mais elles ne modifient pas le provider par défaut.

Remplacer le délai d'expiration pour les lots d'embeddings en ligne lors de l'indexation de la mémoire.

Non défini utilise la valeur par défaut du fournisseur : 600 secondes pour les fournisseurs locaux/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’intégration locaux dépendants du CPU sont sains mais lents.


Tout sous memorySearch.query.hybrid :

CléTypePar défautDescription
enabledbooleantrueActiver la recherche hybride BM25 + vectorielle
vectorWeightnumber0.7Poids pour les scores vectoriels (0-1)
textWeightnumber0.3Poids pour les scores BM25 (0-1)
candidateMultipliernumber4Multiplicateur de la taille du pool de candidats
CléTypePar défautDescription
mmr.enabledbooleanfalseActiver le reclassement MMR
mmr.lambdanumber0.70 = diversité max, 1 = pertinence max
{
agents: {
defaults: {
memorySearch: {
query: {
hybrid: {
vectorWeight: 0.7,
textWeight: 0.3,
mmr: { enabled: true, lambda: 0.7 },
temporalDecay: { enabled: true, halfLifeDays: 30 },
},
},
},
},
},
}

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 de manière récursive pour les 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 avec une portée par 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 préserver 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 memorySearch.qmd.extraCollections, QMD conserve la première entrée et ignore le doublon.


Indexer les images et l’audio avec le Markdown en utilisant 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

Formats pris en charge : .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (images) ; .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (audio).


CléTypePar défautDescription
cache.enabledbooleantrueMettre en cache les embeddings de blocs dans SQLite
cache.maxEntriesnumber50000Max cached embeddings

Empêche de ré-encoder un texte inchangé lors de la réindexation ou des mises à jour de transcription.


KeyTypeDefaultDescription
remote.nonBatchConcurrencynumber4Parallel inline embeddings
remote.batch.enabledbooleanfalseEnable batch embedding API
remote.batch.concurrencynumber2Parallel batch jobs
remote.batch.waitbooleantrueWait for batch completion
remote.batch.pollIntervalMsnumberPoll interval
remote.batch.timeoutMinutesnumberBatch timeout

Available for openai, gemini, and voyage. OpenAI batch is typically fastest and cheapest for large backfills.

remote.nonBatchConcurrency controls inline embedding calls used by local/self-hosted providers and hosted providers when provider batch APIs are not active. Ollama defaults to 1 for non-batch indexing to avoid overwhelming smaller local hosts; set a higher value on larger machines.

This is separate from sync.embeddingBatchTimeoutSeconds, which controls the timeout for inline embedding calls.


Index session transcripts and surface them via memory_search:

KeyTypeDefaultDescription
experimental.sessionMemorybooleanfalseEnable session indexing
sourcesstring[]["memory"]Add "sessions" to include transcripts
sync.sessions.deltaBytesnumber100000Seuil d’octets pour la réindexation
sync.sessions.deltaMessagesnumber50Seuil de messages pour la réindexation


CléTypePar défautDescription
store.vector.enabledbooleantrueUtiliser sqlite-vec pour les requêtes vectorielles
store.vector.extensionPathstringinclusRemplacer le chemin sqlite-vec

Lorsque sqlite-vec n’est pas disponible, OpenClaw revient automatiquement à la similarité cosinus en cours de processus.


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)

Définissez memory.backend = "qmd" pour activer. Tous les paramètres QMD se trouvent sous memory.qmd :

CléTypePar défautDescription
commandstringqmdChemin de l’exécutable QMD ; définissez un chemin absolu lorsque le service PATH diffère de votre shell
searchModestringsearchCommande de recherche : search, vsearch, query
includeDefaultMemorybooleantrueAuto-indexation MEMORY.md + memory/**/*.md
paths[]arrayChemins supplémentaires : { name, path, pattern? }
sessions.enabledbooleanfalseIndexer les transcriptions de session
sessions.retentionDaysnumberConservation des transcriptions
sessions.exportDirstringRépertoire d’export

searchMode: "search" est purement lexical/BM25. OpenClaw n’exécute pas de sondages de préparation des vecteurs sémantiques ni de maintenance des intégrations QMD pour ce mode, y compris durant memory status --deep ; vsearch et query continuent d’exiger la préparation des vecteurs QMD et les intégrations.

OpenClaw privilégie les formes de collection QMD actuelles et les formes de requête MCP, mais maintient le fonctionnement des versions plus anciennes de QMD en essayant, si nécessaire, les indicateurs de motif de collection compatibles et les anciens noms d’outil MCP. Lorsque QMD annonce la prise en charge de plusieurs filtres de collection, les collections de même source sont recherchées avec un seul processus QMD ; les versions antérieures de QMD conservent le chemin de compatibilité par collection. De même source signifie que les collections de mémoire durable sont regroupées, tandis que les collections de transcriptions de session restent un groupe distinct pour que la diversification des sources ait toujours les deux entrées.

Calendrier de mise à jour
CléTypePar défautDescription
update.intervalstring5mIntervalle d’actualisation
update.debounceMsnumber15000Anti-rebond pour les changements de fichiers
update.onBootbooleantrueActualiser à l’ouverture du gestionnaire QMD persistant ; conditionne également l’actualisation au démarrage (opt-in)
update.startupstringoffActualisation optionnelle au démarrage de la passerelle : off, idle ou immediate
update.startupDelayMsnumber120000Délai avant l’exécution de l’actualisation startup: "idle"
update.waitForBootSyncbooleanfalseBloquer l’ouverture du gestionnaire jusqu’à ce que son actualisation initiale soit terminée
update.embedIntervalstringCadence d’intégration séparée
update.commandTimeoutMsnumberDélai d’attente pour les commandes QMD
update.updateTimeoutMsnumberDélai d’attente pour les opérations de mise à jour QMD
update.embedTimeoutMsnumberDélai d’attente pour les opérations d’intégration QMD
Limites
CléTypePar défautDescription
limits.maxResultsnumber6Résultats de recherche max
limits.maxSnippetCharsnumberLimiter la longueur de l’extrait
limits.maxInjectedCharsnumberLimiter le total des caractères injectés
limits.timeoutMsnumber4000Délai de recherche
Portée

Contrôle quelles sessions peuvent recevoir les 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 fournie autorise les sessions directes et de channel, tout en refusant toujours les groupes.

La valeur par défaut est DM uniquement. match.keyPrefix correspond à la clé de session normalisée ; match.rawKeyPrefix correspond à la clé brute incluant `agent:

:`.

Citations

memory.citations s’applique à tous les backends :

ValeurComportement
auto (défaut)Inclure le pied de page `Source:

dans les extraits | |on | Toujours inclure le pied de page | |off` | Omettre le pied de page (le chemin est toujours passé en interne à l’agent) |

Les actualisations de démarrage QMD utilisent un chemin de sous-processus unique lors du démarrage de la passerelle. Le gestionnaire QMD à longue durée de vie possède toujours le surveillanceur de fichiers régulier et les minuteries d’intervalle lorsque la recherche mémoire est ouverte pour un usage interactif.

{
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 est configuré sous plugins.entries.memory-core.config.dreaming, et non sous agents.defaults.memorySearch.

Dreaming s’exécute comme un balayage programmé 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.

CléTypePar défautDescription
enabledbooleanfalseActiver ou désactiver entièrement le rêve
frequencystring0 3 * * *Cadence cron facultative pour le balayage complet du rêve
modelstringmodel par défautRemplacement facultatif du model de sous-agent Dream Diary
phases.deep.maxPromotedSnippetTokensnumber160Nombre maximal estimé de jetons conservés pour chaque extrait de rappel à court terme promu vers MEMORY.md ; les métadonnées de provenance restent visibles
{
plugins: {
entries: {
"memory-core": {
subagent: {
allowModelOverride: true,
allowedModels: ["anthropic/claude-sonnet-4-6"],
},
config: {
dreaming: {
enabled: true,
frequency: "0 3 * * *",
model: "anthropic/claude-sonnet-4-6",
},
},
},
},
},
}