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

MongoDBとMem0 の統合

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

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

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

pip install mem0ai pymongo

MongoDB をMem0ベクトルストアとして使用するには、vector_store 辞書の provider キーを mongodb に設定する構成辞書を Memory.from_config() に渡します。

基本的なMongoDBと Mem0 の構成例を表示するには [Basic initialization]タブを選択し、カスタム設定との統合を構成する方法を確認するには [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)

構成辞書は llm キーと embedder キーも受け入れます。これらを使用すると、デフォルトのOpenAI モデルを Mem0 がサポートする任意のプロバイダーに置き換えることができます。次の例では、これらの任意キーを設定します。

import os
from mem0 import Memory
config = {
"llm": {
"provider": "openai",
"config": {
"model": "gpt-4o-mini",
"temperature": 0.1,
"max_tokens": 2000,
},
},
"embedder": {
"provider": "openai",
"config": {
"model": "text-embedding-3-small",
"embedding_dims": 1536,
},
},
"vector_store": {
"provider": "mongodb",
"config": {
"mongo_uri": os.environ["MONGODB_URI"],
"db_name": "mem0_db",
"collection_name": "agent_memory",
"embedding_model_dims": 1536,
},
},
"history_db_path": os.path.expanduser("~/.mem0/history.db"),
}
m = Memory.from_config(config)

vector_store.config 辞書内の embedding_model_dims キーの値は、構成された埋め込みが生成する次元数と一致する必要があります。

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

これらのキーを使用してベクトルストアを構成します。

provider キーを mongodb に設定すると、Mem0 は vector_store 辞書内にネストされた config 辞書からMongoDB設定を読み取ります。その辞書は、次のキーを受け入れます。各キーは任意であり、指定されたデフォルト値に戻りますが、ローカル以外の配置に接続するには mongo_uri を設定する必要があります。

キー
必要性
説明

mongo_uri

任意

MongoDBデプロイの接続文字列。デフォルトはmongodb://localhost:27017 です。接続文字列 の検索方法の詳細については、「 クライアント ライブラリ経由でクラスターに接続する 」を参照してください。

db_name

任意

メモリコレクションを保持するデータベースの名前。デフォルトは mem0_db です。 Mem0 は、データベースがまだ存在しない場合はそれを作成します。

collection_name

任意

メモリ ドキュメントを保存するコレクションの名前。デフォルトは mem0 です。 Mem0 は、コレクションがまだ存在しない場合はそれを作成します。

embedding_model_dims

任意

埋め込みベクトルの次元数。デフォルトは 1536 です。この値は、構成された埋め込みが生成する次元の数と一致する必要があります。

このセクションでは、Memoryクラスによって提供されるメソッドについて説明します。各メソッドは、vector_store.config 辞書で構成したコレクションに対して動作します。

メソッドを特定のユーザー、エージェント、または ディスカッションの実行 にスコープを設定するには、user_idagent_id、または run_id キーの少なくとも 1 つを含む filters 辞書を渡します。

add() メソッドは、やり取りから詳細を抽出し、メモリ ドキュメントとしてコレクションに書込みます。エンティティに対してセマンティック同等のメモリがすでに存在する場合、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)
{'results': [{'id': '...', 'memory': 'User is moving to Berlin around September 2026.', 'event': 'ADD'}]}

これらのパラメータを使用して、Mem0 がメモリを保存する方法を構成します。

Parameter
必要性
説明

messages

必須

対話は に変わり、{"role": ..., "content": ...} 辞書のリストまたは string として結果を抽出します。

user_id

条件付き

メモリが属するユーザーの識別子。 user_idagent_id、または run_id キーの少なくとも 1 つを指定する必要があります。

agent_id

条件付き

メモリが属するエージェントの識別子。 user_id または run_id の値を指定しない場合は必須です。

run_id

条件付き

実行された特定の通信またはセッションの識別子。 user_id または agent_id の値を指定しない場合は必須です。

metadata

任意

この呼び出しが書込むすべてのメモリドキュメントにアタッチするキーと値のペア。これらの値は、search() メソッドの filters パラメータを使用してクエリできます。

expiration_date

任意

Mem0 が結果からメモリを除外する日付。

infer

任意

Mem0 が LM を使用して保存する前に個別のファセットを抽出するかどうか。デフォルトは True です。 False の場合、Mem0 は未加工のメッセージ内容を保存します。

memory_type

任意

保存するメモリの種類。

prompt

任意

デフォルトのファセット抽出テンプレートを上書きするカスタム抽出プロンプト。

get() メソッドは、ベクトル検索を実行中ずに、 ID値で単一のメモリドキュメントを検索します。

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

memory = m.get(memory_id="<memory-id>")
print(memory)
{'id': '...', 'memory': 'User is moving to Berlin around September 2026.',
'hash': '...', 'metadata': None, 'score': None, 'created_at': '...',
'updated_at': '...', 'user_id': 'alice', 'attributed_to': 'user'}

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"])
User is moving to Berlin around September 2026. - score: 0.7043201923370361

これらのパラメータを使用して、検索クエリーを設定します。

Parameter
必要性
説明

query

必須

Mem0 が検索埋め込みを生成するために使用する自然言語クエリ。

filters

任意

セマンティック クエリと並行して適用するフィルター条件。 user_idagent_id、または run_id キーの少なくとも 1 つを含める必要があります。比較演算子、リスト演算子、string 演算子、および ANDORNOT 論理演算子をサポートします。

top_k

任意

返される結果の最大数。デフォルトは 20 です。

threshold

任意

結果に表示されるためにメモリが満たす必要がある最小関連性スコア。デフォルトは 0.1 です。

rerank

任意

Mem0 が結果を返す前に結果を再ランク付けするかどうか。デフォルトは False です。

explain

任意

各結果に対して score_details の内訳を含めるかどうか。デフォルトは False です。

reference_date

任意

Mem0 がクエリ内の相対時間式を解決するために使用する日付。

show_expired

任意

expiration_date が経過したメモリを含めるかどうか。デフォルトは False です。

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

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

all_memories = m.get_all(filters={"user_id": "alice"})
for mem in all_memories["results"]:
print(mem["id"], mem["memory"])
<id> User is moving to Berlin around September 2026.

これらのパラメータを使用して、Mem0 が返すメモリを構成します。

Parameter
必要性
説明

filters

任意

返すメモリを識別するフィルター条件。 user_idagent_id、または run_id の少なくとも 1 つを含める必要があります。

top_k

任意

返されるドキュメントの最大数。デフォルトは 20 です。

show_expired

任意

expiration_date が経過したメモリを含めるかどうか。デフォルトは False です。

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

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

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

これらのパラメーターを使用して更新を構成します。

Parameter
必要性
説明

memory_id

必須

更新するメモリドキュメントの id 値。

text

任意

メモリの置換テキスト。 Mem0 はこのテキストの新しい埋め込みを計算して保存します。

metadata

任意

メモリドキュメントの置換メタデータ。

expiration_date

任意

Mem0 が結果からメモリを除外する日付。

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

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

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

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

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

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

m.delete_all(user_id="alice")

これらのパラメータを使用して、Mem0 が削除するメモリを構成します。

Parameter
必要性
説明

user_id

任意

このユーザーのメモリをすべて削除します。 user_idagent_id、または run_id の少なくとも 1 つを指定する必要があります。

agent_id

任意

このエージェントのすべてのメモリを削除します。

run_id

任意

この実行またはセッションのすべてのメモリを削除します。

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

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

history = m.history(memory_id="<memory-id>")
for entry in history:
print(entry["event"], entry["old_memory"], entry["new_memory"])
ADD None User is moving to Berlin around September 2026.
UPDATE User is moving to Berlin around September 2026. Alice relocated to Berlin in July 2025.

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

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

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

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

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

このメソッドを使用してすべてのメモリをクリアし、delete_all() メソッドを使用して一度に 1 つのエンティティを削除します。

m.reset()

reset() はパラメータを受け入れず、Mem0 がこの Memoryインスタンスを通じて保存したすべてのメモリを削除します。

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

m.close()

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

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 を使用する方法の詳細については、以下を参照してください。