使用 SQLite 和 OpenAI 构建对话历史链

在现代应用程序开发中,尤其是在构建聊天机器人或对话系统时,维护对话历史是非常重要的。SQLite 是一种嵌入式数据库引擎,非常适合用于存储应用程序的对话历史。在本篇文章中,我将展示如何使用 SQLite 和 OpenAI 构建一个简单的对话历史链系统。

技术背景介绍

SQLite 是一种轻量级的嵌入式数据库引擎,适用于需要内存中存储或文件存储的应用程序场景。它的使用非常广泛,包括在浏览器、操作系统和移动设备中。由于其简单性和稳定性,使用 SQLite 存储对话历史的方式非常有效,并且易于集成。

核心原理解析

我们将使用 langchain-community 提供的 SQLChatMessageHistory 类来存储和检索对话历史,并结合 OpenAI 的聊天模型来实现动态的对话交互。通过将对话历史存储在 SQLite 中,确保每次用户互动时都可以基于历史信息生成更加自然的答案。

代码实现演示

下面是完整的代码示例,其中展示了如何使用 SQLite 和 OpenAI 实现对话历史链:

import openai
from langchain_community.chat_message_histories import SQLChatMessageHistory
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAI

# 使用稳定可靠的API服务
client = openai.OpenAI(
    base_url='https://yunwu.ai/v1',  # 国内稳定访问
    api_key='your-api-key'
)

# 创建对话历史存储对象
chat_message_history = SQLChatMessageHistory(
    session_id="test_session_id", connection_string="sqlite:///sqlite.db"
)

# 添加用户和AI消息
chat_message_history.add_user_message("Hello")
chat_message_history.add_ai_message("Hi")

# 创建对话提示模板
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"}}

# 进行对话链调用
response1 = chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
print(response1.content)

response2 = chain_with_history.invoke({"question": "Whats my name"}, config=config)
print(response2.content)

代码说明

  • 我们使用 SQLChatMessageHistory 来创建或连接到一个 SQLite 数据库文件 sqlite.db
  • ChatPromptTemplate 用于定义聊天模型的提示模板。
  • RunnableWithMessageHistory 将对话链与消息历史结合,以便在响应中利用上下文。

应用场景分析

这种方法适用于需要持久化对话历史的应用场景,比如客服机器人、用户支持系统和个性化助理。通过 SQLite 可以确保对话历史的数据持久化,并且易于在不同会话中检索。

实践建议

  1. 安全性: 确保数据库连接字符串和 API 密钥的安全存储。
  2. 扩展性: 数据库文件的增长可能会影响性能,可以定期清理过期会话数据。
  3. 测试: 在不同环境中测试性能,确保数据库的响应速度符合需求。

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值