Docs Menu
Docs Home
/ /

MongoDB を使用して AI エージェントをビルドする

MongoDB は、 AIエージェントを構築するためのいくつかの機能を提供します。ベクトルデータベースとドキュメントデータベースの両方として、 MongoDB はエージェント的 RG のさまざまな検索方法、また、短期間および長期のエージェントメモリのために同じデータベースにエージェントインタラクションを保存します。

はじめる

生成系AI の文脈において、AI エージェントとは、通常、AI モデルを組み合わせて、LLM などを用いながら、あらかじめ定義されたツール群を使ってタスクを自律的または半自律的に実行できるシステムを指します。

AI エージェントはツールを使用してコンテキストを収集し、外部システムとやり取りし、アクションを実行できます。エージェントは独自の実行フロー(プランニング)を定義し、前のインタラクションを記憶して応答(メモリ)を通知できます。したがって、AI エージェントは、推論、計画、意思決定を必要とする複雑なタスクに最適です。

MongoDBを使用した単一エージェント アーキテクチャを示す図
クリックして拡大します

AI エージェントには通常、以下のコンポーネントの組み合わせが含まれます。

認識

エージェントへの入力。テキスト入力は AI エージェントの最も一般的な知覚メカニズムですが、入力は音声、画像、またはマルチモーダル データであることもあります。

プランニング

エージェントが次に何をすべきかをどのように判断するか。このコンポーネントには通常、LLM やプロンプトが含まれ、フィードバック ループやさまざまなプロンプト エンジニアリング技術を用いて構成されます。たとえば、連鎖的思考や reAct などを活用し、LLM が複雑なタスクを論理的に処理できるように支援します。

AI エージェントは、意思決定者としての単一の LLM、複数のプロンプトを備えた LLM、連携して動作する複数の LLM、またはこれらのアプローチの任意の組み合わせで構成できます。

ツール

エージェントがタスクのコンテキストを収集する方法。ツールを使用することで、エージェントは外部システムとやり取りし、ベクトル検索、ウェブ検索、他のサービスからの API 呼び出しなどのアクションを実行できます。

メモリ

エージェントのやり取りを保存するシステムです。これにより、エージェントは過去の経験から学び、応答に役立てることができます。メモリは短期(現在のセッション用)または長期(セッション間で保持される)にすることができます。

注意

AI エージェントは設計パターン、機能、複雑さが異なります。他のエージェント アーキテクチャ(マルチエージェント システムを含む)について詳しくは、「エージェンティックデザインパターン」を参照してください。

MongoDB は、 AIエージェントを構築するための次のコンポーネントをサポートしています。

  • ツール: MongoDB の検索機能を活用して、エージェントが関連情報を検索し、エージェント型 RAG を実装するためのツールとして使用します。

  • メモリ: エージェントのインタラクションを短期および長期のメモリの両方の MongoDB コレクションに保存します。

標準のMongoDBクエリに加えて、 MongoDB はエージェントのツールとして実装できるいくつかの検索機能を提供します。

  • MongoDB ベクトル検索:ベクトル検索を実行して、セマンティック意味と類似性に基づいて関連するコンテキストを検索します。詳細については、MongoDB ベクトル検索 の概要 を参照してください。

  • MongoDB Search: キーワード一致と関連性スコアリングに基づいて関連コンテキストを取得するには、全文検索を実行します。詳しくは「 MongoDB Search の概要 」を参照してください。

  • ハイブリッド検索: MongoDB ベクトル検索とMongoDB Search を組み合わせて、両方のアプローチの長さを活用します。詳しくは、ハイブリッド検索の実行方法 を参照してください。

ツールは、手動で、またはツールの作成と呼び出しのための組み込みの抽象化を提供する LangChain や LangGraph などのフレームワークを使用して定義できます。

ツールは、エージェントが特定のタスクを実行するために呼び出すことができる関数として定義されています。例として、次の構文は、ベクトル検索クエリを実行するツールを定義する方法を示します。

async function vectorSearchTool(query) {
const pipeline = [
{
$vectorSearch: {
// Vector search query pipeline...
}
}
];
const results = await collection.aggregate(pipeline).toArray();
return results;
}
def vector_search_tool(query: str) -> str:
pipeline = [
{
"$vectorSearch": {
# Vector search query pipeline...
}
}
]
results = collection.aggregate(pipeline)
array_of_results = []
for doc in results:
array_of_results.append(doc)
return array_of_results

ツール呼び出しは、エージェントがツールを実行するために使用するものです。エージェント内でツール呼び出しを処理する方法を定義することも、フレームワークを使用してこれを処理することもできます。これらは通常、ツール名とツールに渡すその他の引数を含むJSONオブジェクトとして定義されるため、エージェントは適切なパラメーターを使用してツールを呼び出すことができます。例、次の構文は、エージェントがベクトル検索ツールを呼び出す方法を示しています。

{
"tool": "vector_search_tool",
"args": { "query": "What is MongoDB?" },
"id": "call_H5TttXb423JfoulF1qVfPN3m"
}

MongoDB をベクトルデータベースとして使用することで、 エージェント Atlas のサンプル データ セット を作成するための検索ツールを作成できます。これは、 AIエージェントを通じて検索および生成プロセスを動的に統合することができる RG の高度な形式です。

MongoDBを使用したエージェント的 RG アーキテクチャの図
クリックして拡大します

このアプローチにより、より複雑なワークフローとユーザー インタラクションが可能になります。例、セマンティック検索にはMongoDB ベクトル検索を使用し、全文検索にはMongoDB Search を使用するなど、タスクに基づいて最適な取得ツールを決定するようにAIエージェントを構成できます。また、エージェントの取得機能をさらにカスタマイズするために、さまざまなコレクションに対してさまざまな取得ツールを定義することもできます。

MongoDB はドキュメントデータベースでもあるため、 インタラクションをMongoDBコレクションに保存することでエージェントのメモリを実装できます。その後、エージェントは必要に応じてこのコレクションをクエリまたはアップデートできます。MongoDBでエージェントメモリを実装するにはいくつかの方法があります。

  • 短期間メモリを使用する場合は、インタラクションを保存するときにsession_id特定のフィールドを識別し、同じIDを持つインタラクションをクエリして、コンテキストとしてエージェントに渡すことができます。

  • 長期メモリの場合、LLM を使用して複数のインタラクションを処理し、ユーザーの好みや重要なコンテキストなどの関連情報を抽出し、その情報をエージェントが必要に応じてクエリできる別のコレクションに保存することができます。

  • チャット履歴をより効率的かつ複雑に取得できる堅牢なメモリ管理システムを構築するには、 MongoDB Search または MongoDB ベクトル検索 を活用して、セッション全体の重要なインタラクションを保存、インデックス、クエリを実行します。

短期メモリを保存するコレクション内のドキュメントは次のように表示される可能性があります。

{
"session_id": "123",
"user_id": "jane_doe",
"interactions":
[
{
"role": "user",
"content": "What is MongoDB?",
"timestamp": "2025-01-01T12:00:00Z"
},
{
"role": "assistant",
"content": "MongoDB is the world's leading modern database.",
"timestamp": "2025-01-01T12:00:05Z"
}
]
}

長期メモリを保存するコレクション内のドキュメントは次のように表示される可能性があります。

{
"user_id": "jane_doe",
"last_updated": "2025-05-22T09:15:00Z",
"preferences": {
"conversation_tone": "casual",
"custom_instructions": [
"I prefer concise answers."
],
},
"facts": [
{
"interests": ["AI", "MongoDB"],
}
]
}

次のフレームワークも、MongoDB のエージェントメモリに対する直接的な抽象化を提供します。

フレームワーク
主な機能

LgChuin

  • MongoDBChatMessageHistory: チャットメッセージ履歴コンポーネント

  • MongoDBAtlasSemanticCache:セマンティックキャッシュコンポーネント

詳細については、チュートリアルを参照してください。

LangGraph

  • MongoDBSaver: 永続化に使用できる短期間メモリ チェックポイント

  • MongoDBStore: MongoDBにメモリを保存するための長期ドキュメントストア( Python統合でのみ利用可能)

詳細については、LangGraph および LangGraph.js をご覧ください。

次のチュートリアルでは、エージェントフレームワークなしで、 MongoDBを使用してエージェント用 RAG とメモリ用にAIエージェントを構築する方法を説明します。


➤ このチュートリアルの言語を設定するには、 言語を選択 ドロップダウン メニューを使用します。


このチュートリアルの実行可能なバージョンをPythonノートとして操作します。

Atlas の サンプル データ セット からの映画データを含むコレクションを使用します。

  • 次のいずれかのMongoDBクラスター タイプ

    • MongoDB バージョン 6.0.11、7.0.2、またはそれ以降を実行している Atlas クラスター。IP アドレスが Atlas プロジェクトのアクセスリストに含まれていることを確認する。

    • Atlas CLI を使用して作成されたローカル Atlas 配置。詳細については、「Atlas 配置のローカル配置の作成」を参照してください。

    • Search とベクトル検索がインストールされたMongoDB Community または Enterprise クラスター。

  • Voyage AI API キー。

  • OpenAI API キー。

注意

このチュートリアルでは、Voyage AI と OpenAI のモデルを使用していますが、コードを変更して、任意のモデルを使用できます。

この AI エージェントを使用して、カスタムデータソースに関する質問に回答し、計算を実行できます。また、前のやり取りを記憶して、応答に反映させることもできます。次のコンポーネントを使用します。

  • 認識:テキスト入力。

  • 計画:タスクを推論するための LLM とさまざまなプロンプト。

  • ツール:ベクトル検索ツールと計算ツール。

  • メモリ:インタラクションを MongoDB コレクションに保存。

1
  1. プロジェクトを初期化し、依存関係をインストールします。

    新しいプロジェクトディレクトリを作成し、必要な依存関係をインストールします。

    mkdir mongodb-ai-agent
    cd mongodb-ai-agent
    npm init -y
    npm install --quiet dotenv mongodb voyageai openai langchain @langchain/community @langchain/core mathjs pdf-parse

    注意

    プロジェクトでは、次の構造を使用します。

    mongodb-ai-agent
    ├── .env
    ├── config.js
    ├── ingest-data.js
    ├── tools.js
    ├── memory.js
    ├── planning.js
    └── index.js
  2. 環境を構成します。

    プロジェクトに .env という名前の環境ファイルを作成します。このファイルには、エージェント、 MongoDB接続文字列、 MongoDBデータベースとコレクションの名前のAPIキーが含まれます。

2

プロジェクトに config.js という名前のファイルを作成します。このファイルは、環境変数を読み取り、アプリケーションをMongoDBデータベースや OpenAI などのサービスに接続します。

3

プロジェクトに ingest-data.js という名前のファイルを作成します。このスクリプトは、 埋め込みモデルを使用して、最近のMongoDB の収益レポートを含むサンプルPDF をMongoDBのコレクションに取り込みます。voyage-3-largeこのコードには、データがまだ存在しない場合にベクトル検索インデックスを作成する関数も含まれています。

詳細については、「取り込み」をご覧ください。

4

プロジェクトに tools.js という名前のファイルを作成します。このファイルは、エージェントが質問に答えるために使用できるツールを定義します。この例では、次のツールを定義します。

  • vectorSearchToolベクトル検索クエリを実行して、コレクションから関連するドキュメントを取得します。

  • calculatorTool: 基本的な数学操作に mathjs ライブラリを使用します。

5

プロジェクトに memory.js という名前のファイルを作成します。このファイルは、エージェントが対話を保存するために使用するシステムを定義します。この例では、次の関数を定義して短期メモリを実装します。

  • storeChatMessage:インタラクションに関する情報を MongoDB コレクションに保存します。

  • retrieveSessionHistorysession_idフィールドを使用して特定のセッションのすべてのインタラクションを取得するには。

6

プロジェクトに planning.js という名前のファイルを作成します。このファイルには、エージェントの実行フローを決定するためのさまざまなプロンプトと LLM 呼び出しが含まれます。この例では、次の関数を定義します。

  • openAIChatCompletion: 応答を生成するために OpenAI APIを呼び出すヘルパー関数。

  • toolSelector:LLMがタスクに適したツールを選択する方法を決定します。

  • generateAnswer: ツールを使用し、LLM を呼び出し、結果をプロセシングすることで、エージェントの実行フローを調整します。

  • getLLMResponse: LLM 応答生成用のヘルパー関数。

7

最後に、プロジェクトに「index.js」という名前のファイルを作成します。このファイルはエージェントを実行し、エージェントと交流できるようにします。

プロジェクトを保存し、次のコマンドを実行します。エージェントを実行する際には以下に従います。

  • まだ行っていない場合は、エージェントにサンプルデータを取り込むように指示します。

  • セッションIDを入力して、新しいセッションを開始するか、既存のセッションを続行してください。

  • 質問をしてください。エージェントは、ツール、以前の対話、計画フェーズで定義されたプロンプトに基づいて応答を生成します。

サンプルインタラクションについては、出力例を参照してください。

node index.js
Ingest sample data? (y/n): y
Chunked PDF into 100 documents.
Inserted documents: 100
Attempting to create/verify Vector Search Index...
New index named vector_index is building.
Polling to check if the index is ready. This may take up to a minute.
vector_index is ready for querying.
Enter a session ID: 123
Enter your query (or type 'quit' to exit): What was MongoDB's latest acquisition?
Tool selected: vector_search_tool
Answer:
MongoDB recently acquired Voyage AI, a pioneer in embedding and reranking models that power next-generation AI applications.
Enter your query (or type 'quit' to exit): What do they do?
Tool selected: vector_search_tool
Answer: Voyage AI is a company that specializes in
state-of-the-art embedding and reranking models designed to
power next-generation AI applications. These technologies help
organizations build more advanced and trustworthy AI
capabilities.
Enter your query (or type 'quit' to exit): What is 123+456?
Tool selected: calculator_tool
Answer:
579

Tip

8

基本的な AI エージェントが完成したので、次の方法で開発を続けることができます:

  • ベクトル検索ツールのパフォーマンスを向上させ、RAG パイプラインを微調整します

  • エージェントにハイブリッドまたは全文検索ツールなどを追加します。

  • より高度なプロンプトと呼び出す LLM を使用して計画フェーズを洗練させます。

  • MongoDB SearchMongoDB ベクトル検索を使用して、セッション間の重要なインタラクションを保存および検索することで、長期メモリおよびより高度なメモリ システムを実装します。

1
  1. プロジェクトを初期化し、依存関係をインストールします。

    新しいプロジェクトディレクトリを作成し、必要な依存関係をインストールします。

    mkdir mongodb-ai-agent
    cd mongodb-ai-agent
    pip install --quiet --upgrade pymongo voyageai openai langchain langchain-mongodb
    langchain-community python-dotenv

    注意

    プロジェクトでは、次の構造を使用します。

    mongodb-ai-agent
    ├── .env
    ├── config.py
    ├── ingest_data.py
    ├── tools.py
    ├── memory.py
    ├── planning.py
    ├── main.py
  2. 環境を構成します。

    プロジェクトに .env という名前の環境ファイルを作成します。このファイルには、エージェント、 MongoDB接続文字列、 MongoDBデータベースとコレクションの名前のAPIキーが含まれます。

2

プロジェクトに config.py という名前のファイルを作成します。このファイルは、環境変数を読み取り、アプリケーションをMongoDBデータベースや OpenAI などのサービスに接続します。

3

プロジェクトに ingest_data.py という名前のファイルを作成します。このスクリプトは、 埋め込みモデルを使用して、最近のMongoDB の収益レポートを含むサンプルPDF をMongoDBのコレクションに取り込みます。voyage-3-largeこのコードには、データがまだ存在しない場合にベクトル検索インデックスを作成する関数も含まれています。

詳細については、「取り込み」をご覧ください。

4

プロジェクトに tools.py という名前のファイルを作成します。このファイルは、エージェントが質問に答えるために使用できるツールを定義します。この例では、次のツールを定義します。

  • vector_search_toolベクトル検索クエリを実行して、コレクションから関連するドキュメントを取得します。

  • calculator_tool:基本的な数学操作に eval() 関数を使用します。

5

プロジェクトに memory.py という名前のファイルを作成します。このファイルは、エージェントが対話を保存するために使用するシステムを定義します。この例では、次の関数を定義して短期メモリを実装します。

  • store_chat_message:インタラクションに関する情報を MongoDB コレクションに保存します。

  • retrieve_session_historysession_idフィールドを使用して特定のセッションのすべてのインタラクションを取得するには。

6

プロジェクトに planning.py という名前のファイルを作成します。このファイルには、エージェントの実行フローを決定するためのさまざまなプロンプトと LLM 呼び出しが含まれます。この例では、次の関数を定義します。

  • tool_selector:LLMがタスクに適したツールを選択する方法を決定します。

  • generate_answer: ツールを使用し、LLM を呼び出し、結果をプロセシングすることで、エージェントの実行フローを調整します。

  • get_llm_response: LLM 応答生成用のヘルパー関数。

7

最後に、プロジェクトに「main.py」という名前のファイルを作成します。このファイルはエージェントを実行し、エージェントと交流できるようにします。

プロジェクトを保存し、次のコマンドを実行します。エージェントを実行する際には以下に従います。

  • まだ行っていない場合は、エージェントにサンプルデータを取り込むように指示します。

  • セッションIDを入力して、新しいセッションを開始するか、既存のセッションを続行してください。

  • 質問をしてください。エージェントは、ツール、以前の対話、計画フェーズで定義されたプロンプトに基づいて応答を生成します。

サンプルインタラクションについては、出力例を参照してください。

python main.py
Ingest sample data? (y/n): y
Successfully split PDF into 104 chunks.
Generating embeddings and ingesting documents...
Inserted 104 documents into the collection.
Search index 'vector_index' creation initiated.
Polling to check if the index is ready. This may take up to a minute.
vector_index is ready for querying.
Enter a session ID: 123
Enter your query (or type 'quit' to exit): What was MongoDB's latest acquisition?
Tool selected: vector_search_tool
Answer:
MongoDB's latest acquisition was Voyage AI.
Enter your query (or type 'quit' to exit): What do they do?
Tool selected: vector_search_tool
Answer:
Voyage AI is a company that specializes in state-of-the-art embedding and reranking models designed to power next-generation AI applications. These technologies help organizations build more advanced and trustworthy AI capabilities.
Enter your query (or type 'quit' to exit): What is 123+456?
Tool selected: calculator_tool
Answer:
579
8

基本的な AI エージェントが完成したので、次の方法で開発を続けることができます:

  • ベクトル検索ツールのパフォーマンスを向上させ、RAG パイプラインを微調整します

  • エージェントにハイブリッドまたは全文検索ツールなどを追加します。

  • より高度なプロンプトと呼び出す LLM を使用して計画フェーズを洗練させます。

  • MongoDB SearchMongoDB ベクトル検索を使用して、セッション間の重要なインタラクションを保存および検索することで、長期メモリおよびより高度なメモリ システムを実装します。

MongoDB を使用して AI エージェントを構築する詳細なチュートリアルについては、次の表を参照してください。

戻る

Playground のチャットボット デモ ビルダー

ルール バッジを取得する

「生成AI」を無料でマスターします。

詳細

項目一覧