写点什么

chatGPT 实战之「基于你的数据库,为你智能生成 SQL」

作者:非喵鱼
  • 2022-12-15
    重庆
  • 本文字数:2148 字

    阅读完需:约 7 分钟

chatGPT实战之「基于你的数据库,为你智能生成SQL」

chatGPT 为你生成 SQL 的落地效果演示

这几天很很多粉丝进行了深度交流,发现大家对于 SQL 学习或者编写都遇到过困难,因此勇哥突发奇想是否可以借助 chatGPT 来帮一下大家呢?于是就开启了 chatGPT 的落地之旅。从官网了解到 chatGPT 支持 49 种场景的,其中 2 中常见与 sql 相关,既:


  • 无依据,通过一句话来生成 sql 语句

  • 有依据,通过一句话来生成 sql 语句


这两种方式进过效果对比,第 2 种效果非常的好,于是我就在我的产品中按照第 2 中模式开发了一个对大家有帮助的功能:“基于你自己的数据库结构,通过一句中文,自动生成 SQL 语句”,演示效果如下:


第一种生成方式:单独窗口生成 SQL,操作步骤:

  • 1、选中生成 SQL 可能要用到的表,这个将作为上下文,发送给 chatGPT

  • 2、在打开的窗口中用中文描述你想要的 SQL 的需求,然后点击 RUN 按钮

  • 3、生成成功后的 SQL 会在右中面板中显示出来,同时你可以直接点运行,查看生成 SQL 语句的执行结果



第二种生成方式:查询器中生成 SQL 操作步骤:

  • 1、随便打开一个数据库表的查询器

  • 2、在查询器中写一句描述要生成 sql 语句的中文,选中后右键点击【Sq lGenerator】菜单,即可生成

  • 3、选中生成的 SQL 语句,即可执行查看结果


chatGPT 为你生成 SQL 的落地代码赏析

chatGPT 的入门案例

其实 chatGPT 的 API 调用非常简单,但是复杂的是他的参数非常的复杂,举个两个例子:

  • 1、下面 temperature 参数写成 0.0D 或者 0.1D,其它参数都不变,那么获得结果都是不同类的,也就是 0.0D 是你想要的 SQL,0.1D 就变成了小说内容了;

  • 2、prompt 是输入的信息,49 中场景,prompt 的输入格式就有 49 种,非常复杂,一不小说错误输入,就会获取不到结果;

PS:下周一勇哥回专门开一场直播,来教大家入门 chatGPT,以及 49 种场景的介绍,欢迎大家关注我,到时候直播实现好及时通知。


public static void main(String[] args) {    String token = "换成你自己的token";
OpenAiService service = new OpenAiService(token); CompletionRequest completionRequest = CompletionRequest.builder() .model("code-davinci-002") .prompt("### Mysql SQL tables, 表字段信息如下:\\n#\\n# Employee(id, name, department_id)\\n# Department(id, name, address)\\n# Salary_Payments(id, employee_id, amount, date)\\n#\\n### 创建表的语法\\n HELP") .temperature(0.0D) .maxTokens(1000) .topP(1D) .frequencyPenalty(0D) .presencePenalty(0D) .stop(Arrays.asList("#",";")) .build(); service.createCompletion(completionRequest).getChoices().forEach(System.out::println);}
复制代码

chatGPT 的落地案例

下面这段代码就是最开始我验收那些效果的真实代码,基本和入门代码差不多,不同的是我在上面增加了输入需求的初步过滤,这样生成的 SQL 精准度会高非常多。


public class AiUtils {
/** * 生成需求 * @return */ public static List<CompletionChoice> generatorSqlQuery(String tables,String demand){ String keyword = ""; if(demand.contains("查询")||demand.contains("select")){ keyword = "SELECT"; }else if(demand.contains("删除数据")||demand.contains("delete")){ keyword = "DELETE"; }else if(demand.contains("删除")||demand.contains("drop")){ keyword = "DROP"; }else if(demand.contains("修改数据")||demand.contains("update")){ keyword = "UPDATE"; }else if(demand.contains("修改")||demand.contains("alter")){ keyword = "ALTER"; }else if(demand.contains("增加")||demand.contains("insert")){ keyword = "INSERT"; }else if(demand.contains("创建")||demand.contains("create")){ keyword = "CREATE"; }else if(demand.contains("显示")||demand.contains("show")){ keyword = "SHOW"; }else if(demand.contains("清空")||demand.contains("truncate")){ keyword = "TRUNCATE"; } OpenAiService service = new OpenAiService(TOKEN); CompletionRequest completionRequest = CompletionRequest.builder() .model("code-davinci-002") .prompt(String.format("%s %s\\n%s",tables,demand,keyword)) .temperature(0.0D) .maxTokens(1000) .topP(1D) .frequencyPenalty(0D) .presencePenalty(0D) .stop(Arrays.asList("#",";")) .build(); List<CompletionChoice> choices = service.createCompletion(completionRequest).getChoices(); for (CompletionChoice choice : choices) { choice.setText(keyword+choice.getText()); } return choices; }
}
复制代码

chatGPT 落地收获

chatGPT 更多的应用场景和落地注意事项,勇哥将在 12 月 19 号的直播中阐述,欢迎各位同学来捧场交流。+关注,届时好通知直播时间。


发布于: 2022-12-15阅读数: 34
用户头像

非喵鱼

关注

技术专业一点,才能多一点时间陪家人! 2018-11-28 加入

Java生态开发高效工具 Tinkle、Boom的作者,欢迎大家持续关注!

评论

发布
暂无评论
chatGPT实战之「基于你的数据库,为你智能生成SQL」_Java_非喵鱼_InfoQ写作社区