用SQLite和AI创建对话链:从零开始的实用指南

120 阅读2分钟
# 用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_idconnection_string以适合您的应用场景。

常见问题和解决方案

  • 网络访问问题:在某些地区,访问OpenAI API可能会受到限制。可以使用API代理服务,以提高访问稳定性。
  • 数据库文件锁定:在多线程环境中使用SQLite时,可能会遇到数据库文件锁定问题。建议使用连接池或适当的锁机制来管理并发访问。

总结和进一步学习资源

通过本文,我们学习了如何使用SQLite和OpenAI创建一个简单的对话链。想要进一步深入了解,可以参考以下资源:

参考资料

  1. SQLite Documentation: sqlite.org/docs.html
  2. OpenAI API Documentation: openai.com/api/
  3. LangChain GitHub Repository: github.com/langchain-a…

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

---END---