• Informazioni su Milvus
  • Iniziare
  • Concetti
  • Guida per l'utente
  • Importazione dei dati
  • Strumenti AI
  • Guida all'amministrazione
  • Strumenti
  • Integrazioni
  • Tutorial
  • Domande frequenti
  • API Reference

Come iniziare con Mem0 e Milvus

Open In Colab GitHub Repository

Mem0 è un livello di memoria intelligente per applicazioni AI, progettato per offrire interazioni personalizzate ed efficienti conservando le preferenze dell'utente e adattandosi continuamente nel tempo. Ideale per i chatbot e gli strumenti basati sull'intelligenza artificiale, Mem0 crea esperienze senza soluzione di continuità e consapevoli del contesto.

In questo tutorial, verranno illustrate le operazioni essenziali di gestione della memoria di Mem0: inserimento, recupero, aggiornamento, ricerca, cancellazione e tracciamento della cronologia della memoria, utilizzando Milvus, un database vettoriale open source ad alte prestazioni che consente di memorizzare e recuperare in modo efficiente. Questa introduzione pratica vi guiderà attraverso le operazioni di memoria fondamentali per aiutarvi a costruire interazioni AI personalizzate con Mem0 e Milvus.

Preparazione

Scaricare le librerie necessarie

$ pip install mem0ai pymilvus milvus-lite

Se si utilizza Google Colab, per abilitare le dipendenze appena installate potrebbe essere necessario riavviare il runtime (fare clic sul menu "Runtime" nella parte superiore dello schermo e selezionare "Restart session" dal menu a discesa).

Configurare Mem0 con Milvus

In questo esempio utilizzeremo OpenAI come LLM. È necessario preparare la chiave api OPENAI_API_KEY come variabile d'ambiente.

import os

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

Ora possiamo configurare Mem0 per utilizzare Milvus come archivio vettoriale.

# 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)
  • Se si ha bisogno di un database vettoriale locale solo per dati su piccola scala o per la prototipazione, impostare l'uri come un file locale, ad esempio./milvus.db, è il metodo più conveniente, poiché utilizza automaticamente Milvus Lite per memorizzare tutti i dati in questo file.
  • Se si dispone di una grande quantità di dati, ad esempio più di un milione di vettori, è possibile configurare un server Milvus più performante su Docker o Kubernetes. In questa configurazione, utilizzare l'indirizzo e la porta del server come uri, ad esempiohttp://localhost:19530. Se si attiva la funzione di autenticazione su Milvus, utilizzare ":" come token, altrimenti non impostare il token.
  • Se si utilizza Zilliz Cloud, il servizio cloud completamente gestito per Milvus, impostare uri e token, che corrispondono all'endpoint pubblico e alla chiave API di Zilliz Cloud.

Gestione delle memorie utente con Mem0 e Milvus

Aggiunta di una memoria

La funzione add memorizza un testo non strutturato in Milvus come memoria, associandolo a un utente specifico e a metadati opzionali.

In questo caso, stiamo aggiungendo a Milvus la memoria di Alice, "sto lavorando per migliorare le mie capacità tennistiche", insieme ai metadati rilevanti per il contesto.

# 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': []}

Aggiornare una memoria

Possiamo usare il valore di ritorno della funzione add per recuperare l'ID della memoria, in modo da aggiornare questa memoria con nuove informazioni tramite 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!'}

Ottenere tutte le memorie di un utente

È possibile utilizzare la funzione get_all per visualizzare tutte le memorie inserite o per filtrare user_id in Milvus.

Si noti che la memoria è cambiata da "Lavora per migliorare le sue capacità tennistiche" a "Ama giocare a tennis nei fine settimana".

# 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'}]}

Visualizzazione della cronologia degli aggiornamenti della memoria

È possibile visualizzare la cronologia degli aggiornamenti della memoria specificando l'ID memoria che ci interessa tramite la funzione 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'}]

Ricerca nella memoria

Possiamo usare la funzione search per cercare la memoria più correlata all'utente.

Iniziamo aggiungendo un'altra memoria per Alice.

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

Ora chiamiamo get_all specificando l'ID utente per verificare che ci siano effettivamente 2 voci di memoria per l'utente 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'}]}

Ora possiamo eseguire search fornendo query e user_id. Si noti che per impostazione predefinita si utilizza la metrica L2 per la ricerca della somiglianza, quindi una score più piccola significa una maggiore somiglianza.

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'}]}

Cancellare la memoria

Possiamo anche delete una memoria fornendo il corrispondente memory_id.

Cancelleremo la memoria "Likes to play tennis on weekends", poiché il suo memory_id è già stato recuperato, e chiameremo get_all per verificare che la cancellazione sia avvenuta con successo.

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'}]}