🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
主頁
  • 整合
    • 代理商

開始使用 Mem0 和 Milvus

Open In Colab GitHub Repository

Mem0是適用於 AI 應用程式的智慧型記憶體層級,可保留使用者偏好並隨時間持續適應,提供個人化且有效率的互動。Mem0 是聊天機器人和 AI 驅動工具的理想選擇,可創造無縫、情境感知的體驗。

在本教程中,我們將介紹 Mem0 記憶體管理的基本操作 - 新增、擷取、更新、搜尋、刪除和追蹤記憶體歷史 - 使用Milvus,這是一個高效能的開放原始碼向量資料庫,提供高效的儲存和擷取功能。這個實作導覽將引導您完成基本的記憶體作業,以協助您使用 Mem0 和 Milvus 建立個人化的 AI 互動。

準備工作

下載所需的函式庫

$ pip install mem0ai pymilvus

如果您使用的是 Google Colab,為了啟用剛安裝的相依性,您可能需要重新啟動執行時(點選畫面頂端的「Runtime」功能表,並從下拉式功能表中選擇「Restart session」)。

使用 Milvus 設定 Mem0

在本範例中,我們將使用 OpenAI 作為 LLM。您應該準備api key OPENAI_API_KEY 作為環境變數。

import os

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

現在,我們可以設定 Mem0 使用 Milvus 作為向量資料庫。

# 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)
  • 如果你只需要一個本機向量資料庫來做小量資料或原型設計,將 uri 設定為一個本機檔案,例如./milvus.db ,是最方便的方法,因為它會自動利用Milvus Lite將所有資料儲存在這個檔案中。
  • 如果您有大規模的資料,例如超過一百萬個向量,您可以在Docker 或 Kubernetes 上架設效能更高的 Milvus 伺服器。在此設定中,請使用伺服器位址和連接埠作為您的 uri,例如http://localhost:19530 。如果您啟用 Milvus 的驗證功能,請使用「<your_username>:<your_password>」作為令牌,否則請勿設定令牌。
  • 如果您使用Zilliz Cloud(Milvus 的完全管理雲端服務),請調整uritoken ,它們對應於 Zilliz Cloud 中的Public Endpoint 和 API key

使用Mem0和Milvus管理用戶記憶體

新增記憶體

add 函式會將 Milvus 中的非結構化文字儲存為記憶體,並將其與特定使用者和可選元資料相關聯。

在這裡,我們要將 Alice 的記憶體「努力改善我的網球技術」,連同相關的元資料一起加入 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': []}

更新記憶體

我們可以使用add 函式的回傳值來擷取記憶體 ID,讓我們可以透過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!'}

取得使用者的所有記憶體

我們可以使用get_all 函式檢視所有已插入的記憶體,或依據 Milvus 中的user_id 篩選。

請注意,我們可以看到該記憶體已經從 「努力提高網球技術 」變為 「喜歡在週末打網球」。

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

檢視記憶體更新歷史

我們也可以透過history 功能,指定我們感興趣的記憶體_id,來檢視記憶體更新歷史。

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

搜尋記憶體

我們可以使用search 函式來尋找使用者最相關的記憶體。

讓我們先為 Alice 加入另一個記憶體。

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

現在,我們呼叫get_all ,指定 user_id,以驗證我們確實有 2 個使用者 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'}]}

我們現在可以透過提供queryuser_id 來執行search 。請注意,我們預設使用L2 公制進行相似性搜尋,因此score 越小代表相似性越高。

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

刪除記憶體

我們也可以透過提供對應的memory_iddelete 記憶體。

我們將刪除記憶體 "Likes to play tennis on weekends",因為它的memory_id 已經被擷取,並呼叫get_all 來驗證刪除是否成功。

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

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?