通过SQLAlchemy使用SQL存储聊天历史的实用指南

89 阅读2分钟

引言

在现代应用程序中,保存和管理聊天历史是一个常见需求。通过SQLAlchemy与SQL的结合,可以轻松实现这一功能。本文将指导您如何使用SQLAlchemy在Python中存储和管理聊天记录。

主要内容

SQLAlchemy简介

SQLAlchemy是一个开源的SQL工具包和对象关系映射器(ORM),适用于Python编程语言。它允许开发者以Python对象的方式处理数据库中的数据。

SQLChatMessageHistory类

SQLChatMessageHistory类允许您将聊天历史存储在任何SQLAlchemy支持的数据库中。它通过会话ID来区分不同的聊天记录,并使用连接字符串来指定数据库。

环境设置

在开始之前,您需要安装以下软件包:

pip install -U langchain-community SQLAlchemy langchain-openai

为了增强可观察性,您也可以选择设置LangSmith(可选)。

使用方法

要使用这个存储系统,您需要提供以下两个信息:

  1. Session Id:会话的唯一标识符,如用户名、电子邮件或聊天ID。
  2. Connection String:指定数据库连接的字符串,用于传递给SQLAlchemy的create_engine函数。

示例代码如下:

from langchain_community.chat_message_histories import SQLChatMessageHistory

# 使用API代理服务提高访问稳定性
chat_message_history = SQLChatMessageHistory(
    session_id="test_session", connection_string="sqlite:///sqlite.db"
)

chat_message_history.add_user_message("Hello")
chat_message_history.add_ai_message("Hi")

# 输出结果
print(chat_message_history.messages)
# 输出: [HumanMessage(content='Hello'), AIMessage(content='Hi')]

链接功能

我们可以将这个消息历史类与LCEL Runnables结合使用,以实现更多功能。例如,与OpenAI集成:

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI

# 定义对话模板
prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a helpful assistant."),
        MessagesPlaceholder(variable_name="history"),
        ("human", "{question}"),
    ]
)

chain = prompt | ChatOpenAI()

# 创建链式调用
chain_with_history = RunnableWithMessageHistory(
    chain,
    lambda session_id: SQLChatMessageHistory(
        session_id=session_id, connection_string="sqlite:///sqlite.db"
    ),
    input_messages_key="question",
    history_messages_key="history",
)

# 配置会话ID
config = {"configurable": {"session_id": "<SESSION_ID>"}}

# 调用链
response = chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
print(response)
# AIMessage(content='Hello Bob! How can I assist you today?')

常见问题和解决方案

  • 数据库连接失败:确保连接字符串正确且对应的数据库驱动已安装。
  • 网络限制:某些地区可能需要使用API代理服务以提高访问的稳定性。

总结和进一步学习资源

本文介绍了如何使用SQLAlchemy存储和管理聊天历史。通过SQLChatMessageHistory类,您可以轻松持久化聊天数据,并结合其他工具实现复杂的链式调用。建议进一步阅读SQLAlchemy和LangChain的官方文档以获取更多高级用法。

参考资料

  1. SQLAlchemy 官方文档
  2. LangChain 官方文档

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

---END---