Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Query MongoDB con lenguaje natural usando LangChain y LangGraph

Puede utilizar la integración de LangChain con MongoDB para ejecutar consultas SQL de MongoDB en lenguaje natural. En este tutorial, compilarÔs un agente bÔsico de IA que convierte lenguaje natural a MQL utilizando el Framework ReAct Agent y el MongoDB Agent Toolkit.

Trabaja con una versión ejecutable de este tutorial como un cuaderno interactivo de Python.

  • Tener un clĆŗster y un usuario de MongoDB.

  • AƱade el dataset de muestra Restaurantes al clĆŗster de MongoDB.

  • Contar con una clave API de OpenAI.

  • Ejecute lo siguiente para instalar las dependencias necesarias:

    pip install langchain-mongodb langchain-openai langgraph

Este agente aprovecha un conjunto predefinido de herramientas con las cuales ejecuta un plan paso a paso definido por un LLM. Cuando un usuario envía un aviso al agente, el agente envía una solicitud al LLM que detalla las herramientas disponibles y el resultado deseado por el usuario. Con esa información, LLM genera una serie específica de pasos que aprovechan el conjunto de herramientas disponibles del agente para lograr el resultado deseado por el usuario.

A continuación, el agente ejecuta los pasos y confirma el éxito, o ejecuta pasos actualizados según sea necesario, enviando los resultados intermedios al LLM para su anÔlisis. Y finalmente, los resultados del sistema se devuelven al usuario.

1

En tu terminal, completa y ejecuta el siguiente comando para establecer la variable de entorno requerida.

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

Copia y pega lo siguiente en un archivo local llamado natural_language_to_mql.py.

Puntos clave

  • self.toolkit, las herramientas que el agente puede utilizar, es una instancia del MongoDB Toolkit.

  • self.agentel propio agente, es una instancia del ReAct Agent framework, que toma self.toolkit como parĆ”metro.

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

Se debe sustituir <connection-string> por la cadena de conexión del clúster Atlas o de la implementación local de Atlas.

Su cadena de conexión debe usar el siguiente formato:

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

Para obtener mÔs información, consulta Conectar a un clúster a través de bibliotecas de clientes.

Su cadena de conexión debe usar el siguiente formato:

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

Para obtener mÔs información, consulta Cadenas de conexión.

Desde el directorio en el que guardaste el archivo local, ejecuta el siguiente comando. Tus resultados pueden variar.

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!