LgChuin MongoDB統合を使用して、自然言語MongoDBクエリを実行できます。このチュートリアルでは、 React Agentフレームワーク とMongoDB Agent ツールキーを使用して、自然言語を MQLに変換する基本的なAIエージェントを構築します。
このチュートリアルの実行可能なバージョンをPythonノートとして操作します。
前提条件
MongoDBクラスターとユーザーを作成します。
レストランのサンプルデータセットをMongoDBクラスターに追加します。
OpenAI APIキーを用意します。
必要な依存関係をインストールするには、以下を実行します。
pip install langchain-mongodb langchain-openai langgraph
概念として
このエージェントは、事前定義されたツールのセットを活用して、LVM によって定義されたステップ付きプランを実行します。 ユーザーがエージェントに プロンプトを送信すると、エージェントは、使用可能なツールとユーザーの結果の詳細を示すリクエストを LM に送信します。 その情報を使用して、LVM は、エージェントの利用可能なツールセットを活用してユーザーの結果を得る特定の一連のステップを生成します。
次に、エージェントはステップを実行して成功を確認するか、分析のために中間結果を LM に送り返して、必要に応じて更新されたステップを実行します。 そして最後に、システムの結果がユーザーに返されます。
エージェントをビルドする
例をローカルPythonファイルとして保存します。
以下をコピーして、natural_language_to_mql.py
というローカルファイルに貼り付けます。
キー ポイント
self.toolkit
は、エージェントが使用できるツールで、 MongoDB Tools のインスタンスです。self.agent
、エージェント自体は、React Agentフレームワークのインスタンスであり、self.toolkit
をパラメータとして受け取ります。
1 import os 2 from langchain_openai import ChatOpenAI 3 from langgraph.prebuilt import create_react_agent 4 from langchain_mongodb.agent_toolkit import ( 5 MONGODB_AGENT_SYSTEM_PROMPT, 6 MongoDBDatabase, 7 MongoDBDatabaseToolkit, 8 ) 9 10 MONGODB_URI = '<connection-string>' 11 DB_NAME = 'sample_restaurants' 12 NATURAL_LANGUAGE_QUERY = 'Find all restaurants that serve hamburgers.' 13 14 class NaturalLanguageToMQL: 15 def __init__(self): 16 self.llm = ChatOpenAI(model="gpt-4o-mini", timeout=60) 17 self.system_message = MONGODB_AGENT_SYSTEM_PROMPT.format(top_k=5) 18 self.db_wrapper = MongoDBDatabase.from_connection_string( 19 MONGODB_URI, 20 database=DB_NAME) 21 self.toolkit = MongoDBDatabaseToolkit(db=self.db_wrapper, llm=self.llm) 22 self.agent = create_react_agent( 23 self.llm, 24 self.toolkit.get_tools(), 25 state_modifier=self.system_message) 26 self.messages = [] 27 28 def convert_to_mql_and_execute_query(self, query): 29 # Start the agent with the agent.stream() method 30 events = self.agent.stream( 31 {"messages": [("user", query)]}, 32 stream_mode="values", 33 ) 34 # Add output (events) from the agent to the self.messages list 35 for event in events: 36 self.messages.extend(event["messages"]) 37 38 def print_results(self): 39 # Print the the end-user's expected output from 40 # the final message produced by the agent. 41 print(self.messages[-1].content) 42 43 def main(): 44 converter = NaturalLanguageToMQL() 45 converter.convert_to_mql_and_execute_query(NATURAL_LANGUAGE_QUERY) 46 converter.print_results() 47 48 if __name__ == '__main__': 49 main()
MongoDB接続文字列を追加します。
<connection-string>
を Atlas クラスターまたはローカル Atlas 配置の接続文字列に置き換えます。
接続stringには、次の形式を使用する必要があります。
mongodb+srv://<db_username>:<db_password>@<clusterName>.<hostname>.mongodb.net
詳しくは、ドライバーを使用してクラスターに接続する を参照してください。
接続stringには、次の形式を使用する必要があります。
mongodb://localhost:<port-number>/?directConnection=true
詳細については、「接続文字列 」を参照してください。
テスト クエリの実行
ローカルファイルを保存したディレクトリから、次のコマンドを実行します。結果は異なる場合があります。
python natural_language_to_mql.py
Here are some restaurants that serve hamburgers: 1. **Wendy's** - Address: 469 Flatbush Avenue, Brooklyn, NY 11225 - Borough: Brooklyn 2. **White Castle** - Address: 531 Myrtle Avenue, Brooklyn, NY 11205 - Borough: Brooklyn 3. **McDonald's** - Address: 75-50 101 Avenue, Queens, NY 11416 - Borough: Queens 4. **McDonald's** - Address: 943 Flatbush Avenue, Brooklyn, NY 11226 - Borough: Brooklyn 5. **McDonald's** - Address: 395 Flatbush Avenue Extension, Brooklyn, NY 11201 - Borough: Brooklyn Let me know if you'd like more details or additional results!