mirror of
https://github.com/hwchase17/langchain.git
synced 2025-06-29 18:08:36 +00:00
docs: Updated MongoDB Chat history example notebook to use LCEL format. (#15750)
- **Description:** Updated the MongoDB example integration notebook to latest standards - **Issue:** [15664](https://github.com/langchain-ai/langchain/issues/15664) - **Dependencies:** None - **Twitter handle:** @davedecaprio --------- Co-authored-by: Harrison Chase <hw.chase.17@gmail.com>
This commit is contained in:
parent
5c73fd5bba
commit
ec9642d667
@ -11,7 +11,7 @@
|
|||||||
">\n",
|
">\n",
|
||||||
">`MongoDB` is developed by MongoDB Inc. and licensed under the Server Side Public License (SSPL). - [Wikipedia](https://en.wikipedia.org/wiki/MongoDB)\n",
|
">`MongoDB` is developed by MongoDB Inc. and licensed under the Server Side Public License (SSPL). - [Wikipedia](https://en.wikipedia.org/wiki/MongoDB)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"This notebook goes over how to use Mongodb to store chat message history.\n"
|
"This notebook goes over how to use the `MongoDBChatMessageHistory` class to store chat message history in a Mongodb database.\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -19,76 +19,230 @@
|
|||||||
"id": "2d6ed3c8-b70a-498c-bc9e-41b91797d3b7",
|
"id": "2d6ed3c8-b70a-498c-bc9e-41b91797d3b7",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"## Setting up"
|
"## Setup\n",
|
||||||
|
"\n",
|
||||||
|
"The integration lives in the `langchain-community` package, so we need to install that. We also need to install the `pymongo` package.\n",
|
||||||
|
"\n",
|
||||||
|
"```bash\n",
|
||||||
|
"pip install -U --quiet langchain-community pymongo\n",
|
||||||
|
"```"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "09c33ad3-9ab1-48b5-bead-9a44f3d86eeb",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"It's also helpful (but not needed) to set up [LangSmith](https://smith.langchain.com/) for best-in-class observability"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "5a7f3b3f-d9b8-4577-a7ef-bdd8ecaedb70",
|
"id": "0976204d-c681-4288-bfe5-a550e0340f35",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"%pip install --upgrade --quiet pymongo"
|
"# os.environ[\"LANGCHAIN_TRACING_V2\"] = \"true\"\n",
|
||||||
|
"# os.environ[\"LANGCHAIN_API_KEY\"] = getpass.getpass()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "71a0a5aa-8f12-462a-bcd0-c611d76566f8",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Usage\n",
|
||||||
|
"\n",
|
||||||
|
"To use the storage you need to provide only 2 things:\n",
|
||||||
|
"\n",
|
||||||
|
"1. Session Id - a unique identifier of the session, like user name, email, chat id etc.\n",
|
||||||
|
"2. Connection string - a string that specifies the database connection. It will be passed to MongoDB create_engine function.\n",
|
||||||
|
"\n",
|
||||||
|
"If you want to customize where the chat histories go, you can also pass:\n",
|
||||||
|
"1. *database_name* - name of the database to use\n",
|
||||||
|
"1. *collection_name* - collection to use within that database"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 3,
|
"execution_count": 3,
|
||||||
"id": "47a601d2",
|
"id": "0179847d-76b6-43bc-b15c-7fecfcb27ac7",
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"ExecuteTime": {
|
||||||
|
"end_time": "2023-08-28T10:04:38.077748Z",
|
||||||
|
"start_time": "2023-08-28T10:04:36.105894Z"
|
||||||
|
},
|
||||||
|
"collapsed": false,
|
||||||
|
"jupyter": {
|
||||||
|
"outputs_hidden": false
|
||||||
|
}
|
||||||
|
},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
"# Provide the connection string to connect to the MongoDB database\n",
|
"from langchain_community.chat_message_histories import MongoDBChatMessageHistory\n",
|
||||||
"connection_string = \"mongodb://mongo_user:password123@mongo:27017\""
|
"\n",
|
||||||
]
|
"chat_message_history = MongoDBChatMessageHistory(\n",
|
||||||
},
|
" session_id=\"test_session\",\n",
|
||||||
{
|
" connection_string=\"mongodb://mongo_user:password123@mongo:27017\",\n",
|
||||||
"cell_type": "markdown",
|
" database_name=\"my_db\",\n",
|
||||||
"id": "a8e63850-3e14-46fe-a59e-be6d6bf8fe61",
|
" collection_name=\"chat_histories\",\n",
|
||||||
"metadata": {},
|
")\n",
|
||||||
"source": [
|
"\n",
|
||||||
"## Example"
|
"chat_message_history.add_user_message(\"Hello\")\n",
|
||||||
|
"chat_message_history.add_ai_message(\"Hi\")"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 4,
|
"execution_count": 4,
|
||||||
"id": "d15e3302",
|
"id": "6e7b8653-a8d2-49a7-97ba-4296f7e717e9",
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"from langchain.memory import MongoDBChatMessageHistory\n",
|
|
||||||
"\n",
|
|
||||||
"message_history = MongoDBChatMessageHistory(\n",
|
|
||||||
" connection_string=connection_string, session_id=\"test-session\"\n",
|
|
||||||
")\n",
|
|
||||||
"\n",
|
|
||||||
"message_history.add_user_message(\"hi!\")\n",
|
|
||||||
"\n",
|
|
||||||
"message_history.add_ai_message(\"whats up?\")"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 5,
|
|
||||||
"id": "64fc465e",
|
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
"text/plain": [
|
"text/plain": [
|
||||||
"[HumanMessage(content='hi!', additional_kwargs={}, example=False),\n",
|
"[HumanMessage(content='Hello'), AIMessage(content='Hi')]"
|
||||||
" AIMessage(content='whats up?', additional_kwargs={}, example=False)]"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"execution_count": 5,
|
"execution_count": 4,
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"output_type": "execute_result"
|
"output_type": "execute_result"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"message_history.messages"
|
"chat_message_history.messages"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"id": "e352d786-0811-48ec-832a-9f1c0b70690e",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"## Chaining\n",
|
||||||
|
"\n",
|
||||||
|
"We can easily combine this message history class with [LCEL Runnables](/docs/expression_language/how_to/message_history)\n",
|
||||||
|
"\n",
|
||||||
|
"To do this we will want to use OpenAI, so we need to install that. You will also need to set the OPENAI_API_KEY environment variable to your OpenAI key.\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 5,
|
||||||
|
"id": "6558418b-0ece-4d01-9661-56d562d78f7a",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"from typing import Optional\n",
|
||||||
|
"\n",
|
||||||
|
"from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\n",
|
||||||
|
"from langchain_core.runnables.history import RunnableWithMessageHistory\n",
|
||||||
|
"from langchain_openai import ChatOpenAI"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 16,
|
||||||
|
"id": "86ddfd3f-e8cf-477a-a7fd-91be3b8aa928",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"import os\n",
|
||||||
|
"\n",
|
||||||
|
"assert os.environ[\n",
|
||||||
|
" \"OPENAI_API_KEY\"\n",
|
||||||
|
"], \"Set the OPENAI_API_KEY environment variable with your OpenAI API key.\""
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 10,
|
||||||
|
"id": "82149122-61d3-490d-9bdb-bb98606e8ba1",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"prompt = ChatPromptTemplate.from_messages(\n",
|
||||||
|
" [\n",
|
||||||
|
" (\"system\", \"You are a helpful assistant.\"),\n",
|
||||||
|
" MessagesPlaceholder(variable_name=\"history\"),\n",
|
||||||
|
" (\"human\", \"{question}\"),\n",
|
||||||
|
" ]\n",
|
||||||
|
")\n",
|
||||||
|
"\n",
|
||||||
|
"chain = prompt | ChatOpenAI()"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 11,
|
||||||
|
"id": "2df90853-b67c-490f-b7f8-b69d69270b9c",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"chain_with_history = RunnableWithMessageHistory(\n",
|
||||||
|
" chain,\n",
|
||||||
|
" lambda session_id: MongoDBChatMessageHistory(\n",
|
||||||
|
" session_id=\"test_session\",\n",
|
||||||
|
" connection_string=\"mongodb://mongo_user:password123@mongo:27017\",\n",
|
||||||
|
" database_name=\"my_db\",\n",
|
||||||
|
" collection_name=\"chat_histories\",\n",
|
||||||
|
" ),\n",
|
||||||
|
" input_messages_key=\"question\",\n",
|
||||||
|
" history_messages_key=\"history\",\n",
|
||||||
|
")"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 12,
|
||||||
|
"id": "0ce596b8-3b78-48fd-9f92-46dccbbfd58b",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"# This is where we configure the session id\n",
|
||||||
|
"config = {\"configurable\": {\"session_id\": \"<SESSION_ID>\"}}"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 13,
|
||||||
|
"id": "38e1423b-ba86-4496-9151-25932fab1a8b",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"AIMessage(content='Hi Bob! How can I assist you today?')"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 13,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"chain_with_history.invoke({\"question\": \"Hi! I'm bob\"}, config=config)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 14,
|
||||||
|
"id": "2ee4ee62-a216-4fb1-bf33-57476a84cf16",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"text/plain": [
|
||||||
|
"AIMessage(content='Your name is Bob. Is there anything else I can help you with, Bob?')"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"execution_count": 14,
|
||||||
|
"metadata": {},
|
||||||
|
"output_type": "execute_result"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"chain_with_history.invoke({\"question\": \"Whats my name\"}, config=config)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
Loading…
Reference in New Issue
Block a user