ChatSQL:赋能ChatGPT实现纯文本创建SQL查询
创始人
2025-07-03 06:40:20
0

译者 | 布加迪

审校 | 重楼

ChatGPT于2020年6月发布,由OpenAI开发。它已促使许多领域迎来了革命性变化。其中一个领域就是创建数据库查询。数据库查询可以通过ChatGPT由纯文本生成。它可以帮助您了解您不甚了解的数据库。

随着ChatGPT的大行其道,人工智能已经逐渐融入到我们的日常生活当中,并且发展势头正猛。在切入正题之前,不妨先简单地探究一下ChatGPT。

为了充分理解ChatGPT的功能,有必要充分掌握其底层架构。ChatGPT是基于GPT架构而开发的。因此不妨先看看Transformer。

若要直接访问该项目,请点击这里:https://github.com/ademakdogan/ChatSQL?ref=hackernoon.com。

图1. 来自Transformer的编码器和解码器图1. 来自Transformer的编码器和解码器

Transformer使用seq2seq框架,从而能够将一个序列转换成另一个序列。序列定义了排序。举例来说,我们可以将句子看作是一连串单词。Transformer还可以用于解决文本翻译之类的自然语言处理(NLP)问题。我们需要大量的标记数据来训练这个架构。这对Transformer来说很难学习。我们可以使用迁移学习来解决这个问题。Transformer由两个部分组成(见图1):编码器和解码器,它们都擅长获得熟练的语言表示。

这种熟练程度使我们能够从每个部分构建语言模型。通过堆叠编码器,我们获得了Transformer的双向编码器表示(通常称为BERT)。与之相似,通过堆叠解码器单元,我们可以获得生成式预训练(即GPT)。在本文这个例子中,我们仅关注GPT。不妨在GPT的背景下考虑迁移学习。当我们从头开始训练一个模型时,它通常需要数量庞大的数据,因为参数最初是随机设置的。然而,想象一下这样一个场景:参数偶然与我们需要的值相一致或相对齐。在这种情况下,我们不需要一个广泛的数据集来获得我们想要的结果。正如我们所理解,BERT和GPT用于迁移学习概念中。

因此,GPT训练分为两个部分。一个是预训练部分,我们训练GPT架构以理解语言是什么;另一个是微调部分,我们使用迁移学习来进一步训练GPT架构,使其针对特定的语言任务时表现良好。

图2. 示例性的下一个单词预测图2. 示例性的下一个单词预测

GPT有一种结构,可以将随机单词序列作为输入,并预测下一个最合适的单词。示例性预测如图2所示。

语言建模被选为理解语言基本方面的一个理想基础,而且很容易进行微调。它通常被称为自监督任务,因为句子本身同时可以充当输入标签和输出标签。

图3. ChatGPT示意图图3. ChatGPT示意图

不妨继续讨论ChatGPT。如图3所示,整个ChatGPT过程可以分为三个主要步骤。在第一步中,使用GPT模型,该模型已针对理解语言本身进行了预训练。下一步涉及对模型进行微调,以便有效地处理用户提示,并根据这些提示生成适当的响应。为了方便这个过程,标记人员获得已标记的数据;这些标记人员不仅提供提示,还为每个提示指定所需的响应。这便于对GPT模型进行监督式微调,因为既有输入提示,又有相应的输出响应。

在下一步中,使用从第一步获得的监督式微调模型。单个提示通过模型来传递,并生成多个响应。然后,标记人员对这些响应的质量进行评估和评定。每个生成的响应都被分配一个相应的奖励,这个奖励被用来训练另一个GPT模型:奖励模型。奖励模型本身就是一个模型,其功能是将初始提示和其中一个响应作为输入,生成奖励作为输出。这种奖励量化了响应的质量或好坏。

在第三步中,一个看不见的提示将被拿来通过监督式微调模型的复制品来传递。这将生成响应,然后使用奖励模型来评估响应的等级或质量。获得的等级用于进一步完善我们已经微调过的模型。这通过将等级合并到PPO模型的损失函数中来实现,允许通过反向传播来更新模型的参数。特别吸引人的地方是,这个过程不仅帮助模型表现出无害的行为,还使它能够生成实际的响应。这是由于奖励本身是基于响应的质量而生成的。

ChatSQL

现在不妨使用Python借助ChatGPT创建一个项目。该项目使用了LangChain框架。

我们的目标是使用纯文本从数据库检索信息。为此,我们使用MySQL作为目标数据库。然而,这种方法也可以用于在其他数据库上生成查询。示例数据库如下所示。

所有代码都可以在这里找到(https://github.com/ademakdogan/ChatSQL

+-----+--------------------------------------------------------+------------------------+-------------------+--------+------------------+
| ID  | Title                                                  | Author                 | Genre             | Height | Publisher        |
+-----+--------------------------------------------------------+------------------------+-------------------+--------+------------------+
|   1 | Fundamentals of Wavelets                               | Goswami, Jaideva       | signal_processing |    228 | Wiley            |
|   2 | Data Smart                                           | Foreman, John          | data_science      |   235 | Wiley            |
|   3 | God Created the Integers                                | Hawking, Stephen       | mathematics       |  197 | Penguin          |
|   4 | Superfreakonomics                                     | Dubner, Stephen        | economics         |  179 | HarperCollins    |
|   5 | Orientalism                                           | Said, Edward           | history           |   197 | Penguin          |
|   6 | Nature of Statistical Learning Theory, The                  | Vapnik, Vladimir       | data_science      |    230 | Springer         |
|   7 | Integration of the Indian States                           | Menon, V P             | history           |    217 | Orient Blackswan |
|   8 | Drunkard's Walk, The                                  | Mlodinow, Leonard      | science           |   197 | Penguin          |
|   9 | Image Processing & Mathematical Morphology             | Shih, Frank            | signal_processing |     241 | CRC              |
|  10 | How to Think Like Sherlock Holmes                      | Konnikova, Maria       | psychology        |   240 | Penguin          |
|  11 | Data Scientists at Work                                 | Sebastian Gutierrez    | data_science      |     230 | Apress           |
|  12 | Slaughterhouse Five                                    | Vonnegut, Kurt         | fiction           |    198 | Random House     |
|  13 | Birth of a Theorem                                     | Villani, Cedric        | mathematics       |   234 | Bodley Head      |
|  14 | Structure & Interpretation of Computer Programs             | Sussman, Gerald        | computer_science  |    240 | MIT Press        |
|  15 | Age of Wrath, The                                      | Eraly, Abraham         | history           |    238 | Penguin          |
|  16 | Trial, The                                             | Kafka, Frank           | fiction           |    198 | Random House     |
|  17 | Statistical Decision Theory'                               | Pratt, John            | data_science      |    236 | MIT Press        |
|  18 | Data Mining Handbook                                  | Nisbet, Robert         | data_science      |    242 | Apress           |
|  19 | New Machiavelli, The                                   | Wells, H. G.           | fiction           |    180 | Penguin          |
|  20 | Physics & Philosophy                                   | Heisenberg, Werner     | science           |    197 | Penguin          |
|  21 | Making Software                                       | Oram, Andy             | computer_science  |    232 | O'Reilly         |
|  .  | .......                                                 | .......                | ....              |    ... | ....             |
|  .  | .......                                                 | .......                | ....              |    ... | ....             |

ChatSQL由两个主要部分组成。首先,MySQL查询是通过ChatGPT由给定的纯文本生成的。执行这些生成的查询。在第二步中,对数据库中返回的结果进行评估。在这个阶段,结果可以直接呈现给用户,也可以发回给ChatGPT进行进一步的分析和解释。因此,您可以使用ChatGPT与您的数据库进行互动。

假设用户想要“显示篇幅大于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.

如果数据库列名称正确,ChatGPT将理解这些名称,并相应地响应查询。然而在一些情况下,数据库中的列名可能没有意义,或者ChatGPT可能无法完全搞清楚其上下文。因此,为了确保系统正常运行,有必要向ChatGPT提供有关数据库的先前信息。info.json文件可以用来添加信息。

+-----+--------------------------------------------------------+------------------------+-------------------+------+------------------+ 
| ID | aa                                                     | bb 
| cc               | dd    | ee          |
+-----+--------------------------------------------------------+------------------------+-------------------+------+------------------+ 
| 1 | Fundamentals of Wavelets                                   | Goswami, Jaideva 
| signal_processing  | 228  | Wiley         | 
| 2 | Data Smart                                               | Foreman, John 
| data_science      | 235  | Wiley         | 
| 3 | God Created the Integers                                    | Hawking, Stephen 
| mathematics      | 197  | Penguin       | 
| 4 | Superfreakonomics                                         | Dubner, Stephen 
| economics       | 179   | HarperCollins  | 
| 5 | Orientalism                                               | Said, Edward 
| history          | 197   | Penguin      |
| . | .......                                                     | .......
| ....             | ...    | ....           | 
| .  | .......                                                    | ....... 
| ....             | ...    | ....            |

比如说,我们有一个命名糟糕的数据库,如下所示。在这种情况下,有关数据库的必要信息被输入到了info.json文件中。

{“bt”: “Table Name”, “aa”: “Title of the book”, “bb”: “Author of the book”, “cc”: “Type of book”, “dd”: “Height of the book”, “ee”: “Book Publisher”}

然后使用相同的命令:

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 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)。

  • 项目代码仓库:https://github.com/ademakdogan/ChatSQL
  • GitHub:https://github.com/ademakdogan
  • 领英:https://www.linkedin.com/in/adem-akdoğan-948334177/

原文标题:ChatSQL: Enabling ChatGPT to Generate SQL Queries from Plain Text,作者:Adem Akdogan


相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...