上一篇文章 我在 vscode 插件里接入了 ChatGPT,解决了代码变量命名的难题 中,展示了如何在 vscode 插件中使用 ChatGPT 解决代码变量命名的问题。vscode 插件市场中有很多的翻译插件,但是在一些使用场景里是远远比不上 ChatGPT 的,比如只翻译一段 json 数据里的指定字段。那么 ChatGPT 还能做什么呢?能否取代已经存在的轮子?

以 lowcode 插件中的功能为例,看看能不能用 ChatGPT 替代。

根据 JSON 生成 API 请求方法

首先复制一段 json,比如:

{
"code": 200,
"msg": "",
"result": {
"records": [
{
"id": "1a2b3c4d5",
"costCenterCode": "ccx002",
"costCenterName": "财务部",
"accountingCode": "ac0887",
"bankAccountingCode": "bk1290",
"orderNumber": "od1089",
"orderAmount": "6158.36",
"confirmedTime": "2023-02-07T13:47:34.552Z",
"laborCostExcludingTax": "4629.05"
}
],
"total": 200
}
}

不使用 ChatGPT

使用 ChatGPT

可以发现,几乎达到了一样的效果,只是 ChatGPT 会慢一点。不使用 ChatGPT 时,插件内部是直接调用库将 json 转成 ts 类型,还做了一些边界处理,比如如果复制的是 json 变量而不是标准的 json 数据,需要将 json 变量变成 json 数据。使用 ChatGPT 对数据就没有很严格的要求,可以是 json 变量,也可以是 json 数据。

非 ChatGPT 的模板

<%- type %>

export interface I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Params {
id: number;
} export interface I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Data {
xx: string;
} export function <%= rawSelectedText %>(
params: I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Params,
data: I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Data,
) {
return request<I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Result>({
url: `xxxx`,
method: 'GET',
params,
data,
});
}

ChatGPT 的模板

<%- rawClipboardText %>
根据这段 json 生成 ts 类型,名字为 I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Result
和下面的代码一起返回
export interface I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Params {
id: number;
}
export interface I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Data {
xx: string;
}
export function <%= rawSelectedText %>(
params: I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Params,
data: I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Data,
) {
return request<I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Result>({
url: `xxxx`,
method: 'GET',
params,
data,
});
}
返回 markdown 代码块

模板会使用 ejs 进行编译。

根据 JSON 生成 MOCK 方法

也是先复制一段 json 数据。

不使用 ChatGPT

插件内部是直接遍历 json,把这一段代码通过字符串拼出来。

使用 ChatGPT

这里使用 ChatGPT 的时候,很难让它输出不需要修改就能直接使用的代码,如上的代码里输出了一段无关的内容。

// 调用方法
getMockData().then(data => { console.log(data); });

ChatGPT 使用的模板:

<%- rawClipboardText %>
生成一个 js 方法,方法名为 <%= rawSelectedText || 'getRandomData' %>,
方法内部使用 mock.js 生成跟上面的 json 一样字段的数据,如果有数组则生成10个元素,
最终的数据使用 Promise.resolve 返回
返回 markdown 代码块

根据 JSON 生成 TS 类型

先复制一段 json 数据

不使用 ChatGPT

使用 ChatGPT

根据 JSON 生成 TS 类型-去除接口名称

这个用处是:后端接口可以连调的时候替换原有自己预先写的接口类型。

不使用 ChatGPT

使用 ChatGPT

根据 TS 类型生成 API 请求方法

使用场景:后端没有给接口文档,前端根据原型和设计稿抽象出数据模型,根据数据模型生成 mock 的 API 请求方法(mock数据通过真实后端服务提供)。

只复制类型体,不要类型名称,比如:

{
records: {
id: string;
costCenterCode: string;
costCenterName: string;
accountingCode: string;
bankAccountingCode: string;
orderNumber: string;
orderAmount: string;
confirmedTime: string;
laborCostExcludingTax: string;
}[];
total: number;
}

不使用 ChatGPT

使用 ChatGPT

因为只是将剪贴板里的内容在模板里做了一下拼装,完全用不到 ChatGPT。

模板如下:

export interface I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Result {
code: number;
msg: string;
result: <%- rawClipboardText %>
} export interface I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Params {
id: number;
} export interface I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Data {
xx: string;
} export function <%= rawSelectedText %>(
params: I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Params,
data: I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Data,
) {
return request<I<%= rawSelectedText.slice(0, 1).toUpperCase() + rawSelectedText.slice(1) %>Result>({
url: `xxxx`,
method: 'GET',
params,
data,
});
}

根据 TS 类型生成 MOCK 方法

使用场景:后端没有给接口文档,前端根据原型和设计稿抽象出数据模型,根据数据模型生成 mock 方法(mock 数据没有通过后端服务提供)。

只复制类型体,不要类型名称,比如:

{
records: {
id: string;
costCenterCode: string;
costCenterName: string;
accountingCode: string;
bankAccountingCode: string;
orderNumber: string;
orderAmount: string;
confirmedTime: string;
laborCostExcludingTax: string;
}[];
total: number;
}

不使用 ChatGPT

使用 ChatGPT

根据 JSON 生成 KOA MOCK

使用场景:mock 数据由 koa 服务提供,根据 json 生成 koa 路由。

不使用 ChatGPT

使用 ChatGPT

根据 TS 类型生成 MOCK

使用场景:后端没有给接口文档,前端根据原型和设计稿抽象出数据模型,根据数据模型生成 koa mock 服务。

只复制类型体,不要类型名称,比如:

{
records: {
id: string;
costCenterCode: string;
costCenterName: string;
accountingCode: string;
bankAccountingCode: string;
orderNumber: string;
orderAmount: string;
confirmedTime: string;
laborCostExcludingTax: string;
}[];
total: number;
}

不使用 ChatGPT

使用 ChatGPT

根据 TS 类型生成组件文档

这也是曾经造的轮子 typescript-to-markdown,一个 utools 插件。

效果如图:

使用 ChatGPT

可以看出来,并不是很完美。

总结

ChatGPT 很难输出不需要修改直接粘贴到编辑器中就能用的代码,相比于我们硬编码写的插件,在效率上还是有所欠缺。但是借助插件来管理 ChatGPT Prompt 模板,复制粘贴还是比上官网或者其它客户端快很多的。

文章没有提到拉取 YAPI 接口文档生成代码的功能,因为 ChatGPT 并不能去拉取接口获取数据,最近在研究 LangChain,借助这玩意儿或许可以实现。

Prompt 模板

上面所有的模板已经共享,通过如下方式可以下载到你的项目中:

曾经辛苦造的轮子,现在能否用 ChatGPT 替代呢?的更多相关文章

  1. 「造个轮子」——cicada 设计一个配置模块

    前言 在前两次的 cicada 版本中其实还不支持读取配置文件,比如对端口.路由的配置. 因此我按照自己的想法创建了一个 issue ,也收集到了一些很不错的建议. 最终其实还是按照我之前的想法来做了 ...

  2. 「造个轮子」——cicada 源码分析

    前言 两天前写了文章<「造个轮子」--cicada(轻量级 WEB 框架)> 向大家介绍了 cicada 之后收到很多反馈,也有许多不错的建议. 同时在 GitHub 也收获了 80 几颗 ...

  3. 造个轮子之基于 Netty 实现自己的 RPC 框架

    原文地址: haifeiWu和他朋友们的博客 博客地址:www.hchstudio.cn 欢迎转载,转载请注明作者及出处,谢谢! 服务端开发都会或多或少的涉及到 RPC 的使用,当然如果止步于会用,对 ...

  4. 我厌倦了 Redux,那就造个轮子 Rectx:第三集

    仓库:215566435/rectx 前言 麻烦快去我的仓库里面喷: 老子学不动了,求不要更新. 呵呵,你没想到吧,这玩意儿竟然有第三集!我靠,我自己都没想到,让我们悄悄的回顾一下前两集完全没想到,竟 ...

  5. 尝鲜刚发布的 SpringFox 3.0.0,以前造的轮子可以不用了...

    最近 SpringFox 3.0.0 发布了,距离上一次大版本2.9.2足足有2年多时间了.可能看到这个名字,很多读者会有点陌生.但是,只要给大家看一下这两个依赖,你就知道了! <depende ...

  6. Asp.net Mvc 请求是如何到达 MvcHandler的——UrlRoutingModule、MvcRouteHandler分析,并造个轮子

    这个是转载自:http://www.cnblogs.com/keyindex/archive/2012/08/11/2634005.html(那个比较容易忘记,希望博主不要生气的) 前言 本文假定读者 ...

  7. 「造个轮子」——cicada(轻量级 WEB 框架)

    前言 俗话说 「不要重复造轮子」,关于是否有必要不再本次讨论范围. 创建这个项目的主要目的还是提升自己,看看和知名类开源项目的差距以及学习优秀的开源方式. 好了,现在着重来谈谈 cicada 这个项目 ...

  8. dva的effect那么难用,自己造一个轮子吧

    背景 对于dva这个开发框架,国内从事react的前端工程师多半不会感到陌生,dva完善的开发体系和简单的api,让其被广泛运用到实际工作中.我所在的公司也是长期使用dva作为基础的开发框架,虽然好用 ...

  9. 用 rollup + gulp 造个轮子,别说还挺香

    前戏 我是16年入了前端的坑,17年知道了gulp和rollup这两个玩意儿.由于那时webpack势头很猛,便一直没有正眼瞧过它一眼. 直到20年进了一家小公司,做了很多类似的小项目,相同的代码拷来 ...

  10. 开源一个自己造的轮子:基于图的任务流引擎GraphScheduleEngine

    GraphScheduleEngine是什么: GraphScheduleEngine是一个基于DAG图的任务流引擎,不同语言编写.运行于不同机器上的模块.程序,均可以通过订阅GraphSchedul ...

随机推荐

  1. Web前端开发必看的100道大厂面试题

    1. 说说gulp和webpack的区别 开放式题目 Gulp强调的是前端开发的工作流程.我们可以通过配置一系列的task,定义task处理的事务(例如文件压缩合并.雪碧图.启动server.版本控制 ...

  2. [Linux/Java SE]查看JAR包内的类 | JAR 命令 | 反编译

    1 查看JAR包内的类 另一个思路: 解压JAR包jar -xf <jarPath> 1-1 单JAR包 -t list table of contents for archive(列出存 ...

  3. Podman Desktop安装与使用-Windows10

    Podman Desktop安装与使用-Windows10 下载 containers/podman 地址 Podman Desktop Downloads 地址 我这里演示的是podman-v4.4 ...

  4. 【数据结构与算法】无向图的结构与遍历 BFS&DFS

    1 表示无向图的数据类型 1.1 邻接矩阵 可以使用一个V*V的二维布尔矩阵,当定点v和定点w相连的时候,定义第v行第w列的值为true,否则为false.邻接矩阵不适合定点较多的情况,含有百万的顶点 ...

  5. DRF的认证组件(源码分析)

    DRF认证组件(源码分析) 1. 数据库建立用户表 在drf中也给我们提供了 认证组件 ,帮助我们快速实现认证相关的功能,例如: # models.py from django.db import m ...

  6. jquery 禁用按钮无效 disabled属性设置无效

    禁用按鈕 $(this).prop("disabled", true); 啟用按鈕 $(this).prop("disabled", false); 禁用按鈕 ...

  7. Django 如何使用 Celery 完成异步任务或定时任务

    以前版本的 Celery 需要一个单独的库(django-celery)才能与 Django 一起工作, 但从 Celery 3.1 开始,情况便不再如此,我们可以直接通过 Celery 库来完成在 ...

  8. Linux安装Net7SDK运行Net项目

    Linux安装Net7SDK运行Net项目 安装Net7 SDK 1.安装sdk依赖环境 wget https://packages.microsoft.com/config/ubuntu/20.04 ...

  9. [C++基础入门] 5、 数组

    文章目录 5 数组 5.1 概述 5.2 一维数组 5.2.1 一维数组定义方式 5.2.2 一维数组数组名 5.2.3 冒泡排序 5.3 二维数组 5.3.1 二维数组定义方式 5.3.2 二维数组 ...

  10. [C++提高编程] 1、模板

    文章目录 1 模板 1.1 模板的概念 1.2 函数模板 1.2.1 函数模板语法 1.2.2 函数模板注意事项 1.2.3 函数模板案例 1.2.4 普通函数与函数模板的区别 1.2.5 普通函数与 ...