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 を設定する必要があります。
キー | 必要性 | 説明 |
|---|---|---|
| 任意 | MongoDBデプロイの接続文字列。デフォルトは |
| 任意 | メモリコレクションを保持するデータベースの名前。デフォルトは |
| 任意 | メモリ ドキュメントを保存するコレクションの名前。デフォルトは |
| 任意 | 埋め込みベクトルの次元数。デフォルトは |
メソッド
このセクションでは、Memoryクラスによって提供されるメソッドについて説明します。各メソッドは、vector_store.config 辞書で構成したコレクションに対して動作します。
メソッドを特定のユーザー、エージェント、または ディスカッションの実行 にスコープを設定するには、user_id、agent_id、または run_id キーの少なくとも 1 つを含む filters 辞書を渡します。
add()
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'}]}
Parameter | 必要性 | 説明 |
|---|---|---|
| 必須 | 対話は に変わり、 |
| 条件付き | メモリが属するユーザーの識別子。 |
| 条件付き | メモリが属するエージェントの識別子。 |
| 条件付き | 実行された特定の通信またはセッションの識別子。 |
| 任意 | この呼び出しが書込むすべてのメモリドキュメントにアタッチするキーと値のペア。これらの値は、 |
| 任意 | Mem0 が結果からメモリを除外する日付。 |
| 任意 | Mem0 が LM を使用して保存する前に個別のファセットを抽出するかどうか。デフォルトは |
| 任意 | 保存するメモリの種類。 |
| 任意 | デフォルトのファセット抽出テンプレートを上書きするカスタム抽出プロンプト。 |
get()
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()
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 | 必要性 | 説明 |
|---|---|---|
| 必須 | Mem0 が検索埋め込みを生成するために使用する自然言語クエリ。 |
| 任意 | セマンティック クエリと並行して適用するフィルター条件。 |
| 任意 | 返される結果の最大数。デフォルトは |
| 任意 | 結果に表示されるためにメモリが満たす必要がある最小関連性スコア。デフォルトは |
| 任意 | Mem0 が結果を返す前に結果を再ランク付けするかどうか。デフォルトは |
| 任意 | 各結果に対して |
| 任意 | Mem0 がクエリ内の相対時間式を解決するために使用する日付。 |
| 任意 |
|
get_all()
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.
update()
update() メソッドは、既存の メモリドキュメントのテキストを置き換えます。 Mem0 は新しいテキストから埋め込みを再計算し、ドキュメントをその場で更新します。
次の例では、既存のメモリのテキストを置き換えます。
m.update(memory_id="<memory-id>", text="Alice relocated to Berlin in July 2025.")
delete()
delete() メソッドは、コレクションから単一のメモリドキュメントを削除します。
次の例では、 IDでメモリを削除します。
m.delete(memory_id="<memory-id>")
memory_id パラメータは必須であり、削除するメモリドキュメントの id 値を受け入れます。
delete_all()
delete_all() メソッドは、コレクションから特定のエンティティのすべてのメモリ ドキュメントを削除します。
次の例では、特定のユーザーのすべてのメモリを削除しています。
m.delete_all(user_id="alice")
履歴()
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 値を受け入れます。
delete()
reset() メソッドは、次のアクションを実行します。
MongoDBコレクションとそのMongoDB ベクトル検索およびMongoDB Search インデックスを削除します
ローカル履歴データベースをリセットします
コレクションとそのインデックスを最初から再作成します
このメソッドを使用してすべてのメモリをクリアし、delete_all() メソッドを使用して一度に 1 つのエンティティを削除します。
m.reset()
reset() はパラメータを受け入れず、Mem0 がこの Memoryインスタンスを通じて保存したすべてのメモリを削除します。
close()
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 を使用する方法の詳細については、以下を参照してください。