Docs 菜单
Docs 主页
/
Atlas
/ / /

使用 LangChain 和 LangGraph 通过自然语言查询MongoDB

您可以使用 LangChain MongoDB集成来运行自然语言MongoDB查询。在本教程中,您构建一个基本的AI代理,使用 React助手框架 MongoDB 助手工具包。 将自然语言转换为 MQL

使用本教程的可运行版本以作为 Python 笔记本。

  • 拥有MongoDB 集群和用户。

  • 餐厅示例数据集添加到MongoDB 集群。

  • 拥有 OpenAI API密钥。

  • 运行以下命令以安装所需的依赖项:

    pip install langchain-mongodb langchain-openai langgraph

该代理利用一设立预定义的工具来执行 LLM 定义的分步计划。当用户向代理提交提示时,代理会向 LLM 发送请求,其中详细说明其可用工具和用户期望的结果。根据这些信息,法学硕士生成一系列特定的步骤,利用代理的可用工具集来实现用户的预期结果。

然后,代理执行这些步骤并确认成功,或根据需要执行更新的步骤,将中间结果发送回 LLM 进行分析。最后,系统将结果返回给用户。

1

在终端中,填充并运行以下命令以设立所需的环境变量。

export OPENAI_API_KEY=<your-openai-api-key>
2

将以下内容复制并粘贴到名为 natural_language_to_mql.py 的本地文件中。

要点

  • self.toolkit, 是代理可以使用的工具,是MongoDB Toolkit。的一个实例。

  • self.agent, 即代理本身,是 React Agent框架 的一个实例,该框架将 self.toolkit 作为参数。

1import os
2from langchain_openai import ChatOpenAI
3from langgraph.prebuilt import create_react_agent
4from langchain_mongodb.agent_toolkit import (
5 MONGODB_AGENT_SYSTEM_PROMPT,
6 MongoDBDatabase,
7 MongoDBDatabaseToolkit,
8)
9
10MONGODB_URI = '<connection-string>'
11DB_NAME = 'sample_restaurants'
12NATURAL_LANGUAGE_QUERY = 'Find all restaurants that serve hamburgers.'
13
14class 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
43def main():
44 converter = NaturalLanguageToMQL()
45 converter.convert_to_mql_and_execute_query(NATURAL_LANGUAGE_QUERY)
46 converter.print_results()
47
48if __name__ == '__main__':
49 main()
3

<connection-string> 替换为您的 Atlas 集群或本地部署的连接字符串。

连接字符串应使用以下格式:

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

要学习;了解更多信息,请参阅通过驱动程序连接到集群。

连接字符串应使用以下格式:

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!

后退

GraphRAG

在此页面上