ChatGPT 可收费的那种产品该如何实现?一点尝试

news2024/11/27 18:37:28

导读|时隔两个月,勇哥终于把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功能可收费吗?欢迎评论区探讨~

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

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

相关文章

手把手搭建springboot项目05-springboot整合Redis及其业务场景

目录前言一、食用步骤1.1 安装步骤1.1.1 客户端安装1.2 添加依赖1.3 修改配置1.4 项目使用1.5 序列化二、应用场景2.1 缓存2.2.分布式锁2.2.1 redis实现2.2.2 使用Redisson 作为分布式锁2.3 全局ID、计数器、限流2.4 购物车2.5 消息队列 (List)2.6 点赞、签到、打卡 (Set)2.7 筛…

如何弄小程序?公司企业可以这样做小程序

公司企业现在对于小程序的需求已经是刚需了&#xff0c;即使已经有官网的情况下&#xff0c;也会考虑再弄一个小程序来做小程序官网。那么公司企业如何弄小程序呢&#xff1f;下面跟大家说说方法。 流程一、找小程序服务商 由于一些公司企业并不像现在的互联网公司企业那样有…

考试系统 (springboot+vue前后端分离)

系统图片 下载链接 地址&#xff1a; http://www.gxcode.top/code 介绍 一款多角色在线培训考试系统&#xff0c;系统集成了用户管理、角色管理、部门管理、题库管理、试题管理、试题导入导出、考试管理、在线考试、错题训练等功能&#xff0c;考试流程完善。 技术栈 Spr…

Java8中@Contended和伪共享

Java8引入了Contented这个新的注解来减少伪共享(False Sharing)的发生。 sun.misc.Contended注解是被设计用来解决伪共享问题的 文章目录1.缓存行2.伪共享(False Sharing)2.1 CPU的缓存机制3.填充(Padding)4.Contended方式4.总结1.缓存行 CPU读取内存数据时并非一次只读一个字…

ATTCK实战系列——红队实战(二)

网络配置 网卡&#xff1a; WEB&#xff1a; PC&#xff1a; DC&#xff1a; IPWEB10.10.10.80&#xff08;内&#xff09;/192.168.111.80&#xff08;外&#xff09;PC10.10.10.201&#xff08;内&#xff09;/192.168.111.201&#xff08;外&#xff09;DC10.10.10.10物理机…

评论字数统计案例、评论回车发布、 Tab 栏切换、验证码倒计时、显示与隐藏密码——DOM事件

目录 一、DOM事件 1. 评论字数统计案例 2. 评论回车发布 3. Tab 栏切换 4. 验证码倒计时 5. 显示与隐藏密码 一、DOM事件 1. 评论字数统计案例 该案例中的显示输入字数及最大字数模块.wrapper .total 刚开始是看不见的&#xff0c;使用的是不透明度&#xff08;opacit…

量化交易-单因子分析-alphalens

1. 数据准备 1.1 计算因子IC重要函数 def get_clean_factor_and_forward_returns(factor,prices,groupbyNone,binning_by_groupFalse,quantiles5,binsNone,periods(1, 5, 10),filter_zscore20,groupby_labelsNone,max_loss0.35,zero_awareFalse,cumulative_returnsTrue)facto…

Nginx优化与防盗链

Nginx优化与防盗链 &#x1f4d2;博客主页&#xff1a; 微笑的段嘉许博客主页 &#x1f4bb;微信公众号&#xff1a;微笑的段嘉许 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由微笑的段嘉许原创&#xff01; &#x1f4c…

图文并茂详解NAT协议(含实例分析)

什么是 NAT 协议 我们的计算机要想访问互联网上的信息&#xff0c;就需要一个地址&#xff0c;而且这个地址是大家&#xff08;其他主机&#xff09;所认可的&#xff0c;是公共的&#xff0c;这个地址也叫做公有 IP 地址。 与之相对的&#xff0c;除了公有 IP 地址外&#x…

Python自动化测试框架【Allure-pytest功能特性介绍】

Python自动化测试框架【Allure-pytest功能特性介绍】 目录&#xff1a;导读 前言 生成报告 测试代码 目录结构 Allure特性 Environment Categories Fixtures and Finalizers allure.attach 总结 写在最后 前言 Allure框架是一个灵活的轻量级多语言测试报告工具&am…

【PMP考试最新解读】第七版《PMBOK》应该如何备考?(含最新资料)

PMP新版大纲加入了ACP敏捷管理的内容&#xff0c;而且还不少&#xff0c;敏捷混合题型占到了 50%&#xff0c;前不久官方也发了通知8月启用第七版《PMBOK》&#xff0c;大家都觉得考试难度提升了&#xff0c;我从新考纲考完下来&#xff0c;最开始也被折磨过一段时间&#xff0…

玩游戏用哪个牌子的蓝牙耳机最好?打游戏无延迟的蓝牙耳机

作为一名苦逼的打工人&#xff0c;从早忙到黑&#xff0c;每天最期待的事莫过于下班回到家或是周末闲暇时光&#xff0c;来两把王者或吃鸡&#xff0c;配合无线游戏耳机&#xff0c;效果直接拉满&#xff0c;下面分享几款打游戏无延迟的蓝牙耳机。 一、南卡小音舱蓝牙耳机 蓝…

孪生工厂:机械臂加工产线 HMI 监控界面

2018 年&#xff0c;世界经济论坛(WEF)携手麦肯锡公司共同倡议并正式启动了全球“灯塔工厂网络项目”(Lighthouse Network)&#xff0c;共同遴选率先应用工业革命 4.0 技术实现企业盈利和持续发展的创新者与示范者。这就使得工厂系统需要对各流水线及生产运行成本方面进行多角度…

设计模式(十五)-面向对象概念

软件设计&#xff08;十五&#xff09;-UML建模&#xff08;下&#xff09;https://blog.csdn.net/ke1ying/article/details/129152487 一、设计原则 1、单一职责&#xff1a;设计目的单一的类。 2、开放-封闭原则&#xff1a;对扩展开放&#xff0c;对修改关闭。 3、里氏替…

微服务架构中的缓存设计浅析

在微服务架构中&#xff0c;缓存中间件越来越成为不可或缺的组件&#xff0c;下面聊聊微服务环境下的缓存设计。 1、简介 缓存在应用软件架构中是提高性能最直接的方式&#xff0c;如下 假设应用程序将数据存储在Mysql中&#xff0c;众所周知Mysql会将数据存储在硬盘上以防止…

git 拉取远程分支到本地

目录&#xff1a;***&#xff01;本小作者&#xff0c;是将终端和Git的可视化插件结合使用&#xff0c;刚接触的可以自习看一下&#xff0c;内容简单&#xff0c;避免弯路&#xff01;***一&#xff0c;简单了解远程分支1&#xff0c;连接远程&#xff1a;2&#xff0c;提交&am…

SpringBoot使用validator进行参数校验

Validated、Valid和BindingResultBean Validation是Java定义的一套基于注解的数据校验规范&#xff0c;比如Null、NotNull、Pattern等&#xff0c;它们位于 javax.validation.constraints这个包下。hibernate validator是对这个规范的实现&#xff0c;并增加了一些其他校验注解…

业务流程建模标注(BPMN)详细介绍

1、基本信息摘要&#xff1a;该文章的目的是对BPMN(Business Process Modeling Notation)的概要描述和介绍。描述基本的BPMN符号&#xff0c;包括这些图元如何组合成一个业务流程图&#xff08;Business Process Diagram&#xff09;2、BPMN简介2.1概述该文章的目的是对BPMN(Bu…

pytest之fixture用法

特点及优势1、命令灵活&#xff1a;对于setup.teardown&#xff0c;可以不起这两个名字2、数据共享&#xff1a;在conftest.py配置里写的方法可以实现数据共享&#xff0c;不需要import导入&#xff0c;可以跨文件共享3、scope的层次及神奇的yield组合相当于各种setup和teardow…

MySQL —— 表的操作

文章目录1. 创建表2. 查看表结构3. 修改表3.1 向表中插入数据3.2删除表中的数据3.3 修改表的性质3.3.1 添加字段3.3.2 修改字段的长度3.3.3 删除字段3.3.4 修改字段名3.3.5 修改表名4. 删除表5. 备份表前言&#xff1a; 本文会详细的讲解&#xff0c;在MySQL中表的操作。1. 创建…