# 掌握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,记录并利用历史会话对话信息。
常见问题和解决方案
- 访问MongoDB连接缓慢或不稳定
- 解决方案:在某些网络受限地区,考虑使用API代理服务,以提高访问稳定性。
- OpenAI API密钥设置错误
- 解决方案:请检查环境变量是否正确设置,以及API密钥的权限和有效期。
总结和进一步学习资源
通过本文的介绍,您已经掌握了如何利用MongoDB来存储AI聊天记录,并实现基于上下文的对话能力。下列资源可帮助您进一步提升技能:
参考资料
- Wikipedia: MongoDB
- Langchain Documentation
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---