ChatSQL - 文本生成SQL【LLM】

news2024/11/26 15:41:26

ChatSQL将用户提供的纯文本转换为 mysql 查询,基于ChatGPT实现。

在这里插入图片描述

推荐:用 NSDT设计器 快速搭建可编程3D场景。

1、ChatSQL简介

我们需要从一开始就指定一些关于我们数据库的信息,以便 Chatgpt 了解我们的数据库。 info.json 文件可用于此过程。 应在此文件中详细添加数据库信息。

随着数据库复杂性的增加,应该提供更详细的信息。 在一定程度的复杂性之后,必须通过矢量化和自主提取每个传入提示的特定信息结构来保存此数据。 这种方法会更有效、更经济。 因此,ChatSQL更适合中小型数据库。 如果以后时间充裕,我会做一个关于大数据库的新项目。

Openai api 密钥和数据库信息应添加到 conf.json 文件中。 你想尝试这个项目,但你可能没有样本数据集。 可以使用 books.csv 文件进行测试。

2、ChatSQL安装

在开始之前安装所有包。 本次安装过程使用以下命令(本项目使用python 3.8):

 make install

或者

pip3 install --default-timeout=900 -r requirements.txt

然后运行 sample_data_creator.py 将示例数据集插入到自己的数据库中。 可以使用以下命令(默认表名是“bt”)。

python3 sample_data_creator.py

3、ChatSQL快速上手

现在我们的数据已经准备好,所可以开始使用它了。

有两种不同的使用方法。 首先是运行 chatsql.py 文件。 在此方法中,提示被添加为标志。 在第二种方法中,它是通过 grpc 服务器使用的。

3.1 使用 ChatSql

可以在下面查看数据库示例。

在这里插入图片描述

这是我们的示例提示:

Show me the book type fiction which they height bigger than 175 and smaller than 178. The author shoudn’t be ‘Doyle, Arthur Conan’

查询高度大于 175 且小于 178 、作者非‘Doyle, Arthur Conan’的小说

使用如下命令传入提示:

python3 chatsql.py -p 'Show me the book type fiction which they height bigger than 175 and smaller than 178. The author shouldn't be 'Doyle, Arthur Conan'. '

结果如下:

CHATGPT QUERY------------------:
SELECT * FROM bt WHERE Genre = 'Fiction' AND Height > 175 AND Height < 178 AND Author != 'Doyle, Arthur Conan'
RAW RESULT------------------:
[(32, 'Pillars of the Earth, The', 'Follett, Ken', 'fiction', 176, 'Random House'), (37, 'Veteran, The', 'Forsyth, Frederick', 'fiction', 177, 'Transworld'), (38, 'False Impressions', 'Archer, Jeffery', 'fiction', 177, 'Pan'), (72, 'Prisoner of Birth, A', 'Archer, Jeffery', 'fiction', 176, 'Pan'), (87, 'City of Joy, The', 'Lapierre, Dominique', 'fiction', 177, 'vikas'), (128, 'Rosy is My Relative', 'Durrell, Gerald', 'fiction', 176, 'nan')]
PROCESSED RESULT------------------ :
The books 'Pillars of the Earth, The' by Ken Follett, 'Veteran, The' by Frederick Forsyth, 'False Impressions' by Jeffery Archer, 'Prisoner of Birth, A' by Jeffery Archer, 'City of Joy, The' by Dominique Lapierre, and 'Rosy is My Relative' by Gerald Durrell are all fiction books with 176 or 177 pages published by Random House, Transworld, Pan, Vikas, and Nan, respectively.

从上面可以看出,得到了三种不同的输出结果。 第一个结果是将给定提示转换为 sql 查询。 原始结果是作为此查询的结果从数据库返回的原始数据。 最后,处理后的数据是chatgpt将sql结果解释为纯文本。

3. 2 通过 gRPC 使用ChatSQL

启动gRPC 服务器:

python3 main.py -p 9001

运行 gRPC 服务器后,可以使用自己的客户端连接到此服务器并发送提示。 如果想查看示例,可以查看 client.py 文件。

python3 client.py

结果如下:

{'query': "SELECT * from bt WHERE Genre = 'Fiction' AND Height > 175 AND Height < 178 AND Author != 'Doyle, Arthur Conan'", 'raw_result': "[(32, 'Pillars of the Earth, The', 'Follett, Ken', 'fiction', 176, 'Random House'), (37, 'Veteran, The', 'Forsyth, Frederick', 'fiction', 177, 'Transworld'), (38, 'False Impressions', 'Archer, Jeffery', 'fiction', 177, 'Pan'), (72, 'Prisoner of Birth, A', 'Archer, Jeffery', 'fiction', 176, 'Pan'), (87, 'City of Joy, The', 'Lapierre, Dominique', 'fiction', 177, 'vikas'), (128, 'Rosy is My Relative', 'Durrell, Gerald', 'fiction', 176, 'nan')]", 'processed_result': "\n1. Ken Follett's 'Pillars of the Earth, The' is a fiction novel with 176 pages that was published by Random House.\n2. Frederick Forsyth's 'Veteran, The' is a fiction novel with 177 pages that was published by Transworld.\n3. Jeffery Archer's 'False Impressions' is a fiction novel with 177 pages that was published by Pan.\n4. Jeffery Archer's 'Prisoner of Birth, A' is a fiction novel with 176 pages that was published by Pan.\n5. Dominique Lapierre's 'City of Joy, The' is a fiction novel with 177 pages that was published by Vikas.\n6. Gerald Durrell's 'Rosy is My Relative' is a fiction novel with 176 pages that was published by Nan."}
Time: 10.407907724380493

3.3 通过 Docker 使用gRPC

如果你想通过 docker 创建 gRPC 服务器(默认镜像名称 --> chatsql):

make docker

使用如下命令启动容器:

make docker_run p=9001

然后就可以利用客户端查询了:

python3 client.py

结果如下:

'query': "SELECT * FROM bt WHERE Genre = 'Fiction' AND Height > 175 AND Height < 178 AND Author != 'Doyle, Arthur Conan'", 'raw_result': "[(32, 'Pillars of the Earth, The', 'Follett, Ken', 'fiction', 176, 'Random House'), (37, 'Veteran, The', 'Forsyth, Frederick', 'fiction', 177, 'Transworld'), (38, 'False Impressions', 'Archer, Jeffery', 'fiction', 177, 'Pan'), (72, 'Prisoner of Birth, A', 'Archer, Jeffery', 'fiction', 176, 'Pan'), (87, 'City of Joy, The', 'Lapierre, Dominique', 'fiction', 177, 'vikas'), (128, 'Rosy is My Relative', 'Durrell, Gerald', 'fiction', 176, 'nan')]", 'processed_result': '\nThe books "Pillars of the Earth, The" by Ken Follet, "Veteran, The" by Frederick Forsyth, "False Impressions" by Jeffery Archer, "Prisoner of Birth, A" by Jeffery Archer, "City of Joy, The" by Dominique Lapierre and "Rosy is My Relative" by Gerald Durrell are all fiction books with page count 176 or 177 and published by Random House, Transworld, Pan, Vikas or Nan.'}
Time: 7.1615989208221436

注意:如果你想使用docker,应该在docker中配置网络。
例如,如果使用的是 mac 设备并通过本地主机连接到 mysql 数据库,则应设置“host.docker.internal”而不是“localhost”(在 conf.json 文件中 - “HOST”:“host.docker. 内部”)。

4、额外信息

在目前的例子中,数据库中的列名总是有意义的。 ChatGPT 可以通过了解列名来生成查询。 但是,在某些情况下,列名是无意义的,或者 chatgpt 可能无法理解它们。 如果我们在 info.json 文件中添加足够多的关于数据库的详细信息,我们将继续得到我们想要的结果。 例如,让我们将列名称更改为 aa、bb、cc、dd、ee。

在这里插入图片描述

如果我们详细解释列名并运行 client.py -->

{'query': "SELECT aa, bb, cc, dd FROM bt WHERE cc = 'fiction' AND dd > 175 AND dd < 178 AND bb != 'Doyle, Arthur Conan'", 'raw_result': "[('Pillars of the Earth, The', 'Follett, Ken', 'fiction', 176), ('Veteran, The', 'Forsyth, Frederick', 'fiction', 177), ('False Impressions', 'Archer, Jeffery', 'fiction', 177), ('Prisoner of Birth, A', 'Archer, Jeffery', 'fiction', 176), ('City of Joy, The', 'Lapierre, Dominique', 'fiction', 177), ('Rosy is My Relative', 'Durrell, Gerald', 'fiction', 176)]", 'processed_result': '\nThe books "Pillars of the Earth, The" by Ken Follett, "Veteran, The" by Frederick Forsyth, "False Impressions" by Jeffery Archer, "Prisoner of Birth, A" by Jeffery Archer, "City of Joy, The" by Dominique Lapierre and "Rosy is My Relative" by Gerald Durrell are all fiction and have page lengths of 176 or 177.'}

我的下一个项目可能会使用免费模型 (Llama) 从提示生成查询(mongo、sql),请继续关注!


原文链接:ChatSQL:文本生成SQL — BimAnt

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

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

相关文章

什么是胆汁酸,其与肠道微生物互作如何影响人体健康

谷禾健康 胆汁酸是一种代谢胆固醇的物质&#xff0c;它具有两个亲和性不同的区域&#xff0c;即一部分能够与水分子相互作用&#xff08;亲水&#xff09;&#xff0c;而另一部分则不能与水分子相互作用&#xff08;疏水&#xff09;。 由于拥有这种两亲性质&#xff0c;胆汁酸…

开悟和悟道的一点看法

今天看到一个老师的在讲何为开悟&#xff0c;就做了一下笔记&#xff1a; 开悟就是明心见性&#xff0c;去除了见惑&#xff0c;见解方面&#xff0c;思想方面的迷惑&#xff0c;包含&#xff1a;身见&#xff08;我和身体关系&#xff0c;我是谁&#xff09;&#xff0c;边见…

Vue3-黑马(十二)

目录&#xff1a; &#xff08;1&#xff09;vue3-router-图标的二次封装-jxl组件 &#xff08;2&#xff09;vue3-进阶-动态路由 &#xff08;3&#xff09;vue3-进阶-动态路由2 &#xff08;1&#xff09;vue3-router-图标的二次封装-jxl组件 以.vue结尾结尾的单文件组件…

谈谈OPCUA 聚合服务器(aggregation-server)

OPC UA 作为一种以信息模型为基础的工业自动化通信协议&#xff0c;如同它的名字一样正在朝着“统一架构”的方向飞速地发展&#xff0c;从传感器&#xff0c;PLC &#xff0c;传感器到云端应用都正在向OPCUA 迁移。它将成为开放型系统&#xff0c;数字孪生&#xff0c;仿真系统…

Ubuntu20.04 -- 小白系列4 之小笔记

1、clash for linux Releases Dreamacro/clash GitHub 下载&#xff0c;建议这圈中的第一个。 解压后可执行文件改为clash 打开终端&#xff08;打开你的suying,并复制自己的&#xff09; wget -O config.yml https://s&log-levelinfo config.yml 复制并修改文件名为…

百度地图JavaScript API添加自定义Marker

百度地图JavaScript API添加自定义Marker 官网指导添加自定义Marker 实际使用中发现无法显示图标&#xff0c;找了一些博客 百度地图开发自定义图标无法显示的问题 百度地图自定义图标不显示问题解决方案 关于百度地图开放平台api覆盖物“自定义Marker图标”不能正常显示的解决…

bgp路由策略

* - valid 有效的, > - best 最佳的 上图中&#xff0c;有*和>&#xff0c;是有效最佳的。而没有*和没有>&#xff0c;是无效的&#xff0c;下一跳不可达 1--64511是公有AS 64512-65534为私有AS //属于哪个大的联盟 AS200 //连着一个子类AS 65002 //和子…

如何在桌面手动创建Windows安全中心的应用和浏览器快捷方式

Windows 10包括 Windows Security,它提供了最新的防病毒保护。从你启动Windows 10的那一刻起,你的设备将受到主动保护。 Windows Security不断扫描恶意软件(恶意软件)、病毒和安全威胁。除了这种实时保护外,还会自动下载更新,以帮助保护你的设备安全并保护其免受威胁。 …

centos安装SNB服务

Samba 是一种开源软件&#xff0c;它提供了一种让 Linux 和 Unix 系统与 Windows 操作系统相互通信的标准协议。Samba 允许 Linux 和 Unix 系统作为文件服务器和打印服务器&#xff0c;提供 Windows 客户端所需的服务。 具体来说&#xff0c;Samba 通过实现 SMB/CIFS 协议来实现…

Systick定时器

一、SysTick定时器介绍 SysTick定时器也叫SysTick滴答定时器&#xff0c;它是Cortex-M3内核的一个外设&#xff0c;所有使用Cortex-M3内核的单片机都具有这个定时器。Systick被内嵌在NVIC寄存器中&#xff0c;是一个24位的向下递减计数的定时器&#xff0c;在stm32中它的时钟通…

Xcode真机运行报错:Failed to prepare the device for development解决方法

一、遇到的问题 运行Xcode然后打包APP&#xff0c;结果Xcode报错&#xff0c;如下&#xff1a; Failed to prepare the device for development. This operation can fail if the version of the OS on the device is incompatible with the installed version of Xcode. You …

9个刚入门产品经理必备的原型工具

每一个产品的诞生都离不开一个优秀的产品经理&#xff0c;每一个优秀的产品经理都离不开一个原型图软件。 一款好用的产品原型图软件&#xff0c;可以让产品经理在绘制原型图时事半功倍。 本文总结了9款产品经理常用的产品原型图软件。如果你是产品经理小白&#xff0c;赶紧收…

路径规划算法:基于正余弦算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于正余弦优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于正余弦优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

Java【网络编程2】详解基于 TCP 协议的 Socket API, 逐行代码解析如何服务器客户端通信(附代码)

文章目录 前言一、认识 Socket(套接字), TCP 协议和 UDP 协议1, 什么是 Socket(套接字)2, 浅谈 TCP 协议和 UDP 协议的区别和特点 二、基于 TCP 协议的 Socket API1, ServerSocket 类2, Socket 类 三、逐行代码解析网络编程1, 逐行解析客户端1.1, 核心成员方法 start() 2, 逐行…

三维空间与位姿变换

在使用相机或者机械臂的过程中&#xff0c;经常会用到三维空间变换&#xff0c;大部分时候我们可以使用TF去获取空间中的位姿关系&#xff0c;但是也存在一些时候无法使用现有TF表示的情况&#xff0c;例如&#xff1a;使用相机识别工件时&#xff0c;已知通过图像确定了相机到…

C++ - RBTree

前面的文章中我们讲述了以二叉搜索树为基础的AVL树&#xff0c;本文中我们将继续讲一种二叉搜索树为基础的红黑树。 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条…

冲量在线出席2023鲲鹏昇腾开发者峰会,联合鲲鹏打造可信AIGC一体机,共筑产业数字根基

近日&#xff0c;以“创未来 享非凡”为主题的2023鲲鹏昇腾开发者峰会在东莞松山湖举办。鲲鹏昇腾开发者峰会是面向ICT领域开发者的技术盛会&#xff0c;旨在打造生态伙伴、开发者学习、交流的平台&#xff0c;帮助开发者深入了解鲲鹏、昇腾全栈技术&#xff0c;加速行业技术、…

超聚变携手冲量在线打造可信AIGC计算联合解决方案:软硬件高效协同之跃

金融行业作为全球经济的核心引擎&#xff0c;不断变革和创新是其发展的常态&#xff0c;在算力这一日趋成为数字经济时代的新型生产力的趋势下&#xff0c;围绕金融业数字化&#xff0c;业界展开了新一轮探索。 近日&#xff0c;2023中国国际金融展&#xff08;简称&#xff1…

uniapp app 实现qq登录、微信登录

一、申请 uniapp qq登录流程&#xff1a; 开通 | uni-app官网 申请微信登录可前往微信开发平台&#xff1a;微信开放平台 uniapp 微信登录流程&#xff1a; uni-app官网 申请qq登录可前往qq互联&#xff1a;QQ互联官网首页 这些都可以请运维同学帮我们申请&#xff0c;前…

【Linux】驱动内核调试,是需要几板斧的

目录 前言&#xff1a; 一、基础打印工具 &#xff08;1&#xff09;printk---最常用 ①Log Buffer: ②Console&#xff1a; ③RAM Console&#xff1a; &#xff08;2&#xff09;动态打印 ①动态打印与printk之间的区别联系 ②动态打印常用的例子 ③动态打印转为pri…