Passer au contenu principal

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

Cette page répertorie tous les réglages de configuration pour la recherche mémoire OpenClaw. Pour des vues d’ensemble conceptuelles, consultez : Tous les paramètres de recherche mémoire se trouvent sous agents.defaults.memorySearch dans openclaw.json sauf indication contraire.

Sélection du fournisseur

CléTypeValeur par défautDescription
providerstringauto-détectéID de l’adaptateur d’embeddings : openai, gemini, voyage, mistral, ollama, local
modelstringvaleur par défaut du fournisseurNom du modèle d’embeddings
fallbackstring"none"ID de l’adaptateur de repli lorsque le principal échoue
enabledbooleantrueActiver ou désactiver la recherche mémoire

Ordre d’auto-détection

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 n’est pas auto-détecté (définissez-le explicitement).

Résolution des clés API

Les embeddings distants nécessitent une clé API. OpenClaw les résout depuis : les profils d’authentification, models.providers.*.apiKey, ou les variables d’environnement.
FournisseurVariable envClé 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
OllamaOLLAMA_API_KEY (placeholder)
OAuth Codex couvre uniquement le chat/completions et ne satisfait pas les requêtes d’embeddings.

Configuration du point de terminaison distant

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 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éTypeValeur par défautDescription
modelstringgemini-embedding-001Prend aussi en charge gemini-embedding-2-preview
outputDimensionalitynumber3072Pour Embedding 2 : 768, 1536 ou 3072
Modifier le modèle ou outputDimensionality déclenche une réindexation complète automatique.

Configuration des embeddings locaux

CléTypeValeur par défautDescription
local.modelPathstringtéléchargé automatiquementChemin vers le fichier modèle GGUF
local.modelCacheDirstringvaleur par défaut de node-llama-cppRépertoire 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échargement automatique). Nécessite une construction native : pnpm approve-builds puis pnpm rebuild node-llama-cpp.

Configuration de la recherche hybride

Tout se trouve sous memorySearch.query.hybrid :
CléTypeValeur par défautDescription
enabledbooleantrueActiver la recherche hybride BM25 + vecteur
vectorWeightnumber0.7Poids des scores vectoriels (0-1)
textWeightnumber0.3Poids des scores BM25 (0-1)
candidateMultipliernumber4Multiplicateur de taille du pool de candidats

MMR (diversité)

CléTypeValeur par défautDescription
mmr.enabledbooleanfalseActiver le reclassement MMR
mmr.lambdanumber0.70 = diversité maximale, 1 = pertinence maximale

Décroissance temporelle (récence)

CléTypeValeur par défautDescription
temporalDecay.enabledbooleanfalseActiver le boost de récence
temporalDecay.halfLifeDaysnumber30Le score est divisé par deux tous les N jours
Les fichiers evergreen (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 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 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 une 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 préserver des noms partagés explicites lorsque le chemin pointe en dehors de l’espace de travail courant. 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 l’audio aux côtés du Markdown avec Gemini Embedding 2 :
CléTypeValeur par défautDescription
multimodal.enabledbooleanfalseActiver l’indexation multimodale
multimodal.modalitiesstring[]["image"], ["audio"], ou ["all"]
multimodal.maxFileBytesnumber10000000Taille maximale de fichier pour l’indexation
S’applique uniquement aux fichiers dans extraPaths. Les racines 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 d’embeddings

CléTypeValeur par défautDescription
cache.enabledbooleanfalseMettre en cache les embeddings de blocs dans SQLite
cache.maxEntriesnumber50000Nombre maximal d’embeddings en cache
Empêche de recalculer les embeddings sur du texte inchangé pendant la réindexation ou les mises à jour de transcription.

Indexation par lots

CléTypeValeur par défautDescription
remote.batch.enabledbooleanfalseActiver l’API d’embeddings par lots
remote.batch.concurrencynumber2Tâches parallèles par lots
remote.batch.waitbooleantrueAttendre la fin du lot
remote.batch.pollIntervalMsnumberIntervalle de sondage
remote.batch.timeoutMinutesnumberDélai d’expiration du lot
Disponible pour openai, gemini et voyage. Le traitement par lots OpenAI est généralement le plus rapide et le moins coûteux pour les gros remplissages initiaux.

Recherche mémoire de session (expérimental)

Indexez les transcriptions de session et exposez-les via memory_search :
CléTypeValeur par défautDescription
experimental.sessionMemorybooleanfalseActiver l’indexation des sessions
sourcesstring[]["memory"]Ajouter "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 des sessions est facultative et s’exécute de façon asynchrone. Les résultats peuvent être légèrement obsolètes. Les journaux de session résident sur le disque, donc traitez l’accès au système de fichiers comme la limite de confiance.

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

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

Stockage de l’index

CléTypeValeur par défautDescription
store.pathstring~/.openclaw/memory/{agentId}.sqliteEmplacement de l’index (prend en charge le jeton {agentId})
store.fts.tokenizerstringunicode61Tokenizer 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éTypeValeur par 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’export

Planification des mises à jour

CléTypeValeur par défautDescription
update.intervalstring5mIntervalle de rafraîchissement
update.debounceMsnumber15000Antirebond des changements de fichiers
update.onBootbooleantrueRafraîchir au démarrage
update.waitForBootSyncbooleanfalseBloquer le démarrage jusqu’à la fin du rafraîchissement
update.embedIntervalstringCadence séparée pour les embeddings
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’embeddings QMD

Limites

CléTypeValeur par 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 uniquement. match.keyPrefix correspond à la clé de session normalisée ; match.rawKeyPrefix correspond à la clé brute incluant 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. Pour les détails conceptuels et les commandes de chat, consultez Dreaming.
CléTypeValeur par défautDescription
modestring"off"Préréglage : off, core, rem, ou deep
cronstringvaleur prédéfinie du presetRemplacement de l’expression cron du planning
timezonestringfuseau horaire utilisateurFuseau horaire pour l’évaluation du planning
limitnumbervaleur prédéfinie du presetNombre maximal de candidats à promouvoir par cycle
minScorenumbervaleur prédéfinie du presetScore pondéré minimal pour la promotion
minRecallCountnumbervaleur prédéfinie du presetSeuil minimal du nombre de rappels
minUniqueQueriesnumbervaleur prédéfinie du presetSeuil minimal du nombre de requêtes distinctes

Valeurs par défaut des presets

ModeCadenceminScoreminRecallCountminUniqueQueries
offDésactivé
coreQuotidien 3 h0.7532
remToutes les 6 heures0.8543
deepToutes les 12 heures0.8033

Exemple

{
  plugins: {
    entries: {
      "memory-core": {
        config: {
          dreaming: {
            mode: "core",
            timezone: "America/New_York",
          },
        },
      },
    },
  },
}