使用MongoDB存储聊天消息历史

使用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—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值