Aller au contenu

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

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

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


CléTypePar défautDescription
providerstringdétecté automatiquementID de l’adaptateur d’embedding : openai, gemini, voyage, mistral, ollama, local
modelstringfournisseur 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 de mémoire

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.

ollama est pris en charge mais non détecté automatiquement (définissez-le explicitement).

Les embeddings distants nécessitent une clé API. OpenClaw les résout à partir de : profils d’authentification, models.providers.*.apiKey, ou variables d’environnement.

FournisseurVariable d’env.Clé de config.
OpenAIOPENAI_API_KEYmodels.providers.openai.apiKey
GeminiGEMINI_API_KEYmodels.providers.google.apiKey
VoyageVOYAGE_API_KEYmodels.providers.voyage.apiKey
MistralMISTRAL_API_KEYmodels.providers.mistral.apiKey
OllamaOLLAMA_API_KEY (espace réservé)

Le OAuth Codex couvre uniquement la conversation/les complétions et ne répond pas aux requêtes d’embedding.


Pour les 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",
},
},
},
},
}

CléTypePar défautDescription
modelstringgemini-embedding-001Prend également en charge gemini-embedding-2-preview
outputDimensionalitynumber3072Pour Embedding 2 : 768, 1536 ou 3072


CléTypePar défautDescription
local.modelPathstringtéléchargé automatiquementChemin vers le fichier de modèle GGUF
local.modelCacheDirstringpar défaut 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 Go, téléchargé automatiquement). Nécessite une compilation native : pnpm approve-builds puis pnpm rebuild node-llama-cpp.


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 re-classement MMR
mmr.lambdanumber0.70 = diversité max, 1 = pertinence max
CléTypePar défautDescription
temporalDecay.enabledbooleanfalseActiver le renforcement de la 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 sont jamais sujets à la décroissance.

{
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 scannés récursivement 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 spécifique à 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 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

S’applique uniquement aux fichiers dans extraPaths. Les racines de mémoire par défaut restent en Markdown uniquement. 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).


CléTypePar défautDescription
cache.enabledbooleanfalseMettre en cache les incorporations de blocs dans SQLite
cache.maxEntriesnumber50000Incorporations mises en cache maximales

Empêche la réincorporation du texte inchangé lors de la réindexation ou des mises à jour des transcriptions.


CléTypePar défautDescription
remote.batch.enabledbooleanfalseActiver l’API d’incorporation par lots
remote.batch.concurrencynumber2Tâches par lots parallèles
remote.batch.waitbooleantrueAttendre la fin du lot
remote.batch.pollIntervalMsnumberIntervalle d’interrogation
remote.batch.timeoutMinutesnumberDélai d’attente du lot

Disponible pour openai, gemini et voyage. Le traitement par lots OpenAI est généralement le plus rapide et le plus économique pour les importations massives.


Recherche dans la mémoire de session (expérimental)

Section intitulée « Recherche dans la mémoire de session (expérimental) »

Indexez les transcriptions de session et affichez-les via memory_search :

CléTypePar défautDescription
experimental.sessionMemorybooleanfalseActiver l’indexation de session
sourcesstring[]["memory"]Ajoutez "sessions" pour inclure les transcriptions
sync.sessions.deltaBytesnumber100000Seuil d’octets pour la réindexation
sync.sessions.deltaMessagesnumber50Seuil de messages pour la réindexation

L’indexation de session est optionnelle et s’exécute de manière asynchrone. Les résultats peuvent être légèrement périmés. Les journaux de session résident sur le disque, traitez donc l’accès au système de fichiers comme la limite de confiance.


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.


CléTypePar défautDescription
store.pathstring~/.openclaw/memory/{agentId}.sqliteEmplacement de l’index (prend en charge le jeton {agentId})
store.fts.tokenizerstringunicode61Tokenizer 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
searchModestringsearchCommande de recherche : search, vsearch, query
includeDefaultMemorybooleantrueAuto-indexation MEMORY.md + memory/**/*.md
paths[]arrayChemins supplémentaires : { name, path, pattern? }
sessions.enabledbooleanfalseIndexer les transcripts de session
sessions.retentionDaysnumberRétention des transcripts
sessions.exportDirstringRépertoire d’exportation
CléTypePar défautDescription
update.intervalstring5mIntervalle de rafraîchissement
update.debounceMsnumber15000Anti-rebond des modifications de fichiers
update.onBootbooleantrueRafraîchir au démarrage
update.waitForBootSyncbooleanfalseBloquer le démarrage jusqu’à la fin du rafraîchissement
update.embedIntervalstringCadence d’incorporation séparée
update.commandTimeoutMsnumberDélai d’attente pour les commandes QMD
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 d’attente de recherche

Contrôle les sessions qui 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 est DM uniquement. match.keyPrefix correspond à la clé de session normalisée ; match.rawKeyPrefix correspond à la clé brute, y compris agent:<id>:.

memory.citations s’applique à tous les backends :

ValeurComportement
auto (par défaut)Inclure le 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 en interne à l’agent)
{
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" }],
},
},
}