AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

MongoDBをAgno フレームワークと統合する

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)

Knowledge オブジェクトを作成すると、Agno はコレクションが既に存在するかどうかを検証します。そうでない場合、Agno がコレクションと MongoDB ベクトル検索インデックスを作成します。コレクションが存在する場合、個別に削除した場合でも Agno はインデックスが存在するかどうかを確認しません。

インデックスを作成した後、Agno はインデックスがコレクションに表示されるまで待機します。ただし、インデックスのステータスを確認しません。そのため、インデックスの構築が完了するまでは、その直後に実行されるクエリは結果を返さない可能性があります。

Knowledgeクラスは、知識ベースにコンテンツを追加するとき、またはエージェントが知識ベースを検索するときに、次のメソッドを呼び出します。これらのメソッドを直接呼び出すのは、Knowledgeオブジェクトの外部でドキュメントをマネージドしている場合のみにしてください。

書き込み (write)または検索操作をユーザー1人のドキュメントに制限するには、user_id 値を操作メソッドに渡します。

方式
説明

search(query, limit, filters, min_score, user_id)

queryを埋め込み、最大limit件の一致するドキュメントを返します。search_typeをSearchType.hybridに設定すると、Agnoはキーワード検索も実行し、2つの結果セットをマージします。filters パラメーターは、メタデータフィルターの辞書を受け入れます。代わりにAgnoフィルター式のリストを渡すと、MongoDB統合がそれらをサポートしていないため、Agnoは警告をログに記録し、フィルターを適用しません。

insert(content_hash, documents, filters, user_id)

documents 内の各ドキュメントを埋め込み、そのドキュメントをコレクションに挿入します。Agno は、各ドキュメントの _id 値をドキュメントコンテンツのハッシュから導出します。

upsert(content_hash, documents, filters, user_id)

content_hashを共有するドキュメントを置き換え、documentsのドキュメントを挿入します。コンテンツが変更されたドキュメントを更新するには、このメソッドを使用します。

delete()

コレクションからすべてのドキュメントを削除しますが、コレクションとそのMongoDB ベクトル検索インデックスは保持されます。

delete_by_id(id)

指定された _id 値を持つドキュメントを削除します。

delete_by_name(name)

指定された name 値を持つドキュメントを削除します。

delete_by_metadata(metadata)

meta_dataフィールドが指定されたキーと値のペアと一致するドキュメントを削除します。

drop()

コレクションとMongoDB ベクトル検索インデックスを削除します。

exists()

コレクションが存在する場合は、True を返します。

get_count()

コレクション内のドキュメント数を返します。

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)

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 の使用の詳細については、次のリソースを参照してください。