写点什么

ChatGPT 可收费的那种产品该如何实现?一点尝试 | 社区征文

作者:非喵鱼
  • 2023-02-22
    重庆
  • 本文字数:2438 字

    阅读完需:约 8 分钟

ChatGPT 可收费的那种产品该如何实现?一点尝试 | 社区征文

导读|时隔两个月,勇哥终于把 chatGPT 生成 SQL 的功能发布上线了,支持统计分析查询、创建表、数据生成等多种全面的 SQL DDL 生成能力,本文就和大家聊聊相关功能的使用和背后实现逻辑,并希望相关功能能帮助大家在工作中提升一定的工作效率。同时也提醒一下大家,SQL 能力很重要,请大家不要在工作中完全依赖工具。阅读本文你会了解到 Tinkle 工具 SQL 生成功能如何使用?最后了解如何使用 chatGPT API 进行落地产品的实施?

Tinkle SQL 生成工具使用介绍

Tinkle 是本人开发的一款国产数据库管理客户端,目前支持 Mysql、Mariadb、PostgreSQL 等数据库。区别于其它数据库,其优势是提供了数据可视化、SQL 练测、数据填充、SQL 逆代码生成、AI SQL 生成等创新功能。


本文主要介绍 AI SQL 生成功能,因此先介绍一下其支持的 SQL 生成能力:


  • 能生成:多表关联查询的 SQL

  • 能生成:插入测试数据的 SQL

  • 能生成:查询/统计分析的 SQL

  • 能生成:创建表结构的 SQL

  • 能生成:修改表结构的 SQL

使用步骤介绍

使用 SQL 生成功能非常简单,生成的 SQL 可以直接运行,使用仅以下 3 步:


1、选择你可能关联查询的表,右键打开 SQL 生成界面;


2、输入你的需求,并点击 Run 按钮即可为你生成 SQL;


3、点击运行按钮预览结果。



预览多表关联查询 SQL 生成

下面案例使用了 teacher 表中的数据张三,直接查询 course 课程表中的信息,生成的结果还是挺准确的。注意必须使用'查询'开头。



预览插入测试数据 SQL 生成

下面案例直接给课程表 course 增加 10 条数据,从生成的结果,可以看出生成的数据字面含义还是非常贴合我们自己的表。



预览创建表结构 SQL 生成

下面案例要求新增一张表,用于存储老师的上课记录。从生成结果看,创建表的语法一点问题都没得,字段和表名基本满足阿里数据库规约。



预览统计分析 SQL 生成

下面案例要求统一某一门课程成绩前 3 的学生,从生成的结果看貌似正确,但是结果 limit 不支持在子查询中使用,要区分版本的支持。即时这样,生成的结果也可以带给我 SQL 编写上的一些思路,有参考价值。



chatGPT 功能落地实施介绍

Tinkle SQL 生成功能诞生过程

早在 12 月 16 日其实上述功能我就已经实现,一值拖到现在才正式公开。期间其实一直在思考如何更好的落地 chatGPT 应用。苦于这是一个新的领域,参考的产品太少,最后没有找到更好的方式,就还是以当前的方式上线了。


程序要与 chatGPT 对接,那就需要使用其 API,API 这点反而出乎意料,chatGPT 提供的接口非常的简单,基本 10 行代码就可以搞定。但有没有难点呢?其实 chatGPT 接口最难的是 prompt 的设计,一个好的 prompt 参数设计,能让结果更为准确,另外注意的 prompt 也包括了上下文。


SQL 生成的 prompt 可设计为: 上下文 SQL 需求\\n 生成类型

例:

  • 上下文:###之间的内容为上下文,描述了需求的约束条件

  • SQL 需求:就是要 SQL 的描述信息,比如:查询员工信息

  • 生成类型:就是生成 SQL 的类型,比如:SELECT


### 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 SELECT
复制代码


有了 prompt 设计,最后整合一下 API 代码即可实现相关功能,为帮助大家,我也把直接贴出来:


public class AiUtils {
/** * 生成需求 * @return */ public static List<CompletionChoice> generatorSqlQuery(String token,String tables,String demand){ String keyword = ""; if(demand.contains("查询")||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("插入")||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"; }else{ keyword = "SELECT"; } 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 相关开发的说难不难,但是做好确是有一定的困难,具体可参考以下步骤去实施:


  • 选择一个你感兴趣的场景

  • 设计一个优秀的 prompt:落地功能效果,直接由这一步决定;

  • 这个需要通过大量的测试,最终总结出一个较好的 prompt

  • 对接 Open Ai 相关接口

  • 通过 GUI 图形化界面进行包装


最后你觉得这个 chatGPT 生成 SQL 功能可收费吗?欢迎评论区探讨~


发布于: 2023-02-22阅读数: 44
用户头像

非喵鱼

关注

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

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

评论

发布
暂无评论
ChatGPT 可收费的那种产品该如何实现?一点尝试 | 社区征文_Java_非喵鱼_InfoQ写作社区