跳到主要内容
Open In ColabOpen on GitHub

SQL (SQLAlchemy)

结构化查询语言 (SQL) 是一种在编程中使用的领域特定语言,旨在管理关系数据库管理系统 (RDBMS) 中保存的数据,或用于关系数据流管理系统 (RDSMS) 中的流处理。它在处理结构化数据时特别有用,即包含实体和变量之间关系的数据。

SQLAlchemy 是一个开源的 SQL 工具包和对象关系映射器 (ORM),用于 Python 编程语言,根据 MIT 许可证发布。

本笔记本介绍了 SQLChatMessageHistory 类,该类允许在 SQLAlchemy 支持的任何数据库中存储聊天历史记录。

请注意,要将其与 SQLite 以外的数据库一起使用,您需要安装相应的数据库驱动程序。

设置

该集成位于 langchain-community 包中,因此我们需要安装它。我们还需要安装 SQLAlchemy 包。

pip install -U langchain-community SQLAlchemy langchain-openai

设置 LangSmith 以获得一流的可观测性也很有帮助(但不是必需的)

# os.environ["LANGSMITH_TRACING"] = "true"
# os.environ["LANGSMITH_API_KEY"] = getpass.getpass()

使用方法

要使用存储,您只需要提供 2 件事

  1. 会话 ID - 会话的唯一标识符,例如用户名、电子邮件、聊天 ID 等。
  2. 连接字符串 - 指定数据库连接的字符串。它将传递给 SQLAlchemy create_engine 函数。
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")
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",
)
# This is where we configure the session id
config = {"configurable": {"session_id": "<SESSION_ID>"}}
chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
AIMessage(content='Hello Bob! How can I assist you today?')
chain_with_history.invoke({"question": "Whats my name"}, config=config)
AIMessage(content='Your name is Bob! Is there anything specific you would like assistance with, Bob?')

此页面是否对您有帮助?