milvus-logo
LFAI
Home
  • Intégrations
    • Agents

Premiers pas avec Mem0 et Milvus

Open In Colab GitHub Repository

Mem0 est une couche de mémoire intelligente pour les applications d'IA, conçue pour offrir des interactions personnalisées et efficaces en conservant les préférences de l'utilisateur et en s'adaptant continuellement au fil du temps. Idéal pour les chatbots et les outils pilotés par l'IA, Mem0 crée des expériences transparentes et conscientes du contexte.

Dans ce tutoriel, nous aborderons les opérations essentielles de gestion de la mémoire de Mem0 - ajout, récupération, mise à jour, recherche, suppression et suivi de l'historique de la mémoire - en utilisant Milvus, une base de données vectorielle open-source haute performance qui permet un stockage et une récupération efficaces. Cette introduction pratique vous guidera à travers les opérations de mémoire fondamentales pour vous aider à créer des interactions d'IA personnalisées avec Mem0 et Milvus.

Préparation

Télécharger les bibliothèques nécessaires

$ pip install mem0ai pymilvus

Si vous utilisez Google Colab, pour activer les dépendances qui viennent d'être installées, vous devrez peut-être redémarrer le runtime (cliquez sur le menu "Runtime" en haut de l'écran, et sélectionnez "Restart session" dans le menu déroulant).

Configurer Mem0 avec Milvus

Nous utiliserons OpenAI comme LLM dans cet exemple. Vous devez préparer la clé api OPENAI_API_KEY en tant que variable d'environnement.

import os

os.environ["OPENAI_API_KEY"] = "sk-***********"

Maintenant, nous pouvons configurer Mem0 pour qu'il utilise Milvus comme magasin de vecteurs

# Define Config
from mem0 import Memory

config = {
    "vector_store": {
        "provider": "milvus",
        "config": {
            "collection_name": "quickstart_mem0_with_milvus",
            "embedding_model_dims": "1536",
            "url": "./milvus.db",  # Use local vector database for demo purpose
        },
    },
    "version": "v1.1",
}

m = Memory.from_config(config)
  • Si vous n'avez besoin d'une base de données vectorielle locale que pour les données à petite échelle ou le prototypage, définir l'uri comme un fichier local, par exemple./milvus.db, est la méthode la plus pratique, car elle utilise automatiquement Milvus Lite pour stocker toutes les données dans ce fichier.
  • Si vous disposez de données à grande échelle, par exemple plus d'un million de vecteurs, vous pouvez configurer un serveur Milvus plus performant sur Docker ou Kubernetes. Dans cette configuration, veuillez utiliser l'adresse et le port du serveur comme uri, par exemplehttp://localhost:19530. Si vous activez la fonction d'authentification sur Milvus, utilisez "<votre_nom_d'utilisateur>:<votre_mot_de_passe>" comme jeton, sinon ne définissez pas le jeton.
  • Si vous utilisez Zilliz Cloud, le service en nuage entièrement géré pour Milvus, réglez les paramètres uri et token, qui correspondent au point de terminaison public et à la clé API dans Zilliz Cloud.

Gestion des mémoires d'utilisateur avec Mem0 et Milvus

Ajout d'une mémoire

La fonction add stocke du texte non structuré dans Milvus en tant que mémoire, en l'associant à un utilisateur spécifique et à des métadonnées facultatives.

Ici, nous ajoutons à Milvus le souvenir d'Alice, "Je travaille à améliorer mes compétences en tennis", ainsi que des métadonnées pertinentes pour le contexte.

# Add a memory to user: Working on improving tennis skills
res = m.add(
    messages="I am working on improving my tennis skills.",
    user_id="alice",
    metadata={"category": "hobbies"},
)

res
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Working on improving tennis skills',
   'event': 'ADD'}],
 'relations': []}

Mise à jour d'un souvenir

Nous pouvons utiliser la valeur de retour de la fonction add pour récupérer l'ID de la mémoire, ce qui nous permet de mettre à jour cette mémoire avec de nouvelles informations via update.

# Get memory_id
memory_id = res["results"][0]["id"]

# Update this memory with new information: Likes to play tennis on weekends
m.update(memory_id=memory_id, data="Likes to play tennis on weekends")
{'message': 'Memory updated successfully!'}

Obtenir toutes les mémoires d'un utilisateur

La fonction get_all permet d'afficher toutes les mémoires insérées ou de les filtrer par user_id dans Milvus.

Notez que nous pouvons voir que la mémoire est passée de "Travailler à améliorer ses compétences en tennis" à "Aime jouer au tennis le week-end".

# Get all memory for the user Alice
m.get_all(user_id="alice")
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Likes to play tennis on weekends',
   'hash': '4c3bc9f87b78418f19df6407bc86e006',
   'metadata': None,
   'created_at': '2024-11-01T19:33:44.116920-07:00',
   'updated_at': '2024-11-01T19:33:47.619857-07:00',
   'user_id': 'alice'}]}

Afficher l'historique des mises à jour des mémoires

Nous pouvons également consulter l'historique des mises à jour de la mémoire en spécifiant l'identifiant de la mémoire qui nous intéresse via la fonction history.

m.history(memory_id=memory_id)
[{'id': '71ed3cec-5d9a-4fa6-a009-59802450c0b9',
  'memory_id': '77162018-663b-4dfa-88b1-4f029d6136ab',
  'old_memory': None,
  'new_memory': 'Working on improving tennis skills',
  'event': 'ADD',
  'created_at': '2024-11-01T19:33:44.116920-07:00',
  'updated_at': None},
 {'id': 'db2b003c-ffb7-42e4-bd8a-b9cf56a02bb9',
  'memory_id': '77162018-663b-4dfa-88b1-4f029d6136ab',
  'old_memory': 'Working on improving tennis skills',
  'new_memory': 'Likes to play tennis on weekends',
  'event': 'UPDATE',
  'created_at': '2024-11-01T19:33:44.116920-07:00',
  'updated_at': '2024-11-01T19:33:47.619857-07:00'}]

Rechercher une mémoire

Nous pouvons utiliser la fonction search pour rechercher la mémoire la plus proche de l'utilisateur.

Commençons par ajouter une nouvelle mémoire pour Alice.

new_mem = m.add(
    "I have a linear algebra midterm exam on November 20",
    user_id="alice",
    metadata={"category": "task"},
)

Nous appelons maintenant get_all en spécifiant l'identifiant de l'utilisateur pour vérifier que nous avons bien deux entrées de mémoire pour l'utilisateur Alice.

m.get_all(user_id="alice")
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Likes to play tennis on weekends',
   'hash': '4c3bc9f87b78418f19df6407bc86e006',
   'metadata': None,
   'created_at': '2024-11-01T19:33:44.116920-07:00',
   'updated_at': '2024-11-01T19:33:47.619857-07:00',
   'user_id': 'alice'},
  {'id': 'aa8eaa38-74d6-4b58-8207-b881d6d93d02',
   'memory': 'Has a linear algebra midterm exam on November 20',
   'hash': '575182f46965111ca0a8279c44920ea2',
   'metadata': {'category': 'task'},
   'created_at': '2024-11-01T19:33:57.271657-07:00',
   'updated_at': None,
   'user_id': 'alice'}]}

Nous pouvons maintenant exécuter search en fournissant query et user_id. Notez que nous utilisons par défaut la métrique L2 pour la recherche de similarité, de sorte qu'une petite valeur de score signifie une plus grande similarité.

m.search(query="What are Alice's hobbies", user_id="alice")
{'results': [{'id': '77162018-663b-4dfa-88b1-4f029d6136ab',
   'memory': 'Likes to play tennis on weekends',
   'hash': '4c3bc9f87b78418f19df6407bc86e006',
   'metadata': None,
   'score': 1.2807445526123047,
   'created_at': '2024-11-01T19:33:44.116920-07:00',
   'updated_at': '2024-11-01T19:33:47.619857-07:00',
   'user_id': 'alice'},
  {'id': 'aa8eaa38-74d6-4b58-8207-b881d6d93d02',
   'memory': 'Has a linear algebra midterm exam on November 20',
   'hash': '575182f46965111ca0a8279c44920ea2',
   'metadata': {'category': 'task'},
   'score': 1.728922724723816,
   'created_at': '2024-11-01T19:33:57.271657-07:00',
   'updated_at': None,
   'user_id': 'alice'}]}

Supprimer une mémoire

Nous pouvons également delete un souvenir en fournissant le memory_id correspondant.

Nous allons supprimer le souvenir "Aime jouer au tennis le week-end" car son memory_id a déjà été récupéré, et appeler get_all pour vérifier que la suppression est réussie.

m.delete(memory_id=memory_id)

m.get_all("alice")
{'results': [{'id': 'aa8eaa38-74d6-4b58-8207-b881d6d93d02',
   'memory': 'Has a linear algebra midterm exam on November 20',
   'hash': '575182f46965111ca0a8279c44920ea2',
   'metadata': {'category': 'task'},
   'created_at': '2024-11-01T19:33:57.271657-07:00',
   'updated_at': None,
   'user_id': 'alice'}]}

Traduit parDeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Cette page a-t - elle été utile ?