使用SQLite和AI实现简单的会话链存储

在今天的文章中,我们将深入探讨如何使用SQLite数据库来存储会话数据,并利用AI来实现一个简单的会话链。这对于开发聊天机器人或智能助理时尤为有用,因为它能有效地记录和管理用户交互历史。让我们一步步实现这一应用。

技术背景介绍

SQLite是一个用C语言编写的数据库引擎,它广泛用于多种应用程序中,因其嵌入式的特性被大量部署。与传统数据库不同,SQLite是一个库,软件开发人员可以将其嵌入到自己的应用程序中。

核心原理解析

在这个示例中,我们将使用SQLChatMessageHistory来管理聊天消息历史,背后以SqliteEntityStore作为存储。这可以让我们轻松地记录每次人机交互的信息。然后,我们将结合OpenAI的API,实现一个基于历史记录的对话链,这样AI就能记住会话上下文。

代码实现演示

我们将分为两个部分来实现:首先是消息存储,然后是结合AI的会话链。

消息历史存储

首先,我们创建一个用来存储聊天历史的SQLChatMessageHistory实例:

from langchain_community.chat_message_histories import SQLChatMessageHistory

# 创建消息历史存储实例
chat_message_history = SQLChatMessageHistory(
    session_id="test_session_id",  # 为每个会话提供一个唯一的ID
    connection_string="sqlite:///sqlite.db"  # 如果数据库不存在,将被自动创建
)

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

结合AI的会话链

接下来,我们需要安装langchain-openai库,并配置OpenAI的API密钥:

pip install -U langchain-openai
export OPENAI_API_KEY='your-openai-api-key'  # 设置OpenAI的API密钥

然后,我们设置会话链:

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",
)

# 配置会话ID
config = {"configurable": {"session_id": "test_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?')

response = chain_with_history.invoke({"question": "Whats my name"}, config=config)
print(response)  # 输出: AIMessage(content='Your name is Bob! Is there anything specific you would like assistance with, Bob?')

应用场景分析

这样设置的会话链特别适合需要记住用户上下文的对话系统,如客服聊天机器人、个人助理应用等。使用SQLite作为存储可以确保在嵌入式环境中不增加复杂性,并且它的轻量级特性非常适合移动应用。

实践建议

  1. 数据库连接字符串可根据实际应用需求进行配置,以满足多用户环境的需求。
  2. 在生产环境中,请确保API密钥和数据库文件的安全性。
  3. 可以根据需要扩展SQLChatMessageHistory类,添加更多的处理逻辑。

如果遇到问题欢迎在评论区交流。
—END—

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值