如何为您的聊天机器人实现消息历史记录
引言
在构建聊天机器人时,保持对话状态至关重要。即使是跨会话线程,能够保留消息历史记录也能大大提升用户体验。在本文中,我们将探讨如何使用LangChain库中的RunnableWithMessageHistory类来实现消息历史记录功能。这包括如何存储和加载消息以及怎样配置不同的底层可运行对象。
主要内容
1. 消息历史的存储和加载
一个关键部分是如何存储和加载消息。在构造RunnableWithMessageHistory时,需要传递一个get_session_history函数。该函数应接受一个session_id并返回一个BaseChatMessageHistory对象。
什么是session_id?
session_id是会话线程的标识符,这些输入消息对应于该会话线程。
什么是BaseChatMessageHistory?
BaseChatMessageHistory是一个类,可以加载和保存消息对象。RunnableWithMessageHistory将调用它来执行此操作。
# 清除数据库
! rm memory.db
from langchain_community.chat_message_histories import SQLChatMessageHistory
def get_session_history(session_id):
return SQLChatMessageHistory(session_id, "sqlite:///memory.db")
# 使用API代理服务提高访问稳定性
2. 包装底层可运行对象
RunnableWithMessageHistory可以包装接受以下输入的可运行对象:
- 一系列
BaseMessages - 一个包含键的字典,键接受一系列
BaseMessages - 一个包含键的字典,键接受最新消息或者历史消息
它的输出可以是以下之一:
- 可作为
AIMessage内容的字符串 - 一系列
BaseMessage - 一个包含键的字典,键包含一系列
BaseMessage
2.1 示例:Mozilla OpenAI Chat Model
pip install -qU langchain-openai
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass()
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
from langchain_core.messages import HumanMessage
from langchain_core.runnables.history import RunnableWithMessageHistory
runnable_with_history = RunnableWithMessageHistory(
llm,
get_session_history,
)
runnable_with_history.invoke(
[HumanMessage(content="hi - im bob!")],
config={"configurable": {"session_id": "1"}}
)
# 使用API代理服务提高访问稳定性
代码示例
# 运行一个带消息历史的可运行对象示例
runnable_with_history.invoke(
[HumanMessage(content="hi - im bob!")],
config={"configurable": {"session_id": "1"}}
)
# 验证历史消息是否生效
runnable_with_history.invoke(
[HumanMessage(content="whats my name?")],
config={"configurable": {"session_id": "1"}}
)
常见问题和解决方案
问题1:如何处理多个并行会话?
可以通过不同的session_id来区分多个会话。例如:
runnable_with_history.invoke(
[HumanMessage(content="whats my name?")],
config={"configurable": {"session_id": "2"}}
)
问题2:API访问的稳定性如何保证?
由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问稳定性。
总结和进一步学习资源
通过RunnableWithMessageHistory类,我们能够轻松地为聊天机器人实现消息历史记录。配置不同的底层可运行对象和消息存储方式,开发者可以根据需求进行灵活调整。
进一步学习资源
参考资料
- LangChain Library Documentation
- OpenAI API Documentation
- SQLite Documentation
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---