Aller au contenu

Recherche de mémoire

memory_search trouve des notes pertinentes dans vos fichiers de mémoire, même lorsque la formulation diffère du texte original. Il fonctionne en indexant la mémoire en petits morceaux et en les recherchant à l’aide d’embeddings, de mots-clés ou des deux.

Si vous avez une clé OpenAI, Gemini, Voyage ou Mistral API configurée, la recherche de mémoire fonctionne automatiquement. Pour définir un provider explicitement :

{
agents: {
defaults: {
memorySearch: {
provider: "openai", // or "gemini", "local", "ollama", etc.
},
},
},
}

Pour les embeddings locaux sans clé API, utilisez provider: "local" (nécessite node-llama-cpp).

ProviderIDNécessite une clé APINotes
OpenAIopenaiOuiDétecté automatiquement, rapide
GeminigeminiOuiPrend en charge l’indexation d’images/audio
VoyagevoyageOuiDétecté automatiquement
MistralmistralOuiDétecté automatiquement
OllamaollamaNonLocal, doit être défini explicitement
LocallocalNonModèle GGUF, téléchargement de ~0,6 Go

OpenClaw exécute deux chemins de récupération en parallèle et fusionne les résultats :

flowchart LR
Q["Query"] --> E["Embedding"]
Q --> T["Tokenize"]
E --> VS["Vector Search"]
T --> BM["BM25 Search"]
VS --> M["Weighted Merge"]
BM --> M
M --> R["Top Results"]
  • La recherche vectorielle trouve des notes ayant une signification similaire (“hôte de passerelle” correspond à “la machine exécutant OpenClaw”).
  • La recherche de mots-clés BM25 trouve des correspondances exactes (ID, chaînes d’erreur, clés de configuration).

Si un seul chemin est disponible (pas d’embeddings ou pas de FTS), l’autre fonctionne seul.

Deux fonctionnalités optionnelles aident lorsque vous avez un long historique de notes :

Les anciennes notes perdent progressivement du poids dans le classement afin que les informations récentes apparaissent en premier. Avec la demi-vie par défaut de 30 jours, une note du mois dernier est notée à 50 % de son poids initial. Les fichiers pérennes comme MEMORY.md ne sont jamais dépréciés.

Réduit les résultats redondants. Si cinq notes mentionnent toutes la même configuration de routeur, MMR garantit que les premiers résultats couvrent différents sujets au lieu de se répéter.

{
agents: {
defaults: {
memorySearch: {
query: {
hybrid: {
mmr: { enabled: true },
temporalDecay: { enabled: true },
},
},
},
},
},
}

Avec Gemini Embedding 2, vous pouvez indexer des images et des fichiers audio avec le Markdown. Les requêtes de recherche restent textuelles, mais elles correspondent au contenu visuel et audio. Voir la référence de configuration de la mémoire pour la configuration.

Vous pouvez éventuellement indexer les transcriptions de session pour que memory_search puisse rappeler les conversations précédentes. Cela est optionnel via memorySearch.experimental.sessionMemory. Voir la référence de configuration pour plus de détails.

Aucun résultat ? Exécutez openclaw memory status pour vérifier l’index. S’il est vide, exécutez openclaw memory index --force.

Uniquement des correspondances par mot-clé ? Votre fournisseur d’embeddings n’est peut-être pas configuré. Vérifiez openclaw memory status --deep.

Texte CJK introuvable ? Reconstruisez l’index FTS avec openclaw memory index --force.