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

MongoDB Agno Integrationを使い始める

MongoDB をAgnore と統合して、 AIエージェントの検索可能な知識ベースと永続的なチャット履歴を構成できます。このチュートリアルでは、知識検索とセッションストレージにMongoDBを使用するように Agnoエージェントを構成し、その構成を使用してクッキング 支援を構築する方法を説明します。具体的には、次のタスクを実行します。

  1. 環境を設定します。

  2. MongoDB をAgno 知識ベースとして設定します。

  3. ドキュメントからの質問に答え、対話内の以前の展開を覚えている支援を構築します。

  4. ファイルを実行し、出力を確認します。

Agnore は、マルチモーダルAIエージェントを構築するためのオープンソースのPythonフレームワークです。 Agnoエージェントは、オプションの 知識ベース やオプションのデータベースなどのモジュール型のコンポーネントで構成されており、これらは個別に構成され、同じAgent オブジェクトに渡されます。

MongoDB はこれらのコンポーネントのうち 2 つを提供しており、次のクラスをインポートすることで使用できます。

  1. MongoVectorDb クラス: Agno のベクトルデータベースインターフェースをMongoDB ベクトル検索と実装し、エージェントがMongoDBコレクションから関連するドキュメントを検索できるようにします

  2. MongoDb クラス: Agno のデータベースインターフェース、永続的なエージェントセッション、メモリ、およびメトリクスをMongoDBコレクション内のドキュメントとして実装します。

Tip

Agnore は両方のMongoDBクラスをMongoDb MongoVectorDbと名付けるため、衝突を避けるためにベクトルデータベースクラスを としてエクスポートします。詳細については、 「 MongoDBと Agno フレームワークの統合 」を参照してください。

このチュートリアルでは、両方のコンポーネントを使用し、それらのデータを同じMongoDBデプロイに保存します。

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

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

    • An Atlas cluster running MongoDB version 6.0.11, 7.0.2, or later. Ensure that your IP address is included in your Atlas project's access list.

    • A local Atlas deployment created using Python and Docker. Install atlas-local-lib-py (pip install atlas-local-lib-py) to programmatically create and manage local deployments. To learn more, see the atlas-local-lib-py repository.

    • A MongoDB Community cluster with Search and Vector Search installed.

  • OpenAI APIキー。API リクエストに使用できるクレジットがある OpenAI アカウントが必要です。OpenAI のアカウント登録の詳細については、OpenAI API のウェブサイトをご覧ください。

  • Python v3.9 以降。

1

ターミナルで次のコマンドを実行して、agno-mongodb-project という名前の新しいディレクトリを作成し、必要な依存関係をインストールします。

mkdir agno-mongodb-project
cd agno-mongodb-project
pip install agno pymongo openai python-dotenv pypdf
2

In your agno-mongodb-project directory, create a .env file and add the following code:

OPENAI_API_KEY="<openai-api-key>"
MONGODB_URI="<connection-string>"

<connection-string> を Atlas クラスターまたはローカル Atlas 配置の接続文字列に置き換えます。

接続stringには、次の形式を使用する必要があります。

mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net

詳細については、クライアント ライブラリを使用したクラスターへの接続 を参照してください。

接続stringには、次の形式を使用する必要があります。

mongodb://localhost:<port-number>/?directConnection=true

接続文字列」を参照してください。

3

In your agno-mongodb-project directory, create a file named main.py. Add the following code to this file to load your environment variables:

import os
from dotenv import load_dotenv
from agno.agent import Agent
from agno.db.mongo import MongoDb
from agno.knowledge.knowledge import Knowledge
from agno.models.openai import OpenAIChat
from agno.vectordb.mongodb import MongoVectorDb
load_dotenv()

後の手順では、このファイルにコードを追加して、知識ベースと支援を構築します。

このセクションでは、 MongoDB をAgno 知識ベースのベクトルストアとして構成し、そのデータにデータを保存し、そのセマンティック検索クエリーを実行します。

1

次のコードを追加して、知識ベース用のMongoDBベースのベクトルストアを構成します。

vector_db = MongoVectorDb(
collection_name="agent_knowledge",
db_url=os.environ["MONGODB_URI"],
database="agno",
)
knowledge = Knowledge(vector_db=vector_db)

上記のコードでは MongoVectorDbインスタンスが作成され、それが Knowledgeオブジェクトの vector_db パラメータに渡されます。 agent_knowledgeコレクション を初めて使用するため、Agno は vector_index_1 という名前のMongoDB ベクトル検索インデックスとともにコレクションを作成します。

インデックスの構築には約 1 分かかります。構築中、インデックスは最初の同期状態になります。構築が完了したら、コレクション内のデータのクエリを開始できます。

2

次のコードを main.pyファイルに追加して、タイのレシピを含む PDFファイルを知識ベースに読み込みます。

knowledge.insert(
name="Recipes",
url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf",
)

Agno はファイルをダウンロードし、それをチャンクに分割し、デフォルトのOpenAI 埋め込みを使用して各チャンクの埋め込みを生成し、その結果をコレクションに書込みます。

Tip

保存されたドキュメントを確認するには、agno.agent_knowledge Atlas UIで コレクションを参照してください。各ドキュメントには、レシピテキストのチャンクを持つcontent フィールドと、生成されたベクトルを含むembedding フィールドがあります。詳細については、「 コレクションの表示 」を参照してください。

3

次のコードを main.pyファイルに追加して、エージェントに接続する前に、知識ベースのベクトルデータベースを直接クエリします。この例では、ミラーリングに関する質問に最も関連する 3 つのチャンクを検索します。

results = vector_db.search(query="How do I make a green curry?", limit=3)
for doc in results:
print(f"[{doc.name}] {doc.content[:80]}")

結果には、クエリに最もセマンティックに関連するレシピ チャンクが、類似性スコアの順に含まれます。

このセクションでは、知識ベースとMongoDBデータベース を組み合わせて、完全な支援を構築します。エージェントは、質問に答えるために知識ベースから関連するドキュメントを検索し、 MongoDBに通信履歴を保持することで、以前のオンを参照できます。

1

次のコードを main.pyファイルに追加して、セッションストレージ用の MongoDbインスタンスを構成し、このセッション ストアと前のセクションで構成された知識ベースを使用するエージェントを作成します。

db = MongoDb(
db_url=os.environ["MONGODB_URI"],
db_name="agno",
)
agent = Agent(
model=OpenAIChat(id="gpt-4o"),
knowledge=knowledge,
db=db,
search_knowledge=True,
add_history_to_context=True,
num_history_runs=5,
instructions=[
"You are a helpful cooking assistant.",
"Answer questions using only the recipes in your knowledge base.",
"If the knowledge base does not contain a relevant answer, say so clearly.",
],
)
2

次のコードを main.pyファイルに追加して、エージェントに 2 つのメッセージを送信します。

SESSION_ID = "cooking-session-001"
# First turn
agent.print_response(
"My favorite Thai dish is massaman curry.",
session_id=SESSION_ID,
)
# Second turn
agent.print_response(
"How do I make my favorite dish?",
session_id=SESSION_ID,
)

エージェントは、展開ごとに 知識ベース から最も関連性の高いレシピ チャンクを検索します。どちらの呼び出しでも同じ session_id 値が使用されるため、Agnore は前の応答からデータも検索します。 Agnos は、agno_sessionsコレクションからセッションメタデータを取得し、agno_runsコレクションからメッセージ内容を取得します。 session_id を省略するか、2 回目の呼び出しで別の値を渡すと、Agnore は新しいセッションを開始し、エージェントは最初のタームのレコードを持ちません。

To run the main.py file, run the following command from your agno-mongodb-project directory:

python main.py

コマンドが正常に実行されると、出力は次のようになります。

INFO Connected to MongoDB successfully.
INFO Creating collection 'agent_knowledge'.
INFO Creating search index 'vector_index_1'.
INFO Search index 'vector_index_1' is ready.
INFO Search index 'vector_index_1' created successfully.
INFO Adding content from URL https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf
INFO Upserting 14 documents
# Output from the vector_db.search() call
[Recipes] INGREDIENTS (One serving) 150 grams chicken, cut into bite-size pieces 50 grams
[Recipes] Thai SELECT Exotic, Healthy, Delicious Dining-Thai Style Thai food has rapidly g
[Recipes] Directions: 1. Roughly pound the garlic with bird's eye chilies in a mortar. Add
# Output from the agent.print_response() calls
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ My favorite Thai dish is massaman curry. ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (gpt-4o) ────────────────────────────────────────────┓
┃ Great choice — I found a recipe in the knowledge base for ┃
┃ Massaman Gai (Massaman Curry with Chicken and Potatoes). ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ How do I make my favorite dish? ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (gpt-4o) ────────────────────────────────────────────┓
┃ Here's how to make Massaman Gai (Massaman Curry with Chicken ┃
┃ and Potatoes) from the knowledge base: ┃
┃ **Ingredients** ┃
┃ - 300 grams chicken rump ┃
┃ - 80 grams Massaman curry paste ┃
┃ - 100 grams coconut cream ┃
┃ - 300 grams coconut milk ┃
┃ - 250 grams chicken stock ┃
┃ - 50 grams roasted peanuts ┃
┃ - 200 grams potatoes, chopped into large chunks ┃
┃ - 100 grams onion, chopped into large chunks ┃
┃ ... ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

MongoVectorDbMongoDb完全なパラメータとメソッド参照を含む、 クラスと クラスの詳細については、 「 MongoDB をAgnore Framework と統合する 」を参照してください。

Agno がコレクションに作成するMongoDB ベクトル検索インデックスの詳細については、「 MongoDB ベクトル検索インデックスの作成 」を参照してください。