Que fait memory-lancedb-pro-openclaw ?
Compétence experte pour memory-lancedb-pro — un module de mémoire à long terme de grade production basé sur LanceDB pour les agents OpenClaw, avec récupération hybride, reclassement par cross-encoder, isolation multi-portée et capture automatique intelligente.
Aperçu
Cette compétence permet aux agents OpenClaw de conserver une mémoire à long terme en utilisant LanceDB, une base de données vectorielles conçue pour la production. Elle associe la récupération hybride (BM25 + embeddings vectoriels) au reclassement par cross-encoder pour garantir que les souvenirs les plus pertinents soient toujours récupérés. La compétence prend également en charge l'isolation multi-portée (projet, session, utilisateur) et la capture automatique intelligente pour enregistrer les informations importantes sans intervention manuelle.
Caractéristiques principales
- Récupération hybride : Combine la recherche textuelle (BM25) et la recherche vectorielle (embeddings) pour des résultats robustes.
- Reclassement par cross-encoder : Utilise un modèle de reclassement pour améliorer la pertinence des souvenirs récupérés.
- Isolation multi-portée : Sépare les souvenirs par portée (
projet,session,utilisateur) pour éviter les interférences contextuelles. - Capture automatique intelligente : Détecte et enregistre automatiquement les informations clés lors des interactions de l'agent.
- Stockage persistant : Utilise LanceDB pour un stockage durable et évolutif des vecteurs et métadonnées.
Installation
pip install memory-lancedb-pro
Configuration
Définissez les variables d'environnement suivantes :
| Variable | Description | Valeur par défaut |
|---|---|---|
LANCEDB_URI | URI de la base de données LanceDB | /tmp/lancedb |
LANCEDB_TABLE | Nom de la table pour les souvenirs | memories |
LANCEDB_EMBEDDING_MODEL | Modèle d'embeddings à utiliser | all-MiniLM-L6-v2 |
LANCEDB_CROSS_ENCODER_MODEL | Modèle de cross-encoder pour le reclassement | cross-encoder/ms-marco-MiniLM-L-6-v2 |
LANCEDB_TOP_K | Nombre de souvenirs à récupérer | 5 |
LANCEDB_SCOPE | Portée par défaut pour l'isolation | user |
Utilisation
Initialisation
from memory_lancedb_pro import LanceDBMemory
memory = LanceDBMemory(
uri="votre_uri_lancedb",
table_name="memories",
embedding_model="all-MiniLM-L6-v2",
cross_encoder_model="cross-encoder/ms-marco-MiniLM-L-6-v2",
scope="user",
top_k=5
)
Sauvegarder un souvenir
memory.save(
content="L'utilisateur a demandé une recette de gâteau au chocolat.",
metadata={"projet": "chat-culinaire", "session": "abc123"}
)
Récupérer des souvenirs
results = memory.retrieve(
query="recette de gâteau",
scope="user",
top_k=5
)
for result in results:
print(f"Score : {result['score']:.3f} - Contenu : {result['content']}")
Exemple avec OpenClaw
from openclaw import Agent
from memory_lancedb_pro import LanceDBMemory
class MonAgent(Agent):
def __init__(self):
super().__init__()
self.memory = LanceDBMemory(scope="session")
async def repondre(self, message):
# Récupérer les souvenirs pertinents
souvenirs = self.memory.retrieve(message, top_k=3)
contexte = "\n".join([s["content"] for s in souvenirs])
# Générer une réponse avec le contexte
reponse = await super().repondre(message, contexte=contexte)
# Sauvegarder automatiquement l'interaction
self.memory.save(
content=f"Utilisateur : {message}\nAssistant : {reponse}",
metadata={"type": "conversation"}
)
return reponse
Dépannage
-
Problème :
ImportError: Aucun module nommé 'lancedb'Solution : Vérifiez quelancedbest installé :pip install lancedb. Il peut être nécessaire de l'installer séparément selon la configuration. -
Problème : Ralentissement lors de la récupération avec un grand jeu de données. Solution : Réduisez la valeur
top_kou utilisez un index plus performant dans LanceDB. Consultez la documentation LanceDB pour l'indexation. -
Problème : Les souvenirs ne sont pas récupérés. Solution : Vérifiez la variable
LANCEDB_SCOPEet la portée utilisée lors de la sauvegarde. Assurez-vous que la requête correspond aux souvenirs sauvegardés.
Licence
MIT