用了一段时间 GPT-4,说说我们如何与 AI 相处的一点想法

swift 发布于 2023年06月08日

ChatGPT 的话题应该是最近大家讨论最多的了。 这次和大家聊聊我这段时间使用它的一点感受。

最近经常有各种内容在说 ChatGPT 会取代某某职业之类的。 怎么说呢,这种事情看你怎么去想。 我们不去聊过于虚无的东西,只和大家分享一些实际的体验。

前段时间也升级到了 GPT-4,下面我就从一个开发者的角度,来和大家分享下,我用 GPT-4 这些日子,给我的工作效率带了什么样的改变。

GPT 是一个不错的程序员

接下来的分享都是基于 GPT-4 模型。

说他是一个不错的程序员,前提是在你给他足够的信息的情况下。 他是辅助程序员去构建项目的 AI, 比如下面这个例子:

我这个 prompt 给了他非常多并且明确的信息, 我告诉他用 nodejs 的 knex 库来实现数据库访问操作,并且我告诉他这个方法要接受的参数 user_id 和 task_prompt, 以及如何给各个字段取值。

然后我还把数据库定义的完整 migrate 代码也贴在了这条消息里。我们再来看下 GPT-4 给我的回应:

这个结果相当不错, 它连方法名都帮我想好了, createTask。 并且里面的代码逻辑完全符合我之前给他描述的内容。 当然,这个生成的内容多少有一点瑕疵。 比如对于 returning("id") 的调用, 因为我的应用是基于 MySQL 数据库的实现, 所以并不支持 returning("id") 这个方法, 不过这也不奇怪,我前面给 GPT-4 的信息中也并没有提到我的数据库实现是 MySQL。

大家可以看到,这个方法实现是返回 Promise 的形式,GPT-4 给我的第一条回复并不是使用的 Promise 风格,所以上面截图实际上是我第二次追问它的结果。 他是能够很好的理解上下文的。

关于上下文理解能力,下面这个例子可能更有意思:

我把方法签名告诉他, 并且提到还是用刚才的表结构,还有这个方法要做的事情。 这次我并没有重复的把表的结构这些信息再发给他, GPT-4 也充分理解了我的意思,帮我把完整的代码生成出来。

我们如何与AI共处

可以看到 GPT 能发挥多大的能力,很大程度上取决于我们怎么用他。 如果只是简单的把他当成聊天生成代码的机器人,那他的能力就有限。可能我们更多体验到的就是那个 “一本正经的胡说八道”。

但我们换一个角度去与他交互,就可能帮助我们解决很多问题。比如我前面给大家分享的例子,GPT-4 能接受的消息体量非常大,并且他是可以记录上下文信息的,也就是说我们可以给他发送很大量的上下文信息,他就可以根据这些信息,为我们生成更符合我们特定情况的解决方案。

那么有人可能会想了,前面 GPT-4 生成的不过就是简单的数据库访问的调用,为了生成这么一个简单的方法,要写那么多的描述,还要贴这么多的上下文相关的代码给他,不麻烦吗?

其实是很值得的。我不知道大家做开发时候是怎么样的习惯,但就我自己来说,最费时间的地方并不是把这几行代码写出来。 比如要实现一个逻辑,如果不是最近一两天经常碰的代码,我们不敢保证对实现这个逻辑要用到的所有 API 调用都非常熟悉,其实大部分时候是不熟悉的,这时候就要去查文档。经常发生的事情就是,要么先去翻一遍文档,要么就是找自己以前写的代码拿过来参考。这也是人脑的思维方式,我们很难精确的记住所有的 API 文档内容。

然后就是调试,我们每写完一个方法实现,至少要在开发环境运行调试一遍,在这个过程中,很大概率会遇到问题,然后反复几次也要消耗很多时间。假如再因为一些疏忽,出现一些通过调试不好复现的问题,就更加耗费时间。

总之,我们写一个代码实现,其实最消耗时间的地方是在查看文档,运行调试这些环节上。

GPT-4 其实帮我们显著的减少了花在这些事情上的时间。 它直接把代码直接生成出来,我们的角色更像是从产生代码或者说搬运代码的“码农”,变成了一个“裁判”。我们现在要做的事情更多的是对生成结果进行评判。在一些我们认为需要修改的地方去做调整。

而且调试的成本也降低很多,因为前面在和 GPT-4 沟通的过程中,他已经充分了解我们的上下文信息,如果遇到了问题,我们甚至可以将调试信息直接发给他,从这个角度想一想,是不是觉得,有了 GPT ,程序员的效率得到了很大的提高。

另外一些例子

前面说到调试能力,再给大家看一个例子。 我写了一个方法,但是运行过程中一直失败,并且命令行中也没有输出有用的调试信息。如果是往常的话,那最直接的就是在很多地方加上 log 输出, 或者用断点调试,一步步走,但是这次我有点犯懒,直接把相关代码贴给 GPT, 结果他还真帮我找到问题了:

其实就是一个比较低级的疏忽,忘了 require 相关的库了。但在我的运行环境中,它没有明确的报错说是这个库找不到,我是 Promise 调用,问题发生就是 then 和 catch 都不执行。 如果不用 GPT,自己去调试的话,肯定会消耗不少时间。

最后和大家分享的一个就是 GPT-4 的上下文分析能力。也是一个相对复杂的案例。 因为实际发送给 GPT 的信息量比较大,我这里只选取一部分截图,能说明问题就好。

首先,我实现发了几条消息告诉 GPT-4 上下文信息,并且告诉他不要给我回答,只需要知道这些信息即可:

这次是一个 Android 客户端,我发给他的上下文信息,之前实现好的服务端数据访问的基础类,以及这些代码如何使用的相关内容。

接下来我让 GPT 帮我基于刚才发给他的信息,实现一个可以下拉分页加载的 RecyclerView:

GPT-4 实际给我回答的内容也很多,因为我的这个需求确实需要更多代码来实现,截图中只包含了一部分,不过也基本说明问题了。

可以看到,包括需要的 xml 布局文件,下拉分页的实现细节,还有调用数据访问接口去取到相关数据, GPT-4 给出了非常详细,而且完整的实现。 有些类名以及调用方式,我在前面描述的不是很到位,所以我又对生成的这些代码稍微修改了一下,检查了一下逻辑,这个下拉分页的 RecyclerView 直接就跑起来了。

写在最后

这段时间使用 GPT-4,确实提高了很多效率。开发体验也变得非常好。以前的体验是,要实现一个功能,我去查文档,我去写代码,然后我去调试等等。现在的体验变成了: “GPT,帮我干个活儿,要实现xxx功能”。 然后我的角色更像是检查他的工作,我去提需求,验收结果,细节交给 GPT 去处理。

你可以认为, AI 的出现,让很多人的工作价值大幅降低,尤其是这波 AI 是以冲击需要逻辑性或者说智力型的工作为主的。但你也可以这样想,随着 AI 的发展,其实每个个体的生产力上限都得到了很大提高。 那么是不是会产生更多的超级个体呢?

当然,GPT模型实际上并不只是我这里介绍的这么简单,他的可应用范围非常广。后面有机会再把我了解到的更多内容和大家分享。

说这么多,然后也和大家聊了一些实际体验,就是分享一种思路吧。 总之,AI 如何发展,我们也无法决定,倒不如想一想我们如何用好他,以及多想一想 AI 时代的可能性。


如果你觉得这篇文章有帮助,还可以关注微信公众号 swift-cafe,会有更多我的原创内容分享给你~

本站文章均为原创内容,如需转载请注明出处,谢谢。
关注微信公众号
发现更多精彩
swift-cafe