milvus-logo
LFAI
フロントページへ
  • 統合
    • 代理店

Mem0とMilvusを使い始める

Open In Colab GitHub Repository

Mem0は、AIアプリケーションのためのインテリジェントなメモリーレイヤーで、ユーザーの好みを保持し、時間の経過とともに継続的に適応することで、パーソナライズされた効率的なインタラクションを実現するように設計されています。チャットボットやAI主導のツールに最適なMem0は、シームレスでコンテキストを意識したエクスペリエンスを実現します。

このチュートリアルでは、効率的な保存と検索を可能にする高性能なオープンソース・ベクター・データベースであるMilvusを使用して、Mem0に不可欠なメモリー管理操作(メモリー履歴の追加、検索、更新、検索、削除、追跡)について説明します。このハンズオン入門では、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-***********"

次に、Milvusをベクターストアとして使うようにMem0を設定します。

# 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 に設定するのが最も便利な方法です。
  • もし、100万ベクトルを超えるような大規模なデータがある場合は、DockerやKubernetes上に、よりパフォーマンスの高いMilvusサーバを構築することができます。このセットアップでは、サーバのアドレスとポートをURIとして使用してください(例:http://localhost:19530 )。Milvusで認証機能を有効にしている場合、トークンには"<your_username>:<your_password>"を使用します。
  • MilvusのフルマネージドクラウドサービスであるMilvus Cloudをご利用の場合は、Milvus CloudのPublic EndpointとAPI Keyに対応するuritoken を調整してください。

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

ユーザの全メモリの取得

Milvusでは、get_all 関数を使用して、挿入されたすべてのメモリを表示したり、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 、どのmemory_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 関数を使って、ユーザーに最も関連性の高いメモリーを検索することができます。

まずアリスのメモリーを追加します。

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

ここで、user_id を指定してget_all を呼び出し、Alice ユーザーのメモリーが2つあることを確認します。

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

search query 、 。デフォルトでは メトリックを類似性検索に使っているので、 が小さいほど類似性が高いことを意味することに注意してください。user_id 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_id を指定することで、delete メモリを削除することもできる。

memory_id はすでに検索されているので、"Likes to play tennis on weekends" というメモリーを削除し、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'}]}

翻訳DeepLogo

Try Managed Milvus for Free

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

Get Started
フィードバック

このページは役に立ちましたか ?