# 用SQLite和AI创建对话链:从零开始的实用指南
## 引言
SQLite是一个用C语言编写的数据库引擎,广泛植入于各种软件系统中,其嵌入式特性使其成为众多浏览器、操作系统和移动设备的首选数据库解决方案。在这篇文章中,我们将使用SQLChatMessageHistory构建一个简单的对话链,借助SQLite为其内存存储提供支持,并探索如何结合OpenAI的能力来实现更智能的对话。
## 主要内容
### 1. 为什么选择SQLite?
- **轻量级与易用性**:SQLite无须独立服务器,因此非常适合嵌入应用中。
- **广泛的支持与部署**:几乎在所有平台上均支持SQLite。
- **零配置**:无需复杂的设置和管理,非常适合开发测试环境。
### 2. 设置环境
要使用对话存储功能,只需提供两个参数:
- **Session Id**: 用于标识会话的唯一ID,例如用户名、邮箱或聊天ID。
- **Connection String**: 数据库连接字符串,对于SQLite来说,是`sqlite:///`后跟数据库文件的名称。
```python
from langchain_community.chat_message_histories import SQLChatMessageHistory
chat_message_history = SQLChatMessageHistory(
session_id="test_session_id", connection_string="sqlite:///sqlite.db" # 使用API代理服务提高访问稳定性
)
chat_message_history.add_user_message("Hello")
chat_message_history.add_ai_message("Hi")
3. 与OpenAI集成
为了使用OpenAI提供的智能对话功能,我们还需进行一些额外的设置。
pip install -U langchain-openai
确保设置API密钥:
export OPENAI_API_KEY='sk-xxxxxxx'
以下是如何将聊天信息历史与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" # 使用API代理服务提高访问稳定性
),
input_messages_key="question",
history_messages_key="history",
)
# 配置会话ID
config = {"configurable": {"session_id": "<SQL_SESSION_ID>"}}
response = chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
print(response.content)
response = chain_with_history.invoke({"question": "Whats my name"}, config=config)
print(response.content)
4. 代码示例
完整的代码示例如上所示。请根据需要调整session_id和connection_string以适合您的应用场景。
常见问题和解决方案
- 网络访问问题:在某些地区,访问OpenAI API可能会受到限制。可以使用API代理服务,以提高访问稳定性。
- 数据库文件锁定:在多线程环境中使用SQLite时,可能会遇到数据库文件锁定问题。建议使用连接池或适当的锁机制来管理并发访问。
总结和进一步学习资源
通过本文,我们学习了如何使用SQLite和OpenAI创建一个简单的对话链。想要进一步深入了解,可以参考以下资源:
参考资料
- SQLite Documentation: sqlite.org/docs.html
- OpenAI API Documentation: openai.com/api/
- LangChain GitHub Repository: github.com/langchain-a…
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---