Memulai dengan Mem0 dan Milvus
Mem0 adalah lapisan memori cerdas untuk aplikasi AI, yang dirancang untuk menghadirkan interaksi yang dipersonalisasi dan efisien dengan mempertahankan preferensi pengguna dan terus beradaptasi dari waktu ke waktu. Ideal untuk chatbot dan alat yang digerakkan oleh AI, Mem0 menciptakan pengalaman yang mulus dan sesuai dengan konteks.
Dalam tutorial ini, kita akan membahas operasi manajemen memori Mem0 yang penting-menambahkan, mengambil, memperbarui, mencari, menghapus, dan melacak riwayat memori-menggunakan Milvus, basis data vektor sumber terbuka berkinerja tinggi yang mendukung penyimpanan dan pengambilan yang efisien. Pengenalan langsung ini akan memandu Anda melalui operasi memori dasar untuk membantu Anda membangun interaksi AI yang dipersonalisasi dengan Mem0 dan Milvus.
Persiapan
Unduh pustaka yang diperlukan
$ pip install mem0ai pymilvus
Jika Anda menggunakan Google Colab, untuk mengaktifkan dependensi yang baru saja diinstal, Anda mungkin perlu memulai ulang runtime (klik menu "Runtime" di bagian atas layar, dan pilih "Restart session" dari menu tarik-turun).
Mengkonfigurasi Mem0 dengan Milvus
Kita akan menggunakan OpenAI sebagai LLM dalam contoh ini. Anda harus menyiapkan kunci api OPENAI_API_KEY
sebagai variabel lingkungan.
import os
os.environ["OPENAI_API_KEY"] = "sk-***********"
Sekarang, kita dapat mengonfigurasi Mem0 untuk menggunakan Milvus sebagai penyimpan vektor
# 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)
- Jika Anda hanya membutuhkan basis data vektor lokal untuk data skala kecil atau pembuatan prototipe, mengatur uri sebagai file lokal, misalnya
./milvus.db
, adalah metode yang paling mudah, karena secara otomatis menggunakan Milvus Lite untuk menyimpan semua data dalam file ini.- Jika Anda memiliki data berskala besar, misalnya lebih dari satu juta vektor, Anda dapat menyiapkan server Milvus yang lebih berkinerja tinggi di Docker atau Kubernetes. Dalam pengaturan ini, gunakan alamat dan port server sebagai uri Anda, misalnya
http://localhost:19530
. Jika Anda mengaktifkan fitur autentikasi di Milvus, gunakan "<nama_user Anda>:<kata sandi Anda>" sebagai token, jika tidak, jangan setel token.- Jika Anda menggunakan Zilliz Cloud, layanan cloud yang dikelola sepenuhnya untuk Milvus, sesuaikan
uri
dantoken
, yang sesuai dengan Public Endpoint dan kunci API di Zilliz Cloud.
Mengelola Memori Pengguna dengan Mem0 dan Milvus
Menambahkan Memori
Fungsi add
menyimpan teks tidak terstruktur di Milvus sebagai memori, mengaitkannya dengan pengguna tertentu dan metadata opsional.
Di sini, kita menambahkan memori Alice, "bekerja untuk meningkatkan kemampuan tenis saya," bersama dengan metadata yang relevan untuk konteks Milvus.
# 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': []}
Memperbarui Memori
Kita dapat menggunakan nilai balik fungsi add
untuk mengambil ID memori, yang memungkinkan kita untuk memperbarui memori ini dengan informasi baru melalui 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!'}
Mendapatkan Semua Memori Untuk Seorang Pengguna
Kita dapat menggunakan fungsi get_all
untuk melihat semua memori yang disisipkan atau memfilter dengan user_id
di Milvus.
Perhatikan bahwa kita dapat melihat memori sekarang berubah dari "Bekerja untuk meningkatkan kemampuan tenis" menjadi "Suka bermain tenis di akhir pekan".
# 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'}]}
Melihat Riwayat Pembaruan Memori
Kita juga dapat melihat riwayat pembaruan memori dengan menentukan memory_id mana yang kita minati melalui fungsi 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'}]
Cari Memori
Kita dapat menggunakan fungsi search
untuk mencari memori yang paling berhubungan dengan pengguna.
Mari kita mulai dengan menambahkan memori lain untuk Alice.
new_mem = m.add(
"I have a linear algebra midterm exam on November 20",
user_id="alice",
metadata={"category": "task"},
)
Sekarang, kita panggil get_all
dengan menyebutkan user_id untuk memverifikasi bahwa kita memang memiliki 2 entri memori untuk 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'},
{'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'}]}
Kita dapat melakukan search
sekarang dengan menyediakan query
dan user_id
. Perhatikan bahwa kita secara default menggunakan metrik L2
untuk pencarian kemiripan, jadi score
yang lebih kecil berarti kemiripan yang lebih besar.
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'}]}
Menghapus Memori
Kita juga dapat delete
sebuah memori dengan memberikan memory_id
yang sesuai.
Kita akan menghapus memori "Suka bermain tenis di akhir pekan" karena memory_id
telah diambil, dan memanggil get_all
untuk memverifikasi bahwa penghapusan telah berhasil.
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'}]}