深入探索SQLAlchemy与LangChain集成:存储和检索聊天记录的优雅解决方案

197 阅读2分钟
## 引言

在现代应用开发中,存储和管理聊天记录是构建智能聊天系统的核心需求之一。Structured Query Language (SQL) 是用于管理关系型数据库的强大工具,而SQLAlchemy则是Python中一个广泛使用的SQL工具包和对象关系映射器(ORM)。在这篇文章中,我们将探讨如何利用SQLAlchemy和LangChain来有效地存储和管理聊天历史记录。我们特别关注一个名为`SQLChatMessageHistory`的类,它允许我们将聊天记录存储在任何SQLAlchemy支持的数据库中。

## 主要内容

### 设置环境

为了使用`SQLChatMessageHistory`,我们首先需要安装相关的包:

```bash
pip install -U langchain-community SQLAlchemy langchain-openai

这将安装langchain-community及其依赖项。请注意,如果你使用SQLite以外的数据库,还需要安装相应的数据库驱动程序。

基本用法

要存储聊天记录,你需要提供两个重要参数:

  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)

数据链的构建

SQLChatMessageHistory可以与LangChain的RunnableWithMessageHistory结合使用,实现更复杂的功能链。以下是一个示例:

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)

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

常见问题和解决方案

数据库驱动

为了支持不同的数据库,你需要安装对应的驱动。例如,使用PostgreSQL时,你需要安装psycopg2asyncpg

网络访问问题

在某些地区,访问某些API可能会受到限制。这种情况下,可以考虑使用API代理服务来提高访问稳定性。

总结和进一步学习资源

结合使用SQLAlchemy和LangChain可以极大地简化聊天记录的管理工作。为了进一步提升你的技术水平,你可以查阅以下资源:

参考资料

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

---END---