[掌握MongoDB与AI聊天历史存储:打造智能对话记忆]

366 阅读3分钟
# 掌握MongoDB与AI聊天历史存储:打造智能对话记忆

在人工智能迅速发展的时代,如何让AI对话系统记住以前的对话内容,变得尤为重要。这篇文章将带您深入了解如何使用`MongoDB``Langchain`结合,储存AI聊天记录,从而让您的AI助手具备上下文记忆能力。

## 引言

与传统的关系型数据库不同,MongoDB作为一种NoSQL数据库,使用类似JSON的文档存储数据,为非结构化数据的存储和检索提供了极大的灵活性。本文将介绍如何利用`MongoDBChatMessageHistory`类在MongoDB中存储聊天记录,并结合OpenAI的API,提高对话系统的智能性。

## 主要内容

### 1. 设置环境

要开始使用,首先需要安装`langchain-mongodb`库:

```shell
pip install -U --quiet langchain-mongodb

为了观察AI行为,我们可以选择设置LangSmith(可选):

# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()

2. 使用MongoDBChatMessageHistory

配置存储

您需要提供两个必要的配置:

  • Session Id:会话的唯一标识符,如用户名、电子邮件、聊天ID等。
  • Connection String:数据库连接字符串。

您还可以自定义数据库名称和集合名称:

from langchain_mongodb.chat_message_histories import MongoDBChatMessageHistory

chat_message_history = MongoDBChatMessageHistory(
    session_id="test_session",
    connection_string="mongodb://mongo_user:password123@mongo:27017",  # 使用API代理服务提高访问稳定性
    database_name="my_db",
    collection_name="chat_histories",
)

chat_message_history.add_user_message("Hello")
chat_message_history.add_ai_message("Hi")

以上代码创建了一个新的聊天记录,并记录了用户与AI的交互。

3. 创造交互和记忆结合

要与OpenAI结合使用,我们将使用RunnableWithMessageHistory类。在此之前,确保设置OPENAI_API_KEY环境变量以便访问OpenAI API。

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
import os

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",  # 使用API代理服务提高访问稳定性
        database_name="my_db",
        collection_name="chat_histories",
    ),
    input_messages_key="question",
    history_messages_key="history",
)

# This is where we configure the session id
config = {"configurable": {"session_id": "<SESSION_ID>"}}

chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
chain_with_history.invoke({"question": "Whats my name"}, config=config)

以上代码示例展示了如何结合OpenAI与MongoDB,记录并利用历史会话对话信息。

常见问题和解决方案

  1. 访问MongoDB连接缓慢或不稳定
    • 解决方案:在某些网络受限地区,考虑使用API代理服务,以提高访问稳定性。
  2. OpenAI API密钥设置错误
    • 解决方案:请检查环境变量是否正确设置,以及API密钥的权限和有效期。

总结和进一步学习资源

通过本文的介绍,您已经掌握了如何利用MongoDB来存储AI聊天记录,并实现基于上下文的对话能力。下列资源可帮助您进一步提升技能:

参考资料

  • Wikipedia: MongoDB
  • Langchain Documentation

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---