milvus-logo
LFAI
Casa
  • Integrazioni
    • Agenti

Come iniziare con Mem0 e Milvus

Open In Colab GitHub Repository

Mem0 è un livello di memoria intelligente per applicazioni di intelligenza artificiale, 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: aggiunta, recupero, aggiornamento, ricerca, cancellazione e tracciamento della cronologia della memoria, utilizzando Milvus, un database vettoriale open source ad alte prestazioni che consente una memorizzazione e un recupero efficienti. 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

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 "<nome_utente>:<password>" come token, altrimenti non impostare il token.
  • Se si utilizza Zilliz Cloud, il servizio cloud completamente gestito per Milvus, regolare 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'}]}

Tradotto daDeepLogo

Try Managed Milvus for Free

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

Get Started
Feedback

Questa pagina è stata utile?