AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

MongoDB と Mem0 を連携する

MongoDB をMem0 と統合できます。これは、対話から一定の条件を抽出、保存、取得するAIエージェントと 支援のオープンソース メモリレイヤー。 MongoDB をベクトルストアとして使用するように Mem0 を構成すると、Mem0 はMongoDBコレクション内のエージェントメモリを永続化します。セマンティック検索にはMongoDB ベクトル検索 を使用し、全文キーワード検索にはMongoDB Search を使用します。

MongoDB を使用するように Mem0 を構成するチュートリアルを完了するには、MongoDB Mem0 統合の使い方 を参照してください。

Mem0 には、Python v3.10 以降および PyMongo v4.13.2 以降が必要です。最新の Mem0 と PyMongo のバージョンをインストールするには、次のコマンドを実行します。

pip install mem0ai pymongo

MongoDB を Mem0 vector 保存 (する) として使用するには、vector_store 辞書の provider キーを mongodb に設定する構成辞書を Memory.from_config() に渡します。

Basic initialization タブを選択して、MongoDB と Mem0 の基本的な構成例を表示します。または、Custom configuration タブを選択して、カスタム設定で統合を構成する方法を確認します。

ベクトルストアを初期化するには、MongoDB 接続文字列、データベース名、コレクション名、および埋め込みモデルが生成する次元数を指定します。次の例では、vector_store.config 辞書にこれらのキーを設定します。

import os
from mem0 import Memory
config = {
"vector_store": {
"provider": "mongodb",
"config": {
"mongo_uri": os.environ["MONGODB_URI"],
"db_name": "mem0_db",
"collection_name": "agent_memory",
"embedding_model_dims": 1536,
},
}
}
m = Memory.from_config(config)

Memory.from_config() メソッドを初めて呼び出すと、Mem0 は、ターゲット コレクションが存在しない場合はそれを作成し、コレクション上に MongoDB ベクトル検索インデックスと MongoDB Search インデックスを作成します。これらのインデックスは非同期的に構築されるため、インデックス構築が完了するまでは検索で空の結果が返される可能性があります。

このセクションでは、Memory クラスが提供するメソッドについて説明します。各メソッドは、vector_store.config ディクショナリで構成したコレクションで動作します。

特定のユーザー、エージェント、または会話の実行に対してメソッドの範囲を指定するには、user_id、agent_id、run_id キーのいずれか 1 つ以上を含む filters ディクショナリを渡します。

add() メソッドは会話から事実を抽出し、それらをメモリ ドキュメントとしてコレクションに書き込み (write)ます。エンティティに対して意味的に同等なメモリが既に存在する場合、Mem0 は重複ドキュメントを作成するのではなく、そのメモリを更新します。

次の例では、add() メソッドに会話を渡し、その結果として生成されるメモリを特定のユーザーにスコープします。

messages = [
{"role": "user", "content": "I'm moving to Berlin next month."},
{"role": "assistant", "content": "I'll remember that you're relocating to Berlin."},
]
result = m.add(messages, user_id="alice")
print(result)

get() メソッドは、ベクトル検索を実行せずに、ID 値によって 1 つのメモリ ドキュメントを検索します。

以下の例では、ID でメモリを直接検索します。

memory = m.get(memory_id="<memory-id>")
print(memory)

`memory_id` パラメータは必須です。また、検索するメモリ ドキュメントの `id` 値を受け入れます。その ID を持つメモリが存在しない場合、get() メソッドは None を返します。

search() メソッドは、MongoDB ベクトル検索インデックスに対してセマンティック検索を実行し、クエリ文字列に最も関連の高いメモリを返します。

次の例では、特定のユーザーのメモリーの中から、最も関連性の高い 5 件の結果を検索します。

results = m.search(
query="Where does Alice live?",
filters={"user_id": "alice"},
top_k=5,
)
for mem in results["results"]:
print(mem["memory"], "- score:", mem["score"])

get_all() メソッドは、セマンティック検索を実行せずに、指定されたエンティティに保存されているメモリドキュメントを返します。この方法を使用して、エンティティの全メモリ履歴を表示します。

次の例では、特定のユーザーのすべてのメモリを返して出力します。

all_memories = m.get_all(filters={"user_id": "alice"})
for mem in all_memories["results"]:
print(mem["id"], mem["memory"])

update() メソッドは、既存のメモリ ドキュメントのテキストを置き換えます。Mem0 は、新しいテキストから埋め込みを再計算し、ドキュメントをインプレースで更新します。

次の例では、既存のメモリのテキストを置き換えます。

m.update(memory_id="<memory-id>", text="Alice relocated to Berlin in July 2025.")

delete() メソッドは、コレクションから 1 つのメモリ ドキュメントを削除します。

次の例では、メモリを ID で削除します。

m.delete(memory_id="<memory-id>")

memory_id パラメータは必須であり、削除するメモリドキュメントの id 値を受け入れます。

delete_all() メソッドは、指定されたエンティティのすべてのメモリ ドキュメントをコレクションから削除します。

次の例では、特定のユーザーのすべてのメモリを削除しています。

m.delete_all(user_id="alice")

history() メソッドは、テキストの各バージョンとイベントの種類を含む単一メモリの編集履歴を返します。Mem0 は、この履歴を MongoDB ではなく、ローカルの SQLite データベースに保存します。Mem0 がそのデータベースを書き込み (write)場所を変更するには、構成辞書で history_db_path キーを設定します。

次の例では、メモリの編集履歴を検索して表示します。

history = m.history(memory_id="<memory-id>")
for entry in history:
print(entry["event"], entry["old_memory"], entry["new_memory"])

memory_id パラメータは必須であり、履歴を検索するメモリ ドキュメントの id 値を受け入れます。

reset() メソッドは、次のアクションを実行します。

  • MongoDB コレクション、およびその MongoDB ベクトル検索インデックスおよび MongoDB Search インデックスを削除します。

  • ローカル履歴データベースをリセットする

  • コレクションとそのインデックスをゼロから再作成します。

すべてのメモリーをクリアするには、delete_all() メソッドを使用していちえンティティずつ削除するよりも、このメソッドを使用します。

m.reset()

reset() パラメータを受け取りません。そして、この Memory インスタンスを介して Mem0 が保存したすべてのメモリを削除します。

close() メソッドは、Mem0 が履歴データベース用に使用するローカル SQLite 接続を解放します。このメソッドはユーザーの MongoDB 接続に影響しません。

m.close()

close() パラメータを受け入れません。Mem0 が、Memory インスタンスをコンテキスト マネージャーとして使用する場合、自動的に呼び出します。

Mem0 は初めて接続するときにコレクションに次のインデックスを作成します。これらのインデックスを手動で作成や検査することもできます。詳細については、 「 MongoDB ベクトル検索インデックスの作成」 を参照してください。

MongoDB ベクトル検索インデックスは <collectionName>_vector_index という名前です。<collectionName> はメモリ ドキュメントを保存するコレクションの名前です。インデックスは次の定義を使用します。

{
"fields": [
{
"type": "vector",
"path": "embedding",
"numDimensions": 1536,
"similarity": "cosine"
}
]
}

MongoDB Search 検索インデックスは <collection-name>_text_search_index という名前で、次の定義を使用します。

{
"mappings": {
"dynamic": false,
"fields": {
"payload": {
"type": "document",
"fields": {
"data": { "type": "string" },
"text_lemmatized": { "type": "string" }
}
}
}
}
}

Mem0 は MongoDB Search インデックスを使用してキーワード検索を実行し、search() からの意味的な結果を補完します。インデックスが存在しない場合、Mem0 は警告をログし、意味的な結果のみを返します。

MongoDB で Mem0 を使用する方法の詳細を学ぶには、以下を参照してください。