Source code for langchain_mongodb.agent_toolkit.toolkit

"""Toolkit for interacting with an MongoDB database."""

from typing import List

from langchain_core.caches import BaseCache as BaseCache
from langchain_core.callbacks import Callbacks as Callbacks
from langchain_core.language_models import BaseLanguageModel
from langchain_core.tools import BaseTool
from langchain_core.tools.base import BaseToolkit
from pydantic import ConfigDict, Field

from .database import MongoDBDatabase
from .tool import (
    InfoMongoDBDatabaseTool,
    ListMongoDBDatabaseTool,
    QueryMongoDBCheckerTool,
    QueryMongoDBDatabaseTool,
)


[docs] class MongoDBDatabaseToolkit(BaseToolkit): """MongoDBDatabaseToolkit for interacting with MongoDB databases. Setup: Install ``langchain-mongodb``. .. code-block:: bash pip install -U langchain-mongodb Key init args: db: MongoDBDatabase The MongoDB database. llm: BaseLanguageModel The language model (for use with QueryMongoDBCheckerTool) Instantiate: .. code-block:: python from langchain_mongodb.agent_toolkit.toolkit import MongoDBDatabaseToolkit from langchain_mongodb.agent_toolkit.database import MongoDBDatabase from langchain_openai import ChatOpenAI db = MongoDBDatabase.from_connection_string("mongodb://localhost:27017/chinook") llm = ChatOpenAI(temperature=0) toolkit = MongoDBDatabaseToolkit(db=db, llm=llm) Tools: .. code-block:: python toolkit.get_tools() Use within an agent: .. code-block:: python from langchain import hub from langgraph.prebuilt import create_react_agent from mongodb_agent_toolkit.prompt import MONGODB_AGENT_SYSTEM_PROMPT # Pull prompt (or define your own) system_message = MONGODB_AGENT_SYSTEM_PROMPT.format(top_k=5) # Create agent agent_executor = create_react_agent( llm, toolkit.get_tools(), state_modifier=system_message ) # Query agent example_query = "Which country's customers spent the most?" events = agent_executor.stream( {"messages": [("user", example_query)]}, stream_mode="values", ) for event in events: event["messages"][-1].pretty_print() """ # noqa: E501 db: MongoDBDatabase = Field(exclude=True) llm: BaseLanguageModel = Field(exclude=True) model_config = ConfigDict( arbitrary_types_allowed=True, )
[docs] def get_tools(self) -> List[BaseTool]: """Get the tools in the toolkit.""" list_mongodb_database_tool = ListMongoDBDatabaseTool(db=self.db) info_mongodb_database_tool_description = ( "Input to this tool is a comma-separated list of collections, output is the " "schema and sample rows for those collections. " "Be sure that the collectionss actually exist by calling " f"{list_mongodb_database_tool.name} first! " "Example Input: collection1, collection2, collection3" ) info_mongodb_database_tool = InfoMongoDBDatabaseTool( db=self.db, description=info_mongodb_database_tool_description ) query_mongodb_database_tool_description = ( "Input to this tool is a detailed and correct MongoDB query, output is a " "result from the database. If the query is not correct, an error message " "will be returned. If an error is returned, rewrite the query, check the " "query, and try again. If you encounter an issue with Unknown column " f"'xxxx' in 'field list', use {info_mongodb_database_tool.name} " "to query the correct collections fields." ) query_mongodb_database_tool = QueryMongoDBDatabaseTool( db=self.db, description=query_mongodb_database_tool_description ) query_mongodb_checker_tool_description = ( "Use this tool to double check if your query is correct before executing " "it. Always use this tool before executing a query with " f"{query_mongodb_database_tool.name}!" ) query_mongodb_checker_tool = QueryMongoDBCheckerTool( db=self.db, llm=self.llm, description=query_mongodb_checker_tool_description ) return [ query_mongodb_database_tool, info_mongodb_database_tool, list_mongodb_database_tool, query_mongodb_checker_tool, ]
[docs] def get_context(self) -> dict: """Return db context that you may want in agent prompt.""" return self.db.get_context()
MongoDBDatabaseToolkit.model_rebuild()