MongoDB
MongoDB是一个源代码可用的跨平台面向文档的数据库程序。MongoDB被归类为 NoSQL 数据库程序,使用类似JSON的文档,并支持可选的模式。
MongoDB由 MongoDB 公司开发,并根据服务器端公共许可证(SSPL)进行授权。 - 维基百科
该笔记本介绍了如何使用 MongoDBChatMessageHistory 类将聊天消息历史存储在 Mongodb 数据库中。
设置
该集成位于 langchain-mongodb 包中,因此我们需要安装它。
pip install -U --quiet langchain-mongodb
这也是可选但有益的步骤,可以通过设置LangSmith来实现最佳级别的可观测性
# os.environ["LANGSMITH_TRACING"] = "true"
# os.environ["LANGSMITH_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")
API 参考:MongoDB 聊天消息历史
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?')