Docs Menu
Docs Home
/
Atlas
/

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

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

はじめる

生成系AIのコンテキストでは、AIエージェントとは通常、LLMなどのAIモデルと事前定義されたツールのセットを組み合わせて、タスクを自律的または半自律的に完了できるシステムを指します。

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

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

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

認識

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

計画

エージェントが次に何をすべきかを決定する方法。このコンポーネントには通常、LLMとプロンプトが含まれ、フィードバックループとさまざまなプロンプトエンジニアリング技術、チェーン・オブ・ソートやreActなどを使用して、LLMが複雑なタスクを推論するのを支援します。

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

ツール

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

メモリ

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

注意

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

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

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

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

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

  • Atlas Vector Search:意味と類似性に基づいて関連性の高いコンテキストをベクトル検索で取得します。詳細については、Atlas Vector Searchの概要を参照してください。

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

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

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

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

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オブジェクトとして定義されます。そのため、エージェントは適切なパラメーターを使用してツールを呼び出すことができます。例えば、次の構文はエージェントが vector_search_tool を呼び出す方法を示しています。

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

Atlas をベクトルデータベースとして使用することで、エージェント型 RAG を実装する検索ツールを作成できます。エージェント型 RAG は、AI エージェントを介して検索および生成プロセスを動的に調整できるRAGの高度な形式です。

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

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

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

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

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

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

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

{
"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:永続性に使用できるチェックポインター

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

次のチュートリアルでは、エージェントフレームワークを使用せずに、Atlas を用いてエージェント RAG とメモリのための AI エージェントを構築する方法を示します。

このチュートリアルの実行可能なバージョンを Python エディタとして作業します。

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

  • Atlas アカウントで、MongoDB バージョン 6.0.11 または7.0.2 以降(RCs を含む)のクラスターを実行している。IP アドレスが Atlas プロジェクトのアクセスリストに含まれていることを確認してください。詳細については、クラスターの作成を参照してください。

  • Voyage AI API キー。

  • OpenAI API キー。

注意

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

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

  • 認識:テキスト入力。

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

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

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

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

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

    mkdir mongodb-ai-agent
    cd mongodb-ai-agent
    pip install --quiet --upgrade pymongo voyageai openai langchain langchain_mongodb langchain_community

    注意

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

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

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

2

プロジェクトに ingest-data.py という名前のファイルを作成します。このスクリプトは、voyage-3-large 埋め込みモデルを使用して、最近の MongoDB の収益報告書を含むサンプル PDF を Atlas のコレクションに取り込みます。

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

3

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

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

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

4

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

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

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

5

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

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

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

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

6

最後に、プロジェクトに「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

Tip

クラスター内のai_agent_dbデータベースに移動し、embeddingsまたはchat_historyコレクションを選択することで、Atlas UI で埋め込みとインタラクションを表示できます。

7

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

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

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

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

  • Atlas Search または Atlas ベクトル検索を使用して保存されたインタラクションのインデックスとクエリを行い、長期メモリとより高度なメモリ システムを実装します。

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

戻る

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

ルール バッジを取得する

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

詳細

項目一覧