在现代应用中,存储和管理聊天记录是一个常见需求,尤其是在构建聊天机器人或对话系统时。MongoDB作为一个流行的NoSQL数据库,非常适合用于存储这些JSON-like文档结构。今天,我们将探讨如何使用MongoDBChatMessageHistory
类将聊天历史存储到MongoDB中,并结合OpenAI实现更智能的对话功能。
技术背景介绍
MongoDB是一种文档导向的NoSQL数据库,使用JSON-like的文档来存储数据,允许灵活的模式设计,非常适合非结构化的数据存储需求。结合langchain-mongodb
库,我们能方便地将聊天记录管理集成到MongoDB中。
核心原理解析
为了实现将聊天记录存储到MongoDB,我们需要提供以下基本信息:
- Session Id: 唯一标识聊天会话。
- Connection String: 用于连接MongoDB数据库的字符串。
此外,可以自定义存储的数据库名称和集合名称。MongoDBChatMessageHistory
类为我们提供了友好的接口,允许我们添加和检索用户及AI的消息。
代码实现演示(重点)
安装必要的库
首先,我们需要安装langchain-mongodb
库:
pip install -U langchain-mongodb
实现聊天记录存储
下面是一个简单的代码示例,它展示了如何将聊天记录保存到MongoDB数据库中:
from langchain_mongodb.chat_message_histories import MongoDBChatMessageHistory
# 配置MongoDB连接
chat_message_history = MongoDBChatMessageHistory(
session_id="test_session", # 唯一会话ID
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)
将聊天记录与OpenAI结合
为了增强对话的智能性,可以将存储的聊天记录与OpenAI的API结合,实现更自然的交互。
import os
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
# 确保 OpenAI API 密钥已设置
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)
应用场景分析
此实现非常适合需要持久化用户会话的智能客服系统、线上教学助手、交互式故事生成器等应用。
实践建议
- 安全性: 确保MongoDB连接字符串中的凭据安全存储。
- 性能: 监控数据库性能以确保在大数据量下仍然高效运转。
- 扩展性: 可以通过调整数据库和集合配置适应不同的业务需求。
如果遇到问题欢迎在评论区交流。
—END—