MongoDB 是一种跨平台的文档导向数据库程序,被归类为NoSQL数据库,它使用类似JSON的文档并具有可选的架构。MongoDB 由MongoDB公司开发,并根据服务器端公共许可证(SSPL)授权。这篇文章将讲解如何使用 MongoDBChatMessageHistory
类在 MongoDB 数据库中存储聊天消息历史记录。
技术背景介绍
在构建聊天应用或聊天机器人时,管理和存储聊天历史记录是一个关键需求。使用MongoDB可以方便地处理这种需求,特别是因为它支持灵活的文档结构。
核心原理解析
MongoDBChatMessageHistory
类允许您将聊天消息历史记录存储在 MongoDB 数据库中。我们需要提供会话ID和连接字符串来初始化这个类。此外,还可以自定义数据库名称和集合名称。
代码实现演示
安装依赖
首先,我们需要安装 langchain-mongodb
包:
pip install -U --quiet langchain-mongodb
配置环境
为了获得最佳的可观察性,建议设置 LangSmith
(可选):
# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
使用MongoDBChatMessageHistory
存储聊天记录
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", # 集合名称
)
# 添加用户和AI的消息
chat_message_history.add_user_message("Hello")
chat_message_history.add_ai_message("Hi")
# 查看存储的消息
chat_message_history.messages
# 输出: [HumanMessage(content='Hello'), AIMessage(content='Hi')]
与OpenAI结合
我们可以轻松地将这个消息历史类与 OpenAI 的聊天功能结合使用。为了实现这一点,我们需要安装 langchain_openai
并配置 API key。
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
import os
# 确保设置了OpenAI的API key
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}"),
]
)
# 将提示和OpenAI结合
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",
)
# 配置会话ID
config = {"configurable": {"session_id": "<SESSION_ID>"}}
# 测试调用
response = chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
print(response.content)
# 输出: 'Hi Bob! How can I assist you today?'
response = chain_with_history.invoke({"question": "Whats my name"}, config=config)
print(response.content)
# 输出: 'Your name is Bob. Is there anything else I can help you with, Bob?'
应用场景分析
- 聊天机器人:在构建支持多个用户会话的聊天机器人时,这种历史记录管理尤为重要。
- 客户支持系统:存储和管理客户的历史聊天记录,以便提供更好的服务。
- 数据分析:通过保存聊天历史记录,可以对用户交互进行数据分析,以改进系统。
实践建议
- 安全性:确保 MongoDB 连接字符串中的密码和其他敏感信息的安全。
- 性能优化:对聊天记录集合进行适当的索引以提高查询效率。
- 备份:定期备份 MongoDB 数据库,以防数据丢失。
如果遇到问题欢迎在评论区交流。