LangChain 使用文本描述的方式操作MySQL中的数据

news2024/11/19 6:28:16

一、LangChain 使用文本描述的方式操作MySQL中的数据

LangChain 中提供了 SQLDatabaseChain ,可以通过语义文本去操作 MySQL中的数据,例如在 MySQL 中有如下表数据:

用户表

CREATE TABLE `user` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(255) DEFAULT NULL COMMENT '姓名',
  `age` int DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';

写入测试数据:

INSERT INTO `langchain`.`user`(`id`, `name`, `age`) VALUES (1, '张三', 20);
INSERT INTO `langchain`.`user`(`id`, `name`, `age`) VALUES (2, '李四', 60);
INSERT INTO `langchain`.`user`(`id`, `name`, `age`) VALUES (3, '王五', 30);
INSERT INTO `langchain`.`user`(`id`, `name`, `age`) VALUES (4, '赵六', 31);
INSERT INTO `langchain`.`user`(`id`, `name`, `age`) VALUES (5, '小明', 35);
INSERT INTO `langchain`.`user`(`id`, `name`, `age`) VALUES (6, '小红', 25);
INSERT INTO `langchain`.`user`(`id`, `name`, `age`) VALUES (7, '小蓝', 40);

角色表

CREATE TABLE `role` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `role` varchar(255) DEFAULT NULL COMMENT '角色名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='角色表';

写入测试数据:

INSERT INTO `langchain`.`role`(`id`, `role`) VALUES (1, 'admin');
INSERT INTO `langchain`.`role`(`id`, `role`) VALUES (2, 'common');
INSERT INTO `langchain`.`role`(`id`, `role`) VALUES (3, 'role1');
INSERT INTO `langchain`.`role`(`id`, `role`) VALUES (4, 'role2');
INSERT INTO `langchain`.`role`(`id`, `role`) VALUES (5, 'role3');

工作组表:

CREATE TABLE `work_group` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `group` varchar(255) DEFAULT NULL COMMENT '工作组',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='工作组表';

写入测试数据:

INSERT INTO `langchain`.`work_group`(`id`, `group`) VALUES (1, 'A');
INSERT INTO `langchain`.`work_group`(`id`, `group`) VALUES (2, 'B');
INSERT INTO `langchain`.`work_group`(`id`, `group`) VALUES (3, 'C');
INSERT INTO `langchain`.`work_group`(`id`, `group`) VALUES (4, 'E');

用户角色关系表

CREATE TABLE `user_role_mapping` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` int DEFAULT NULL COMMENT '用户ID',
  `role_id` int DEFAULT NULL COMMENT '角色ID',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户角色关系表';

写入测试数据:

INSERT INTO `langchain`.`user_role_mapping`(`id`, `user_id`, `role_id`) VALUES (1, 1, 1);
INSERT INTO `langchain`.`user_role_mapping`(`id`, `user_id`, `role_id`) VALUES (2, 1, 2);
INSERT INTO `langchain`.`user_role_mapping`(`id`, `user_id`, `role_id`) VALUES (3, 1, 3);
INSERT INTO `langchain`.`user_role_mapping`(`id`, `user_id`, `role_id`) VALUES (4, 2, 4);
INSERT INTO `langchain`.`user_role_mapping`(`id`, `user_id`, `role_id`) VALUES (5, 2, 5);
INSERT INTO `langchain`.`user_role_mapping`(`id`, `user_id`, `role_id`) VALUES (6, 3, 2);
INSERT INTO `langchain`.`user_role_mapping`(`id`, `user_id`, `role_id`) VALUES (7, 4, 2);
INSERT INTO `langchain`.`user_role_mapping`(`id`, `user_id`, `role_id`) VALUES (8, 5, 2);
INSERT INTO `langchain`.`user_role_mapping`(`id`, `user_id`, `role_id`) VALUES (9, 6, 2);
INSERT INTO `langchain`.`user_role_mapping`(`id`, `user_id`, `role_id`) VALUES (10, 7, 5);

用户工作组关系表

CREATE TABLE `user_work_group_mapping` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` int DEFAULT NULL COMMENT '用户ID',
  `group_id` int DEFAULT NULL COMMENT '工作组ID',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户工作组关系表';

写入测试数据:

INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (1, 1, 1);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (2, 1, 2);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (3, 1, 3);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (4, 2, 1);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (5, 2, 2);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (6, 2, 3);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (7, 3, 2);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (8, 3, 3);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (9, 4, 1);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (10, 4, 2);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (11, 5, 2);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (12, 5, 4);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (13, 6, 3);
INSERT INTO `langchain`.`user_work_group_mapping`(`id`, `user_id`, `group_id`) VALUES (14, 7, 2);

构建 SQLDatabaseChain

from langchain import OpenAI, SQLDatabase, SQLDatabaseChain
import os

db_user = "root"
db_password = "root"
db_host = "127.0.0.1"
db_name = "langchain"
db = SQLDatabase.from_uri(f"mysql+pymysql://{db_user}:{db_password}@{db_host}/{db_name}")

openai_api_key = os.environ["OPENAI_API_KEY"]
llm = OpenAI(temperature=0, openai_api_key=openai_api_key)
db_chain = SQLDatabaseChain(llm=llm, database=db, verbose=True)

使用文本描述操作数据:

questions = "有多少个用户"
res = db_chain.run(questions)
print("问题:", questions, "解答:", res)

在这里插入图片描述

questions = "统计30岁以下的人员信息"
res = db_chain.run(questions)
print("问题:", questions, "解答:", res)

在这里插入图片描述

questions = "统计每个工作组下的人员"
res = db_chain.run(questions)
print("问题:", questions, "解答:", res)

在这里插入图片描述

questions = "统计每个工作组下的人员数量"
res = db_chain.run(questions)
print("问题:", questions, "解答:", res)

在这里插入图片描述

questions = "统计每个校色下的人员数量"
res = db_chain.run(questions)
print("问题:", questions, "解答:", res)

在这里插入图片描述

questions = "统计30岁以下人员的工作组和角色"
res = db_chain.run(questions)
print("问题:", questions, "解答:", res)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML5 Canvas动画实例

在开发在线游戏时,绘制动画是非常重要的。本文介绍一个使用Canvas API实现的动画实例——游戏人物的跑步动画。 01、动画的概念及原理 1、动画 动画是通过一幅幅静止的、内容不同的画面(即帧)快速播放来呈现的,使人们在视觉上产生动的感觉。这是利用了…

如何让VSCode不生成 tempcoderunnerfile.py

原因 runcode插件默认包含执行选中文本功能,当运行程序时会优先执行光标选中的代码并生成temp文件 解决方法 方法一:删除生成文件 在setting.json中添加 "code-runner.executorMap": {"php": "php $fullFileName &&am…

【Linux】Ubuntu20.04使用xrdp远程桌面时,gnome桌面环境没有最小化、任务栏等问题

一、问题背景 如下图所示,终端窗口没有最小化,因此只能关闭或移到一边去。 二、解决办法 在安装任何扩展前,需要将xrdp的桌面尽量向原生桌面靠拢。 在~/.xsessionrc配置文件中添加下面三行。 export GNOME_SHELL_SESSION_MODEubuntu ex…

Mediapipe 人像分割;实时更换背景;人脸添加特效

参考: https://zhuanlan.zhihu.com/p/476351994 1、Mediapipe 人像分割 import cv2 import mediapipe as mp import numpy as np mp_drawing mp.solutions.drawing_utils mp_selfie_segmentation mp.solutions.selfie_segmentation # 图片人物抠图: IMAGE_FILES…

idea生成serialVersionUID序列号

设置idea file->settings,搜索serialVersionUID,勾选框起来的两项 实体类实现Serializable接口 Data public class User implements Serializable { }鼠标放到类名上 点击提示的uid 生成的uid 结束! hy:17 生活是一面镜子,给予我们…

springboot 停车场管理系统-计算机毕设 附源码82061

springboot 停车场管理系统 2023年5月 摘要 由于数据库和数据仓库技术的快速发展,停车场管理系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。停车场管理系统对处理对象和服务对象,自身的系统结构,处理能力,都…

GO 基本配置

其他 IDEA 配置go语言环境 https://blog.csdn.net/weixin_45719444/article/details/121726325 关于IDEA的 plugins下找不到GO插件 点击安装 安装插件 Go 安装插件 Generate struct tags for golang

Flink CDC 2.4 正式发布,新增 Vitess 数据源,更多连接器支持增量快照,升级 Debezium 版本...

01 Flink CDC 简介 Flink CDC [1] 是基于数据库的日志 CDC 技术,实现了全增量一体化读取的数据集成框架。配合 Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。 作为新一代的实时数据集成框架,Flink CDC…

二进制搭建Kubernetes集群(三)——部署多master

本文将完成多master集群的部署,即部署master02,以及nginx负载均衡、keepalived高可用 多master集群架构图: 架构说明: node节点的kubelet只能对接一个master节点的apiserver,不可能同时对接多个master节点的apiserver…

【Solr】中文分词配置

提示:在设置中文分词前需确保已经生成过core,未生成core的可以使用:solr create -c "自定义名称"进行定义。 未分词前的效果预览: 下载分词器: 下载地址: https://mvnrepository.com/artifact/com.github.m…

山西电力市场日前价格预测【2023-06-29】

日前价格预测 预测明日(2023-06-29)山西电力市场全天平均日前电价为407.26元/MWh。其中,最高日前价格为539.37元/MWh,预计出现在21: 15。最低日前电价为312.43元/MWh,预计出现在13: 00。以上预测仅供学习参考&#xff…

Java调用ssl异常,javax.net.ssl.SSLHandshakeException: No appropriate protocol

现象:sqlserver 2017 安装在docker里,系统是mac 13,java 1.8.371运行java程序提示上面ssl错误,根据百度提供的方法,修改文件,重启程序搞定。 解决办法:java.security 找到这个文件修改保存 发…

RPC(Remote Procedure Call)学习

目录 一、概念 二、RPC 调用基本流程 一、概念 RPC 全称是 Remote Procedure Call (远程过程调用),它是一种通过网络从远程计算机程序上请求服务,可以提供终结点映射程序以及RPC服务,而不需要了解底层网络技术的协议…

三位数字显示电容测试表

广大电子爱好者都有这样的体会,中、高档数字万用表虽有电容测试挡位,但测量范围一般仅为 1pF~20F,往往不能满足使用者的需要,给电容测量带来不便。本电路介绍的三位数显示电容测试表采用四块集成电路,电路简洁、容易制…

element-ui中el-table设置固定高度后,底部合计栏被遮盖

如图: 解决办法:el-table加上ref"summaryTab",然后在自定义合计计算方法getSummaries中加上如下代码就ok了 this.$nextTick(() > {this.$refs.summaryTab.doLayout(); }); 没用使用自定义合计计算函数的,也可以写在updated中,如下: updated() {this.$nextTick((…

关于ipad:无法验证服务器身份

ipad 连接网络后,有时候会冒出这个弹窗,并且关掉后仍继续弹出 可以尝试以下几种方法:(我是用③解决的) ①. 确保你的iPad连接的是稳定的网络。有时候网络连接不稳定会导致无法验证服务器身份。 我们学校这个校园网…

Karl Guttag评Vision Pro(三):为什么飞机上VR观影体验不佳?

在过去25年里,AR/VR头显显示技术得到长足发展,采用的屏幕规格越来越高。据早前报告预测,VR头显安装基数会在2023年达到约2500万台。尽管如此,相比于无处不在的手机,我们几乎看不到周围有人随身携带AR/VR头显&#xff0…

APP为什么没有被小程序取代呢?

在科技行业日新月异的发展下,一直存在一种声音,认为小程序将逐步取代APP。然而,事实却并非如此。APP至今仍然以其独特的优势,坚挺地存在于市场之中。这是为何呢?以下是我们对此的几点考察。 首先,APP在功能…

「RPA中国杯 · 第五届RPA极客挑战赛」成功举办及获奖名单公示

2023年6月26日,「RPA中国杯 第五届RPA极客挑战赛」在苏州国际博览中心圆满结束。本次挑战赛由RPA中国和全球人工智能产品应用博览会主办,容智信息、金智维、弘玑Cyclone、UiPath联合主办,centific、中投创展协办。 RPA已经成为提高企业生产…

uniapp 详细封装缓存定时过期方法,详细使用过程

最近在开发一个uniapp的项目,中间我们需要给缓存定时,为了解决这个问题,封装了一个方法用来解决这个问题,当时遇到这个问题是因为在项目中要给阿里的OSS上传文件,上传之间先要向服务端请求获取授权,授权我们…