MongoDB をAgnore と統合して、 AIエージェントの検索可能な知識ベースと永続的なチャット履歴を構成できます。このチュートリアルでは、知識検索とセッションストレージにMongoDBを使用するように Agnoエージェントを構成し、その構成を使用してクッキング 支援を構築する方法を説明します。具体的には、次のタスクを実行します。
環境を設定します。
MongoDB をAgno 知識ベースとして設定します。
ドキュメントからの質問に答え、対話内の以前の展開を覚えている支援を構築します。
ファイルを実行し、出力を確認します。
バックグラウンド
Agnore は、マルチモーダルAIエージェントを構築するためのオープンソースのPythonフレームワークです。 Agnoエージェントは、オプションの 知識ベース やオプションのデータベースなどのモジュール型のコンポーネントで構成されており、これらは個別に構成され、同じAgent オブジェクトに渡されます。
MongoDB はこれらのコンポーネントのうち 2 つを提供しており、次のクラスをインポートすることで使用できます。
MongoVectorDbクラス: Agno のベクトルデータベースインターフェースをMongoDB ベクトル検索と実装し、エージェントがMongoDBコレクションから関連するドキュメントを検索できるようにします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 以降。
環境を設定する
環境変数を設定します。
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
「接続文字列」を参照してください。
プロジェクトファイルを作成します 。
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 知識ベースのベクトルストアとして構成し、そのデータにデータを保存し、そのセマンティック検索クエリーを実行します。
MongoDB をベクトルストアとして構成します。
次のコードを追加して、知識ベース用の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 分かかります。構築中、インデックスは最初の同期状態になります。構築が完了したら、コレクション内のデータのクエリを開始できます。
データをロードして保存します。
次のコードを 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 フィールドがあります。詳細については、「 コレクションの表示 」を参照してください。
セマンティック検索クエリーを実行します。
次のコードを 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に通信履歴を保持することで、以前のオンを参照できます。
支援を定義します。
次のコードを 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 ベクトル検索インデックスの作成 」を参照してください。