Docs Menu
Docs Home
/ /

LangChain 및 LangGraph를 사용하여 자연어로 MongoDB 쿼리하기

LangChain MongoDB 통합을 사용하여 언어 MongoDB 쿼리를 실행 수 있습니다. 이 튜토리얼에서는 React Agent 프레임워크 와MongoDBAgent 툴킷을 사용하여 언어 MQL 로 변환하는 기본 AI 에이전트 빌드 .

이 튜토리얼의 실행 가능한 버전을 Python 노트북으로 사용합니다.

  • MongoDB cluster 와 사용자가 있어야 합니다.

  • 레스토랑 샘플 데이터 세트를 MongoDB cluster 에 추가합니다.

  • OpenAI API 키가 있어야 합니다.

  • 다음을 실행하여 필수 종속성을 설치합니다.

    pip install langchain-mongodb langchain-openai langgraph

이 에이전트 LLM에서 정의한 단계별 계획을 실행하는 데 사용되는 사전 정의된 도구 설정하다 활용합니다. 사용자가 에이전트 에게 프롬프트를 제출하면 에이전트 사용 가능한 도구와 사용자가 원하는 결과를 자세히 설명하는 요청 LLM에 보냅니다. 이 정보를 바탕으로 LLM은 에이전트의 사용 가능한 도구 세트를 활용하여 사용자가 원하는 결과를 얻는 일련의 특정 단계를 생성합니다.

그런 다음 에이전트 단계를 실행하여 성공 확인하거나, 분석을 위해 중간 결과를 LLM으로 다시 전송하여 필요에 따라 업데이트된 단계를 실행합니다. 마지막으로 시스템 결과가 사용자에게 반환됩니다.

1

터미널에서 다음 명령을 입력하고 실행 필요한 환경 변수를 설정하다 .

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

다음을 복사하여 natural_language_to_mql.py라는 로컬 파일 에 붙여넣습니다.

요점

  • self.toolkit, 에이전트 사용할 수 있는 도구는 MongoDB 툴킷의 인스턴스 입니다.

  • self.agent에이전트 자체는 self.toolkit 매개변수로 사용하는 React Agent 프레임워크 의 인스턴스 입니다.

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 클러스터 또는 로컬 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

이 페이지의 내용