MongoDB は、マルチモーダルAIエージェントを構築するためのオープンソースPythonフレームワークである Agnore と統合できます。 Agno は 2 つのMongoDB統合を提供します。
エージェントの知識ベースを保存し、 MongoDB ベクトル検索で取得するベクトルデータベース。
MongoDBコレクション内のエージェントセッション、ユーザー メモリ、メトリクス、および評価の実行を保持するセッションおよびメモリデータベース。
統合は単独で使用することも、 同じエージェントで両方を使用することもできます 。
はじめる
MongoDB を使用するように Agno を構成するチュートリアルを完了するには、 「 MongoDB Agno 統合を使い始める 」を参照してください。
インストール
Agnos にはPython v3.9 以降が必要です。最新の Agno およびPyMongoバージョンをインストールするには、次のコマンドを実行します。
pip install agno pymongo
このページの例では、OpenAI モデルを使用します。このモデルではデフォルトで を使用します。 OpenAIクライアントライブラリをインストールするには、次のコマンドを実行します。
pip install openai
Custom configurationこのページの の例では、投票AI埋め込みを使用しています。 MongoDB AIクライアントライブラリをインストールするには、次のコマンドを実行します。
pip install voyageai
環境変数
このページの例を実行中前に、次の環境変数を設定してください。
接続文字列: MongoDBデプロイの接続文字列に
MONGODB_URIを設定します。モデルAPIキー: モデル プロバイダーのAPIキーに
OPENAI_API_KEYまたはVOYAGE_API_KEYを設定します。
ベクトル データベース
MongoVectorDbクラスは、 MongoDB ベクトル検索を持つ Agnoベクトルデータベースインターフェースを実装します。ドキュメントに対してエージェントセマンティック検索を実行するには、このクラスのインスタンスを Agno Knowledgeオブジェクトの vector_db パラメーターに渡し、そのオブジェクトをエージェントの knowledge パラメーターに渡します。
重要
MongoDBクラス名
Agnore は両方のMongoDBクラス MongoDb という名前を付けますが、それらは異なるモジュールからインポートします。 agno.vectordb.mongodb からベクトルデータベースクラスをインポートし、agno.db.mongo からデータベースクラスをインポートします。名前の競合を避けるために、Agnore はベクトルデータベースのクラスも 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 辞書はプロバイダー固有のキーワード引数を埋め込み呼び出しに渡します。投票AIの場合、output_dimension は変数次元をサポートするモデルの返されるベクトルのサイズを制御します。
Knowledgeオブジェクトを作成すると、Agnore はコレクションがすでに存在するかどうかを確認します。存在しない場合、Agnore はコレクションとMongoDB ベクトル検索インデックスを作成します。コレクションが存在する場合、インデックスを個別に削除した場合でも、Agnore はインデックスが存在するかどうかを確認しません。
インデックスを作成した後、Agnore はインデックスがコレクションに表示されるまで待機します。ただし、インデックスのステータスは確認されないため、インデックスの作成が完了する間は、その直後に実行されるクエリでは結果が返されません。
MongoVectorDbクラスは次のパラメータを受け入れます。
Parameter | 必要性 | 説明 |
|---|---|---|
| 必須 | ドキュメントとその埋め込みを保存するコレクションの名前。 |
| 任意 | The connection string for your MongoDB deployment. Defaults to |
| 任意 | 既存の |
| 任意 | コレクションを保持するデータベースの名前。デフォルトは |
| 任意 | Agno がドキュメントとクエリを埋め込むために使用する埋め込みモデル。デフォルトは |
| 任意 | MongoDB ベクトル検索インデックスが使用する類似度関数。現在、デフォルト値の |
| 任意 | 取得戦略。 |
| 任意 | ハイブリッド検索がセマンティック結果に適用する重み。デフォルトは |
| 任意 | ハイブリッド検索がキーワード結果に適用する重み。デフォルトは |
| 任意 | ランク統合スコアを計算する前にハイブリッド検索が各ランクに追加する定数。デフォルトは |
| 任意 | コレクションのMongoDB ベクトル検索インデックスの名前。デフォルトは |
| 任意 | Agno がMongoDB ベクトル検索インデックスの作成後、インデックス名がコレクションの検索インデックスに表示されるまで待機するかどうか。このパラメータを正の数に設定すると待機するか、 |
| 任意 | Agno がドキュメントを挿入した後に待機する時間(秒単位)。デフォルトは |
| 任意 | ドライバー接続プール内の最大接続数。デフォルトは |
| 任意 | ドライバーがサポートされている書込み操作を再試行するかどうか。デフォルトは |
| 任意 | Agno がMongoDB ベクトル検索形式ではなくAzure Cosmos DB for MongoDB vCore形式でインデックスを作成するかどうか。デフォルトは |
| 任意 | ベクトルデータベースインスタンスの識別メタデータ。 |
ベクトルデータベース メソッド
Knowledgeクラスは、知識ベースにコンテンツを追加するとき、またはエージェントがそれを検索するときに次のメソッドを呼び出します。 Knowledgeオブジェクトの外部でドキュメントを管理する場合にのみ、これらのメソッドを直接呼び出します。
書込み操作または検索操作を1 人のユーザーのドキュメントに制限するには、操作メソッドに user_id 値を渡します。
方式 | 説明 |
|---|---|
|
|
| 各ドキュメントを |
|
|
| コレクションからすべてのドキュメントを削除しますが、コレクションとそのMongoDB ベクトル検索インデックス は保持されます。 |
| 指定された |
| 指定された |
| 指定されたキーと値のペアと一致する |
| コレクションとそのMongoDB ベクトル検索インデックスを削除します。 |
| コレクションが存在する場合は |
| コレクション内のドキュメントの数を返します。 |
Tip
非同期メソッド
前の表で説明されている次のメソッドには、それぞれに対応する非同期メソッドがあります。
search(): を使用するasync_search()insert(): Useasync_insert()upsert(): Useasync_upsert()drop(): Useasync_drop()exists(): Useasync_exists()
セッションとメモリのデータベース
agno.db.mongo モジュールの MongoDbクラスはA Servicesデータベースインターフェースを実装します。 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 は、そのコレクションに初めて書込む、構成する各コレクションを作成します。
MongoDbクラスは次のパラメータを受け入れます。
Parameter | 必要性 | 説明 |
|---|---|---|
| 条件付き | MongoDBデプロイの接続文字列。 |
| 条件付き | 既存の |
| 任意 | コレクションを保持するデータベースの名前。デフォルトは |
| 任意 | エージェント、チーム、および ワークフロー セッション を保存するコレクションの名前。デフォルトは |
| 任意 | 実行ごとに 1 つのドキュメントを保存するコレクションの名前。デフォルトは |
| 任意 | ユーザーのメモリを保存するコレクションの名前。デフォルトは |
| 任意 | 集計された使用メトリクスを保存するコレクションの名前。デフォルトは |
| 任意 | 評価の実行を保存するコレクションの名前。デフォルトは |
| 任意 | 知識コンテンツメタデータを保存するコレクションの名前。デフォルトは |
| 任意 | トレースと範囲を保存するコレクションの名前。デフォルトは |
| 任意 | スケジュールとスケジュールの実行を保存するコレクションの名前。デフォルトは |
| 任意 | 学習を保存するコレクションの名前。デフォルトは |
| 任意 | データベースインスタンスの識別子です。このパラメーターを指定しない場合、Agnore は接続文字列とデータベース名からそれを生成します。 |
エージェントが実行されると、Agnore は自動的にセッション、メモリ、メトリクスのコレクションから読み取りと書込みを行います。 Agno は各コレクションが初めて必要になったときに作成します。次のようなメソッドを MongoDbインスタンスで直接呼び出すこともできます。
upsert_session()およびget_sessions()の読み取りおよび書込みセッション。upsert_user_memory()は、単一のユーザーメモリを書込みます。get_metrics()集計された使用状況メトリクスを読み取ります。upsert_sessions()とupsert_memories()は、既存のセッション履歴をMongoDBに移行する場合など、 1 つの操作で多くのレコードを書込みます。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ベクトル検索の結果と結合します。
追加リソース
MongoDBで Agnos を使用する方法の詳細については、次のリソースを参照してください。
MongoDB Vector Store の参照を無視する
MongoDB Database の参照を無視する
Aggregation Query ドキュメント