引言
ChatGPT一经推出,火爆全世界。而在我们日常的编程开发中,Copilot 带来的各种便利,也无时无刻的提醒着我们:AI 从来没有离我们这么近,这么接地气。
那么,ChatGPT有啥用?和我有啥关系?我应该学习 ChatGPT吗?现在学习 ChatGPT 还晚吗?
带着这些问题,我们来看一个真实案例,看完后或许你会有答案。
案例背景
作者最近在开发一个数据库脏数据修复脚本,但是由于考虑不全,修复后产生了新的问题,需要对修复数据进行二次处理。
因为公司客户采用私有化部署,所以会有对应的技术支持(售后)专门对接和解决客户问题。
而恰巧对接这个客户问题的技术支持对 Linux 命令、正则这一些文本处理类的技能不太熟练,于是就有了ChatGPT 的用武之地。
要做什么
扫描脚本生成的 SQL 语句文件,大概有 5000 条数据(抛开注释),内容格式为:
sql
-- 2653876.docx
update ets.resources_tags set otag='17F57AF9E54044029E8EEAF7CA0B731D' where objectId='00000DFEAE284C389BECAC3C2FE28E57';
-- 8827560.docx
update ets.resources_tags set otag='98F198C57C4E4B8CBE3D37030C7C325D' where objectId='00000A78E9D14058A2DC19780F6F4AAB';
-- 7888598.docx
update ets.resources_tags set otag='E36BCA0E263B4294A8F8A4934D50E9CB' where objectId='00000F87F8C84BD78EECB59E392DDE29';
现在需要对这个文件进行二次处理:
- 把这 5000 条数据的 otag 值批量改为 2024
- 查询这 5000 条数据中,那些数据造成了二次错误,统计一下有多少条。
任务一可以用任何编辑器,比如 VS Code 查找+替换处理。任务二稍微麻烦一点,需要解析这个文件,然后从 otag 中提取 '' 中的内容,替换到下面 SQL 语句的 in 中:
sql
select count(1) from eofs.metadata where objectId in
('ABC3D6FBD5194B4981EA4AE7A804A633', '2A97CA7AA33A45D9AE03158102AA69FF', '4B94D26B88CD4F519B0F413073E5D09C')
and basic_attr=4 and name ='0';
我们看到,这本质上就是一个数据处理的场景,涉及到 Linux命令、正则表达式和 SQL 等技术,于是这位同事绞尽脑汁:

如果是你,你会怎么做?
而我是怎么做的呢?我问了下 ChatGPT,5分钟就解决了上面的2个问题:
- 把这 5000 条数据的 otag 值批量改为 2024
- 查询这 5000 条数据中,那些数据造成了二次错误,统计一下有多少条。
下面让我们看一下,我是怎么提问的并一步一步解决上面的问题的。
使用 ChatGPT 处理数据
第一步:提取 otag 值
第一个问题,为了把这 5000 条数据的 otag 值批量改为 2024,我需要把文件里面的 otag 值提取出来,以构造下列 SQL 语句:
sql
update eet.sresources_tags set otag='2024' where parentId in ('value1', 'value2', ...);
我是这样问的:
使用 sed 命令,从下面的文本中能提取 otag='' 中的值: -- 2653876.docx update ets.resources_tags set otag='17F57AF9E54044029E8EEAF7CA0B731D' where objectId='00000DFEAE284C389BECAC3C2FE28E57'; -- 8827560.docx update ets.resources_tags set otag='98F198C57C4E4B8CBE3D37030C7C325D' where objectId='00000A78E9D14058A2DC19780F6F4AAB'; -- 7888598.docx update ets.resources_tags set otag='E36BCA0E263B4294A8F8A4934D50E9CB' where objectId='00000F87F8C84BD78EECB59E392DDE29';
ChatGPT回答:

我们测试一下,首先准备一个文件,内容如下:

我们把命令贴进去,执行后:

牛逼!你还在查 sed 命令和语法,而我已经下班了。
第二步:合并逗号拼接
上面的格式,同事说还得手动行转列,加逗号拼接,太麻烦:

行,继续问:
使用 sed 命令,从下面的文本中能提取 otag='' 中的值,并用 , 拼接: -- 2653876.docx update ets.resources_tags set otag='17F57AF9E54044029E8EEAF7CA0B731D' where objectId='00000DFEAE284C389BECAC3C2FE28E57'; -- 8827560.docx update ets.resources_tags set otag='98F198C57C4E4B8CBE3D37030C7C325D' where objectId='00000A78E9D14058A2DC19780F6F4AAB'; -- 7888598.docx update ets.resources_tags set otag='E36BCA0E263B4294A8F8A4934D50E9CB' where objectId='00000F87F8C84BD78EECB59E392DDE29';

测试:

第三步:加单引号
到这里,这位同事发现 ChatGPT 好用了,于是主动让我再问一下:

来,改问题:
使用 sed 命令,从下面的文本中提取 otag 的值,并用 , 拼接逗号拼接,并且前后增加单引号括起来。 -- 2653876.docx update ets.resources_tags set otag='17F57AF9E54044029E8EEAF7CA0B731D' where objectId='00000DFEAE284C389BECAC3C2FE28E57'; -- 8827560.docx update ets.resources_tags set otag='98F198C57C4E4B8CBE3D37030C7C325D' where objectId='00000A78E9D14058A2DC19780F6F4AAB'; -- 7888598.docx update ets.resources_tags set otag='E36BCA0E263B4294A8F8A4934D50E9CB' where objectId='00000F87F8C84BD78EECB59E392DDE29';

测试:

小结
到这里,我们喝着茶,聊着天,敲了几次键盘,就完成了一个数据处理任务,不需要查 sed 命令、正则表达式语法。
我们把这种文件:
sql
-- 2653876.docx
update ets.resources_tags set otag='17F57AF9E54044029E8EEAF7CA0B731D' where objectId='00000DFEAE284C389BECAC3C2FE28E57';
-- 8827560.docx
update ets.resources_tags set otag='98F198C57C4E4B8CBE3D37030C7C325D' where objectId='00000A78E9D14058A2DC19780F6F4AAB';
-- 7888598.docx
update ets.resources_tags set otag='E36BCA0E263B4294A8F8A4934D50E9CB' where objectId='00000F87F8C84BD78EECB59E392DDE29';
通过向 ChatGPT 提问:使用 sed 命令,从下面的文本中提取 otag 的值,并用 , 拼接逗号拼接,并且前后增加单引号括起来。
不费吹灰之力,转换成了我们想要的SQL:

从此,又多了一个粉丝:

批量转换为 2024
小伙伴尝到了甜头,奈何没有梯子,于是又委托我:

小 case,上 GPT:
使用 linux 命令,把下面文本中的 otag='' 的值统一替换为 2024: -- 2653876.docx update ets.resources_tags set otag='17F57AF9E54044029E8EEAF7CA0B731D' where objectId='00000DFEAE284C389BECAC3C2FE28E57'; -- 8827560.docx update ets.resources_tags set otag='98F198C57C4E4B8CBE3D37030C7C325D' where objectId='00000A78E9D14058A2DC19780F6F4AAB'; -- 7888598.docx update ets.resources_tags set otag='E36BCA0E263B4294A8F8A4934D50E9CB' where objectId='00000F87F8C84BD78EECB59E392DDE29';

测试:
优秀。
文心一言
因为没有梯子,百度的大模型刚好又公测了,我想着推荐一波,然而我只能说,还有进步空间:

测试(语法错误😀):

生成一串很长的代码:

总结
所以,谁应该学习 ChatGPT 呢?我的答案是任何人。
特别是和计算机打交道的,软件工程师、测试、技术支持等就不说了,公司另外一个让我印象深刻的一个例子是:老板秘书都在使用 ChatGPT,用来干啥?会议录音,自动转换为文字,管项目时,让 GTP 解释 SQL。
作者简介:一线Coder,公众号《Go和分布式IM》运营者,开源项目: CoffeeChat 、interview-golang 发起人 & 核心开发者,终身程序员。