使用MongoDB存储聊天消息历史记录的实战指南

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?'

应用场景分析

  • 聊天机器人:在构建支持多个用户会话的聊天机器人时,这种历史记录管理尤为重要。
  • 客户支持系统:存储和管理客户的历史聊天记录,以便提供更好的服务。
  • 数据分析:通过保存聊天历史记录,可以对用户交互进行数据分析,以改进系统。

实践建议

  1. 安全性:确保 MongoDB 连接字符串中的密码和其他敏感信息的安全。
  2. 性能优化:对聊天记录集合进行适当的索引以提高查询效率。
  3. 备份:定期备份 MongoDB 数据库,以防数据丢失。

如果遇到问题欢迎在评论区交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值