**如何为您的聊天机器人实现消息历史记录**

173 阅读3分钟

如何为您的聊天机器人实现消息历史记录

引言

在构建聊天机器人时,保持对话状态至关重要。即使是跨会话线程,能够保留消息历史记录也能大大提升用户体验。在本文中,我们将探讨如何使用LangChain库中的RunnableWithMessageHistory类来实现消息历史记录功能。这包括如何存储和加载消息以及怎样配置不同的底层可运行对象。

主要内容

1. 消息历史的存储和加载

一个关键部分是如何存储和加载消息。在构造RunnableWithMessageHistory时,需要传递一个get_session_history函数。该函数应接受一个session_id并返回一个BaseChatMessageHistory对象。

什么是session_id

session_id是会话线程的标识符,这些输入消息对应于该会话线程。

什么是BaseChatMessageHistory

BaseChatMessageHistory是一个类,可以加载和保存消息对象。RunnableWithMessageHistory将调用它来执行此操作。

# 清除数据库
! rm memory.db

from langchain_community.chat_message_histories import SQLChatMessageHistory

def get_session_history(session_id):
    return SQLChatMessageHistory(session_id, "sqlite:///memory.db")  
# 使用API代理服务提高访问稳定性

2. 包装底层可运行对象

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

  • 一系列BaseMessages
  • 一个包含键的字典,键接受一系列BaseMessages
  • 一个包含键的字典,键接受最新消息或者历史消息

它的输出可以是以下之一:

  • 可作为AIMessage内容的字符串
  • 一系列BaseMessage
  • 一个包含键的字典,键包含一系列BaseMessage
2.1 示例:Mozilla OpenAI Chat Model
pip install -qU langchain-openai

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass()

from langchain_openai import ChatOpenAI

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

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

runnable_with_history = RunnableWithMessageHistory(
    llm,
    get_session_history,
)

runnable_with_history.invoke(
    [HumanMessage(content="hi - im bob!")],
    config={"configurable": {"session_id": "1"}}
)
# 使用API代理服务提高访问稳定性

代码示例

# 运行一个带消息历史的可运行对象示例
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来区分多个会话。例如:

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

问题2:API访问的稳定性如何保证?

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问稳定性。

总结和进一步学习资源

通过RunnableWithMessageHistory类,我们能够轻松地为聊天机器人实现消息历史记录。配置不同的底层可运行对象和消息存储方式,开发者可以根据需求进行灵活调整。

进一步学习资源

  1. LangChain Documentation
  2. SQLite 官方文档
  3. OpenAI API 参考

参考资料

  1. LangChain Library Documentation
  2. OpenAI API Documentation
  3. SQLite Documentation

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

---END---