MongoDB
MongoDB
是一个源可用的跨平台文档导向数据库程序。被归类为 NoSQL 数据库程序,MongoDB
使用类似JSON
的文档,具有可选的模式。
MongoDB
由 MongoDB Inc. 开发,并根据服务器端公共许可证 (SSPL) 进行许可。 - 维基百科
本笔记本介绍如何使用 MongoDBChatMessageHistory
类在 Mongodb 数据库中存储聊天消息历史。
设置
集成存在于 langchain-mongodb
包中,因此我们需要安装它。
pip install -U --quiet langchain-mongodb
设置 LangSmith 以获得最佳的可观察性也是有帮助的(但不是必需的)。
# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
使用方法
要使用存储,您只需提供两个信息:
- 会话 ID - 会话的唯一标识符,例如用户名、电子邮件、聊天 ID 等。
- 连接字符串 - 指定数据库连接的字符串。它将传递给 MongoDB 的 create_engine 函数。
如果您想自定义聊天历史记录的存储位置,您还可以传递:
- database_name - 要使用的数据库名称
- collection_name - 在该数据库中使用的集合
from langchain_mongodb.chat_message_histories import MongoDBChatMessageHistory
chat_message_history = MongoDBChatMessageHistory(
session_id="test_session",
connection_string="mongodb://mongo_user:password123@mongo:27017",
database_name="my_db",
collection_name="chat_histories",
)
chat_message_history.add_user_message("Hello")
chat_message_history.add_ai_message("Hi")
chat_message_history.messages
[HumanMessage(content='Hello'), AIMessage(content='Hi')]
链接
我们可以轻松地将此消息历史类与 LCEL Runnables 结合起来。
为此,我们需要使用 OpenAI,因此需要安装它。您还需要将 OPENAI_API_KEY 环境变量设置为您的 OpenAI 密钥。
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
import os
assert os.environ[
"OPENAI_API_KEY"
], "Set the OPENAI_API_KEY environment variable with your OpenAI API key."
prompt = ChatPromptTemplate.from_messages(
[
("system", "You are a helpful assistant."),
MessagesPlaceholder(variable_name="history"),
("human", "{question}"),
]
)
chain = prompt | ChatOpenAI()
chain_with_history = RunnableWithMessageHistory(
chain,
lambda session_id: MongoDBChatMessageHistory(
session_id=session_id,
connection_string="mongodb://mongo_user:password123@mongo:27017",
database_name="my_db",
collection_name="chat_histories",
),
input_messages_key="question",
history_messages_key="history",
)
# This is where we configure the session id
config = {"configurable": {"session_id": "<SESSION_ID>"}}
chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
AIMessage(content='Hi Bob! How can I assist you today?')
chain_with_history.invoke({"question": "Whats my name"}, config=config)
AIMessage(content='Your name is Bob. Is there anything else I can help you with, Bob?')