Plugin guides
Mémoire LanceDB
memory-lancedb est un plugin externe officiel qui stocke la mémoire à long terme dans
LanceDB avec une recherche vectorielle. Il peut rappeler automatiquement les souvenirs pertinents avant un tour
du modèle et capturer automatiquement les faits importants après une réponse.
Utilisez-le pour une base de données vectorielle locale, un point de terminaison d’embeddings compatible avec OpenAI ou un stockage de mémoire distinct du backend de mémoire intégré par défaut.
Installation
openclaw plugins install @openclaw/memory-lancedbLe plugin est publié sur npm ; il n’est pas inclus dans l’image d’exécution
d’OpenClaw. Son installation écrit l’entrée du plugin, l’active et remplace
plugins.slots.memory par memory-lancedb. Si un autre plugin occupe actuellement
l’emplacement de mémoire, ce plugin est désactivé avec un avertissement.
Démarrage rapide
{ plugins: { slots: { memory: "memory-lancedb", }, entries: { "memory-lancedb": { enabled: true, config: { embedding: { provider: "openai", model: "text-embedding-3-small", }, autoRecall: true, autoCapture: false, }, }, }, },}Redémarrez le Gateway après avoir modifié la configuration du plugin, puis vérifiez qu’il a été chargé :
openclaw gateway restartopenclaw plugins listConfiguration des embeddings
embedding est requis et doit inclure au moins un champ. provider
utilise par défaut openai ; model utilise par défaut text-embedding-3-small.
| Champ | Type | Remarques |
|---|---|---|
embedding.provider |
chaîne | Identifiant de l’adaptateur, par ex. openai, github-copilot, ollama. Valeur par défaut : openai. |
embedding.model |
chaîne | Valeur par défaut : text-embedding-3-small. |
embedding.apiKey |
chaîne | Facultatif ; prend en charge l’expansion de ${ENV_VAR}. |
embedding.baseUrl |
chaîne | Facultatif ; prend en charge l’expansion de ${ENV_VAR}. |
embedding.dimensions |
entier (>=1) | Requis pour les modèles absents du tableau intégré (voir ci-dessous). |
Deux chemins de requête existent :
- Chemin de l’adaptateur du fournisseur (par défaut) : définissez
embedding.provideret omettezembedding.apiKey/embedding.baseUrl. Le plugin résout le profil d’authentification configuré du fournisseur, la variable d’environnement oumodels.providers.<provider>.apiKeypar l’intermédiaire des mêmes adaptateurs d’embeddings de mémoire que ceux utilisés parmemory-core. Il s’agit du chemin pourgithub-copilot,ollamaet tout autre fournisseur intégré prenant en charge les embeddings. - Chemin du client direct compatible avec OpenAI : laissez
embedding.providernon défini (ou"openai") et définissezembedding.apiKeyainsi queembedding.baseUrl. Utilisez ce chemin pour un point de terminaison brut d’embeddings compatible avec OpenAI qui ne dispose d’aucun adaptateur de fournisseur intégré.
L’OAuth d’OpenAI Codex / ChatGPT ne constitue pas un identifiant d’embeddings OpenAI Platform.
Pour les embeddings OpenAI, utilisez un profil d’authentification par clé d’API OpenAI, OPENAI_API_KEY ou
models.providers.openai.apiKey. Les utilisateurs disposant uniquement d’OAuth doivent choisir un autre
fournisseur prenant en charge les embeddings, tel que github-copilot ou ollama.
{ plugins: { entries: { "memory-lancedb": { enabled: true, config: { embedding: { provider: "github-copilot", model: "text-embedding-3-small", }, }, }, }, },}Certains points de terminaison d’embeddings compatibles avec OpenAI rejettent le paramètre encoding_format ;
d’autres l’ignorent et renvoient toujours number[]. memory-lancedb
omet encoding_format dans les requêtes et accepte aussi bien les réponses sous forme de tableaux de nombres flottants que
celles encodées en base64 au format float32 ; les deux formes de réponse fonctionnent donc sans configuration.
Dimensions
OpenClaw ne dispose de dimensions intégrées que pour text-embedding-3-small (1536) et
text-embedding-3-large (3072). Tout autre modèle nécessite une valeur
embedding.dimensions explicite afin que LanceDB puisse créer la colonne vectorielle, par exemple
ZhiPu embedding-3 avec 2048 dimensions :
{ plugins: { entries: { "memory-lancedb": { enabled: true, config: { embedding: { apiKey: "${ZHIPU_API_KEY}", baseUrl: "https://open.bigmodel.cn/api/paas/v4", model: "embedding-3", dimensions: 2048, }, }, }, }, },}Embeddings Ollama
Utilisez le chemin de l’adaptateur du fournisseur Ollama intégré (embedding.provider: "ollama").
Il appelle le point de terminaison natif /api/embed d’Ollama et suit les mêmes règles d’authentification et d’URL
de base que le fournisseur Ollama.
{ plugins: { slots: { memory: "memory-lancedb", }, entries: { "memory-lancedb": { enabled: true, config: { embedding: { provider: "ollama", baseUrl: "http://127.0.0.1:11434", model: "mxbai-embed-large", dimensions: 1024, }, recallMaxChars: 400, autoRecall: true, autoCapture: false, }, }, }, },}mxbai-embed-large ne figure pas dans le tableau de dimensions intégré ; dimensions est donc
requis. Pour les petits modèles d’embeddings locaux, réduisez recallMaxChars si le
serveur local renvoie des erreurs de longueur de contexte.
Limites de rappel et de capture
| Paramètre | Valeur par défaut | Plage | S’applique à |
|---|---|---|---|
recallMaxChars |
1000 |
100-10000 | Texte envoyé à l’API d’embeddings pour le rappel. |
captureMaxChars |
500 |
100-10000 | Longueur de message admissible pour la capture automatique. |
customTriggers |
[] |
0-50 éléments, chacun <=100 caractères | Phrases littérales qui amènent la capture automatique à prendre un message en compte. |
recallMaxChars limite la requête de rappel automatique before_prompt_build, l’outil
memory_recall, le chemin de requête memory_forget et openclaw ltm search. Le rappel automatique génère l’embedding du dernier message utilisateur du tour et se rabat
sur l’invite complète uniquement en l’absence de message utilisateur, ce qui exclut les
métadonnées du canal et les grands blocs d’invite de la requête d’embedding.
captureMaxChars détermine si un message utilisateur issu de l’événement agent_end
du tour est suffisamment court pour être pris en compte par la capture automatique ; il n’affecte pas
les requêtes de rappel.
customTriggers ajoute des phrases littérales de capture automatique sans expression régulière. Les déclencheurs
intégrés couvrent les expressions de mémoire courantes en anglais, tchèque, chinois, japonais et coréen
(remember, prefer, 记住, 覚えて, 기억해 et similaires).
La capture automatique rejette également les textes qui ressemblent à des métadonnées d’enveloppe ou de transport,
à des charges utiles d’injection d’invite ou à un contexte <relevant-memories> déjà injecté,
et limite la capture à 3 souvenirs par tour d’agent.
Chaque souvenir appartient à un seul agent. Le rappel, la détection des doublons, la capture,
l’énumération, les requêtes brutes et la suppression appliquent tous ce propriétaire avant de renvoyer ou
de modifier des lignes. Un agent avec memorySearch.enabled: false (dans agents.list[]
ou via agents.defaults) ne dispose également d’aucun des outils memory_recall, memory_store
ou memory_forget et ne participe ni au rappel ni à la
capture automatiques, même lorsque les indicateurs autoRecall/autoCapture au niveau du plugin sont activés.
Commandes
memory-lancedb enregistre l’espace de noms CLI ltm dès qu’il est installé
(et pas seulement lorsqu’il occupe l’emplacement de mémoire actif) :
openclaw ltm list [--agent <id>] [--limit <n>] [--order-by-created-at]openclaw ltm search <query> [--agent <id>] [--limit <n>]openclaw ltm stats [--agent <id>]ltm query exécute une requête non vectorielle directement sur la table LanceDB :
openclaw ltm query --agent research --cols id,text,createdAt --limit 20openclaw ltm query --filter "category = 'preference'" --order-by createdAt:desc| Indicateur | Valeur par défaut | Remarques |
|---|---|---|
--agent <id> |
agent configuré par défaut | Sélectionne l’espace de noms privé de l’agent. Disponible sur list, search, query et stats. |
--cols <columns> |
id,text,importance,category,createdAt |
Liste autorisée de colonnes séparées par des virgules. |
--filter <condition> |
aucune | Une comparaison sur une colonne de sortie, telle que category = 'preference' ou importance >= 0.8. Les valeurs de chaîne doivent être placées entre guillemets. |
--limit <n> |
10 |
Entier positif. |
--order-by <column>:<asc|desc> |
aucune | Trié en mémoire après l’exécution du filtre ; la colonne de tri est automatiquement ajoutée à la projection et retirée de la sortie si elle n’a pas été demandée. |
Les agents disposent de trois outils fournis par le plugin de mémoire actif :
memory_recall: recherche vectorielle dans les souvenirs stockés.memory_store: enregistre un fait, une préférence, une décision ou une entité (rejette le texte qui ressemble à une charge utile d’injection d’invite ; ignore les enregistrements presque identiques).memory_forget: supprime parmemoryIdou parquery(supprime automatiquement une correspondance unique dont le score dépasse 90 %, sinon répertorie les identifiants candidats pour lever l’ambiguïté).
Stockage
Les données LanceDB sont stockées par défaut dans ~/.openclaw/memory/lancedb. Remplacez cette valeur avec dbPath :
{ plugins: { entries: { "memory-lancedb": { enabled: true, config: { dbPath: "~/.openclaw/memory/lancedb", embedding: { apiKey: "${OPENAI_API_KEY}", model: "text-embedding-3-small", }, }, }, }, },}Le plugin conserve une seule table LanceDB et stocke un propriétaire d’agent normalisé dans chaque
ligne. Il s’agit d’une limite de stockage, et non d’un filtre postérieur à la recherche : la propriété de l’agent est
appliquée avant le classement vectoriel et incluse dans les prédicats d’énumération, de requête, de comptage et de suppression.
ltm query --filter accepte une comparaison validée sur les
colonnes de sortie publiques. Le stockage construit cette comparaison séparément du
prédicat obligatoire du propriétaire, de sorte qu’un filtre ne peut pas élargir la requête à un autre
agent.
Les bases de données créées avant l’introduction de la propriété par agent ne disposent d’aucune provenance fiable pour leurs lignes.
Lors d’une mise à niveau, openclaw doctor --fix attribue une seule fois ces lignes héritées à
l’agent configuré par défaut. L’accès à l’exécution échoue de manière fermée tant que cette migration n’est pas
terminée ; les autres agents n’héritent jamais des anciennes lignes partagées.
storageOptions accepte des paires clé/valeur de chaînes pour les backends de stockage LanceDB
(par ex. un stockage d’objets compatible avec S3) et prend en charge l’expansion de ${ENV_VAR} :
{ plugins: { entries: { "memory-lancedb": { enabled: true, config: { dbPath: "s3://memory-bucket/openclaw", storageOptions: { access_key: "${AWS_ACCESS_KEY_ID}", secret_key: "${AWS_SECRET_ACCESS_KEY}", endpoint: "${AWS_ENDPOINT_URL}", }, embedding: { apiKey: "${OPENAI_API_KEY}", model: "text-embedding-3-small", }, }, }, }, },}Dépendances d’exécution et prise en charge des plateformes
memory-lancedb dépend du paquet natif @lancedb/lancedb, qui appartient au
paquet du plugin (et non à la distribution principale d’OpenClaw). Le démarrage du Gateway ne répare pas
les dépendances du plugin ; si la dépendance native est absente ou ne se charge pas,
réinstallez ou mettez à jour le paquet du plugin, puis redémarrez le Gateway.
@lancedb/lancedb ne publie pas de version native pour darwin-x64 (Mac
Intel). Sur cette plateforme, le plugin indique dans les journaux que LanceDB est indisponible lors du
chargement ; utilisez le backend de mémoire par défaut, exécutez le Gateway sur une
plateforme ou une architecture prise en charge, ou désactivez memory-lancedb.
Dépannage
La longueur de l’entrée dépasse la longueur du contexte
Le modèle d’embedding a rejeté la requête de rappel :
memory-lancedb: échec du rappel : Erreur : 400 la longueur de l’entrée dépasse la longueur du contexteRéduisez recallMaxChars, puis redémarrez le Gateway :
{ plugins: { entries: { "memory-lancedb": { config: { recallMaxChars: 400, }, }, }, },}Pour Ollama, vérifiez également que le serveur d’embedding est accessible depuis l’hôte du Gateway au moyen de son point de terminaison natif d’embedding :
curl http://127.0.0.1:11434/api/embed \ -H "Content-Type: application/json" \ -d '{"model":"mxbai-embed-large","input":"hello"}'Modèle d’embedding non pris en charge
Sans embedding.dimensions, seules les dimensions d’embedding OpenAI intégrées
sont connues (text-embedding-3-small, text-embedding-3-large). Pour tout autre
modèle, définissez embedding.dimensions sur la taille de vecteur indiquée par ce modèle.
Le plugin se charge, mais aucune mémoire n’apparaît
Vérifiez que plugins.slots.memory pointe vers memory-lancedb, puis exécutez :
openclaw ltm statsopenclaw ltm search "recent preference"Si autoCapture est désactivé, le plugin rappelle toujours les mémoires existantes, mais
n’en stocke pas automatiquement de nouvelles. Utilisez l’outil memory_store, ou activez
autoCapture.