引言
SQLite是一种用C编程语言编写的数据库引擎。作为最广泛部署的嵌入式数据库引擎之一,SQLite被众多顶级网页浏览器、操作系统和移动设备使用。在这篇文章中,我们将探讨如何利用SQLite和Langchain库创建一个简单的对话链,并使用SQLChatMessageHistory记录会话内容。
主要内容
SQLite的基本概念
SQLite是一种轻量级的数据库,适用于嵌入式环境。它不需要单独的数据库服务器,而是作为一个库嵌入在应用程序中。开发者可以通过简单的API调用来管理数据库。
使用SQLChatMessageHistory记录对话
在我们的示例中,我们将使用Langchain库中的SQLChatMessageHistory
类来记录用户和AI之间的对话。我们需要两个主要的元素来使用这个存储机制:一个唯一的会话ID和一个数据库连接字符串。对于SQLite,连接字符串的格式是sqlite:///
,后面跟着数据库文件的名称。如果该文件不存在,SQLite会自动创建它。
from langchain_community.chat_message_histories import SQLChatMessageHistory
# 使用API代理服务提高访问稳定性
chat_message_history = SQLChatMessageHistory(
session_id="test_session_id", connection_string="sqlite:///sqlite.db"
)
chat_message_history.add_user_message("Hello")
chat_message_history.add_ai_message("Hi")
# 查看对话历史
print(chat_message_history.messages)
使用对话链和OpenAI
为了扩展对话功能,我们可以将消息历史与Langchain的LCEL Runnables结合使用。首先,我们需要安装langchain-openai
包,并配置OpenAI的API密钥。
pip install -U langchain-openai
export OPENAI_API_KEY='sk-xxxxxxx'
接着,我们定义一个对话链,并结合OpenAI的接口进行AI响应。
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",
)
config = {"configurable": {"session_id": "<SQL_SESSION_ID>"}}
response = chain_with_history.invoke({"question": "Hi! I'm Bob"}, config=config)
print(response)
常见问题和解决方案
问题:数据库文件无法访问
如果SQLite数据库文件无法访问,确保应用程序对该目录具有读取和写入权限。
问题:API访问不稳定
由于某些地区的网络限制,使用API代理服务可以提高API访问的稳定性。
总结和进一步学习资源
通过本文,我们了解到如何使用SQLite和Langchain库记录和管理对话信息。使用SQLite轻量级的特性,我们可以方便地嵌入到应用程序中,并结合OpenAI的强大能力进行自然语言处理。进一步学习资源可以帮助读者深入理解和扩展这些功能:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---