MongoDBは、マルチモーダルAIエージェントを構築するためのオープンソースのPythonフレームワークであるAgnoと統合できます。Agnoは、2つのMongoDB統合を提供します。
エージェントの知識ベースを保存し、MongoDBベクトル検索で検索するベクトルデータベース。
エージェントのセッション、ユーザーのメモリ、メトリクス、評価の実行をMongoDBのコレクションに永続化するセッションおよびメモリデータベース。
いずれかの統合を単独で使用することも、両方を同じエージェントで使用することもできます。
はじめる
AgnoでMongoDBを使用するように構成するチュートリアルを完了するには、「MongoDB Agno統合の開始」を参照してください。
インストール
Agno には Python v3.9 以降が必要です。最新の Agno と PyMongo バージョンをインストールするには、次のコマンドを実行します。
pip install agno pymongo
このページの例では、Agno がデフォルトで使用する OpenAI モデルを使用します。OpenAI クライアント ライブラリをインストールするには、次のコマンドを実行します。
pip install openai
このページのCustom configurationの例では、Voyage AIの埋め込みを使用しています。Voyage AIクライアントライブラリをインストールするには、次のコマンドを実行します。
pip install voyageai
環境変数
このページの例を実行する前に、以下の環境変数を設定してください。
接続文字列:
MONGODB_URIを MongoDB 配置の接続文字列に設定します。モデルAPIキー:
OPENAI_API_KEYまたはVOYAGE_API_KEYを、モデルプロバイダーのAPIキーに設定します。
ベクトルデータベース
MongoVectorDb クラスは、MongoDB ベクトル検索を使用して Agno ベクトルデータベースインターフェースを実装します。エージェントにドキュメントに対するセマンティック検索機能を提供するには、このクラスのインスタンスを Agno Knowledge オブジェクトの vector_db パラメータに渡し、そのオブジェクトをエージェントの knowledge パラメータに渡します。
重要
MongoDBクラス名
Agnoは両方のMongoDBクラスをMongoDbと命名していますが、それぞれ異なるモジュールからインポートしています。agno.vectordb.mongodbからベクトルデータベースクラスを、agno.db.mongoからデータベースクラスをインポートします。名前の衝突を避けるため、AgnoはベクトルデータベースクラスをMongoVectorDbとしてもエクスポートしています。このページの例では、そのエイリアスを使用しています。
Basic initialization タブを選択すると、最小構成の例が表示されます。または、Custom configuration タブを選択すると、カスタム設定で統合を構成する方法が表示されます。
ベクトルデータベースを初期化するには、埋め込みを保存するコレクションとMongoDB接続文字列を指定します。次の例では、知識ベースを作成し、ドキュメントを追加し、エージェントにデータへのアクセス権を付与します。
import os from agno.agent import Agent from agno.knowledge.knowledge import Knowledge from agno.vectordb.mongodb import MongoVectorDb vector_db = MongoVectorDb( collection_name="agent_knowledge", db_url=os.environ["MONGODB_URI"], database="agno", ) knowledge = Knowledge(vector_db=vector_db) knowledge.insert( name="Recipes", url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf", ) agent = Agent(knowledge=knowledge, search_knowledge=True)
次の例では、ハイブリッド検索を有効にし、OpenAIのデフォルトの代わりにVoyage AIを使用して埋め込みを生成し、MongoDB ベクトル検索インデックス名を指定します。
import os from agno.agent import Agent from agno.knowledge.embedder.voyageai import VoyageAIEmbedder from agno.knowledge.knowledge import Knowledge from agno.vectordb.mongodb import MongoVectorDb from agno.vectordb.search import SearchType embedder = VoyageAIEmbedder( id="voyage-4-large", dimensions=1024, api_key=os.environ["VOYAGE_API_KEY"], request_params={"output_dimension": 1024}, ) vector_db = MongoVectorDb( collection_name="agent_knowledge", db_url=os.environ["MONGODB_URI"], database="agno", embedder=embedder, search_type=SearchType.hybrid, hybrid_vector_weight=0.7, hybrid_keyword_weight=0.3, search_index_name="agno_vector_index", ) knowledge = Knowledge(vector_db=vector_db) agent = Agent(knowledge=knowledge, search_knowledge=True)
埋め込みモデルを指定した場合、AgnoはMongoDB ベクトル検索インデックスを作成する際に、その埋め込みモデルが生成する次元数を使用します。request_params辞書は、プロバイダー固有のキーワード引数を埋め込み呼び出しに渡します。Voyage AIの場合、output_dimensionは可変次元をサポートするモデルに対して返されるベクトルのサイズを制御します。
Knowledge オブジェクトを作成すると、Agno はコレクションが既に存在するかどうかを検証します。そうでない場合、Agno がコレクションと MongoDB ベクトル検索インデックスを作成します。コレクションが存在する場合、個別に削除した場合でも Agno はインデックスが存在するかどうかを確認しません。
インデックスを作成した後、Agno はインデックスがコレクションに表示されるまで待機します。ただし、インデックスのステータスを確認しません。そのため、インデックスの構築が完了するまでは、その直後に実行されるクエリは結果を返さない可能性があります。
ベクトルデータベースのメソッド
Knowledgeクラスは、知識ベースにコンテンツを追加するとき、またはエージェントが知識ベースを検索するときに、次のメソッドを呼び出します。これらのメソッドを直接呼び出すのは、Knowledgeオブジェクトの外部でドキュメントをマネージドしている場合のみにしてください。
書き込み (write)または検索操作をユーザー1人のドキュメントに制限するには、user_id 値を操作メソッドに渡します。
方式 | 説明 |
|---|---|
|
|
|
|
|
|
| コレクションからすべてのドキュメントを削除しますが、コレクションとそのMongoDB ベクトル検索インデックスは保持されます。 |
| 指定された |
| 指定された |
|
|
| コレクションとMongoDB ベクトル検索インデックスを削除します。 |
| コレクションが存在する場合は、 |
| コレクション内のドキュメント数を返します。 |
Tip
非同期メソッド
前の表で説明した各メソッドには、対応する非同期メソッドがあります。
search(): 使用するasync_search()insert(): 使用するasync_insert()upsert(): 使用するasync_upsert()drop(): 使用するasync_drop()exists(): 使用するasync_exists()
セッションおよびメモリデータベース
agno.db.mongo モジュールの MongoDb クラスは、Agno データベースインターフェースを実装しています。エージェントのセッション、ユーザーメモリ、メトリクス、評価実行を MongoDB に永続化するには、このクラスのインスタンスを Agent、Team、または Workflow オブジェクトの db パラメータに渡します。
Basic initialization タブを選択すると、最小構成の例が表示されます。または、Custom configuration タブを選択すると、カスタム設定で統合を構成する方法が表示されます。
データベースを初期化するには、お使いの MongoDB 接続文字列を指定します。次の例では、セッション履歴をMongoDBに保存し、その履歴をモデルコンテキストに含めるエージェントを作成します。
import os from agno.agent import Agent from agno.db.mongo import MongoDb db = MongoDb(db_url=os.environ["MONGODB_URI"]) agent = Agent(db=db, add_history_to_context=True)
次の例では、データベース名と、セッション、メモリ、メトリクスを保存するコレクションの名前を指定します。
import os from agno.agent import Agent from agno.db.mongo import MongoDb db = MongoDb( db_url=os.environ["MONGODB_URI"], db_name="agno_prod", session_collection="agent_sessions", memory_collection="agent_memories", metrics_collection="agent_metrics", ) agent = Agent(db=db, add_history_to_context=True)
Agnoは、設定したコレクションへの最初の書き込み (write)時に、各コレクションを作成します。
エージェントが実行する際、Agnoは本セクションで説明するセッション、メモリ、メトリクスのコレクションを自動的に読み取り、書き込み (write)を行います。Agnoは、各コレクションが必要になったときに作成します。以下のように、MongoDbインスタンスでメソッドを直接呼び出すこともできます。
upsert_session()およびget_sessions()の読み取り/書き込み (write)セッション。upsert_user_memory()単一のユーザーメモリに書き込み (write)ます。get_metrics()集計された使用メトリクスを読み取ります。upsert_sessions()また、既存のセッション履歴をupsert_memories()MongoDB に移行する場合など、1 回の操作で多くのレコードを書き込み (write) ます。close()クライアント接続を解放します。アプリケーションがシャットダウンするときに、このメソッドを呼び出します。
検索インデックス
Agno が初めてベクトルコレクションを作成するとき、コレクション上に MongoDB ベクトル検索インデックスも作成します。インデックス名は search_index_name パラメータの値であり、デフォルトは vector_index_1 です。このインデックスを手動で作成または検査することもできます。詳しく学ぶには、「MongoDB ベクトル検索 インデックスの作成」を参照してください。
このインデックスは以下の定義を使用します。ここで、numDimensions はエンベッダーが生成する次元数と一致し、similarity は distance_metric の値と一致します。
{ "fields": [ { "type": "vector", "path": "embedding", "numDimensions": 1536, "similarity": "cosine" }, { "type": "filter", "path": "user_id" } ] }
Agnoは、単一のエンドユーザーのドキュメントに検索範囲を絞り込めるように、user_idフィールドをフィルターフィールドとしてインデックス化します。
ハイブリッド検索には、MongoDB Searchインデックスは必要ありません。Agnoは、キーワード検索をcontentフィールドに対する正規式クエリとして実行し、その結果をMongoDB ベクトル検索の結果と相互ランク融合(Reciprocal Rank Fusion)を使用して結合します。
追加リソース
MongoDB での Agno の使用の詳細については、次のリソースを参照してください。
Agno MongoDB Vector Store リファレンス
Agno MongoDB データベース リファレンス
Agno Knowledge ドキュメント
Agno GitHub リポジトリ