使用MongoDB存储聊天消息历史
MongoDB 是一个跨平台的文档导向数据库程序,属于 NoSQL 数据库类别。它使用类似 JSON 的文档和可选的 schemas。MongoDB 由 MongoDB Inc. 开发,并以 Server Side Public License (SSPL) 许可证发布。
在本文中,我们将讨论如何使用 MongoDBChatMessageHistory
类将聊天消息历史存储到 MongoDB 数据库中。
技术背景介绍
对于许多现代应用来说,存储用户聊天记录是一个基本需求。使用 MongoDB 可以为这些数据提供灵活的存储解决方案,因为它支持多种数据类型和可以扩展的架构。
核心原理解析
MongoDBChatMessageHistory
类允许开发者使用 MongoDB 存储和检索聊天消息。它主要需要两个输入:会话ID(session ID)和数据库连接字符串(connection string)。
此外,开发者可以选择指定数据库名称和集合名称,以自定义存储位置。
代码实现演示(重点)
首先,我们需要安装 langchain-mongodb
包:
pip install -U --quiet langchain-mongodb
然后,我们可以使用以下代码来配置并使用 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", # MongoDB连接
database_name="my_db", # 数据库名称
collection_name="chat_histories" # 集合名称
)
# 添加用户消息和AI消息
chat_message_history.add_user_message("Hello")
chat_message_history.add_ai_message("Hi")
# 查看存储的消息
print(chat_message_history.messages)
# Output: [HumanMessage(content='Hello'), AIMessage(content='Hi')]
应用场景分析
这种消息存储方式适用于需要持久化聊天记录的应用,例如客服系统、在线聊天应用和交互式助理等。这种方法确保聊天历史可以被检索和分析,用于改善用户体验或进行数据研究。
实践建议
- 确保你的 MongoDB 实例是安全配置的,因为聊天数据可能包含敏感信息。
- 定期备份数据库,以防数据丢失。
- 使用环境变量存储数据库连接凭证,以增强安全性。
如果你想使用链式调用,将 MongoDBChatMessageHistory
与其他工具结合,例如 LCEL Runnables,以下是代码示例:
import os
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
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",
)
# 配置会话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?'
这种方法不仅能保存聊天记录,还能利用 OpenAI 提供的强大功能进行对话。
如果遇到问题欢迎在评论区交流。
—END—