如何使用ChatGPT编写代码

使用ChatGPT编写代码的方法

ChatGPT最引人注目的发现之一是它可以编写相当不错的代码。今年2月,我测试了这一点,当时我让它为我妻子的网站编写了一个WordPress插件。它做得很好,但那是一个非常简单的项目。

如何使用ChatGPT编写:简历 | Excel公式 | 文章 | 求职信

你如何在日常编程实践中使用ChatGPT来编写代码?我们将在这里探讨这个问题。

ChatGPT擅长哪些类型的编码?

关于ChatGPT和编码有两个重要的事实。首先,它确实能编写有用的代码。其次,它有可能完全迷失,陷入兔子洞,打转圈圈,产生完全无用的垃圾。

另外:我正在使用ChatGPT来帮助我更快地修复代码,但代价是什么?

我亲身经历了这一点。在完成WordPress插件后,我决定测试ChatGPT的极限。我为一款Mac应用程序撰写了一个非常详细的提示,包括用户界面元素的详细描述、交互方式、设置中提供的内容以及它们的工作原理等等。然后我把它输入给了ChatGPT。

ChatGPT回答了一大堆文本和代码。然后它在中途停下了。当我要求它继续时,它又吐出了更多的代码和文本。我不断地请求继续,它不断地输出更多的代码。但是…它们都是无法使用的。它没有确定代码应该放在哪里,如何构建项目,而且当我仔细查看生成的代码时,它还漏掉了我要求的重要操作,只留下简单的文本描述”程序逻辑放在这里”。

另外:好的,那么ChatGPT刚刚真正地调试了我的代码

经过一系列重复测试,我很清楚地发现,如果你要求ChatGPT交付一个完整的应用程序,它将失败。这个观察的一个推论是,如果你对编码一无所知,希望ChatGPT为你构建一个东西,它也将失败。

ChatGPT成功的地方在于帮助已经懂得如何编码的人构建特定的例程并完成特定的任务。不要要求它构建一个运行在菜单栏上的应用程序。但是如果你要求ChatGPT为你编写将菜单放在菜单栏上的例程,然后将其粘贴到你的项目中,它会非常顺利。

另外:如何使用ChatGPT创建一个应用程序

此外,请记住,虽然ChatGPT似乎拥有大量的领域特定知识(它确实经常有),但它缺乏智慧。因此,它可以编写代码,但无法编写包含深入经验理解所需的非常特定或复杂问题的代码。

使用ChatGPT来演示技术、编写小型算法和生成子例程。你甚至可以让ChatGPT帮助你将一个大项目分解为几个部分,然后你可以要求它帮助你编写这些部分的代码。

所以,有了这个想法,让我们来看看如何使用ChatGPT来编写代码的一些具体步骤。

ChatGPT如何帮助你编写代码

1. 缩小范围并明确你的请求

第一步是决定你要向ChatGPT提出什么样的要求,但还不要立即询问它任何问题。确定你想要你的函数或例程要做什么,或者你想要学习什么来融入你的代码。确定你要传递给你的代码的参数以及你想要得到什么结果。然后看看你要如何描述它。

另外:如何编写更好的ChatGPT提示

想象一下,你正在雇佣一位人类程序员来完成这个任务。你是否给了这个人足够的信息来完成你的任务?还是你的描述太模糊,导致这个人更有可能要么问问题,要么提交与你要求完全无关的东西?

这里有一个例子。假设我想要能够总结任何网页。我想要输入一篇类似这篇文章的内容,并得到一个经过深思熟虑且合适的简短摘要。作为我的输入,我会指定一个网页的URL。作为我的输出,它将是一个带有摘要的文本块。

2. 使用ChatGPT探索库和资源

继续以上例子,提取网页数据的一个非常老派的方法是找到HTML段落标签之间的文本。

但是随着人工智能工具的兴起,使用人工智能库进行智能提取和摘要更加合理。ChatGPT在找到库和资源方面表现出色(这也是你可以轻松验证以避免其权威但错误的行为模式的一个领域)。

另外:如何让ChatGPT提供源和引用

OpenAI(ChatGPT的制造商)销售GPT-3和GPT-4引擎的API访问,可以完全满足我们的需求。但在这个例子中,让我们假设我们不想支付交易费用。

因此,让我们看看如何与ChatGPT进行交互,以了解如何使用这样的工具,免费运行在PHP项目中。

我从一个旨在引出提供我所需功能的库的信息的提示开始。库(对于那些不是程序员的读者来说)是程序员可以访问的一组代码,它可以为特定目的完成大部分工作。现代编程的一个重要部分是找到和选择合适的库。所以这是一个很好的起点。

另外:我使用ChatGPT在12个顶级编程语言中编写了相同的例程。这是它的表现

在这种情况下,我正在查看其他人编写的用于摘要文本的代码块。这是我的第一个提示:

描述十个不同的开源人工智能库(及其适用的编程语言),我可以使用它们来生成任何网页的主要核心内容的摘要,忽略任何广告或嵌入材料。

这给了我我想要的东西,包括提到OpenAI的产品。我认为OpenAI在这里会做得很好,但对于这个假设的项目,我不想预算用于API费用。所以我缩小了问题的范围。

这些库中有哪些是免费的?

ChatGPT在回答时有些含糊其辞。它说:“是的,这十个AI库都是开源的,可以免费使用。但是,其中一些库可能有使用限制或需要付费才能访问额外的功能或资源。”因此,基于这个回答,我澄清了我的查询。

这些库中哪些没有使用限制,也不需要任何额外的付款或许可证?

请注意,这非常像一次对话。我不需要重新问起始问题。我只是在寻求澄清时进行进一步的提问,就像我有一个专家在身边一样。在这种情况下,ChatGPT给了我八个库的选择,但没有一个提到我计划使用的PHP语言。因此,下一个提示是:

在这8个库中,我可以使用哪个与PHP一起使用?

它返回了三个库,但我不确定每个库的功能。所以又有了一个问题:

Sumy、Gensim和NLTK之间有什么区别?

我仍然不确定,所以我澄清了我的使用计划,然后问道:

如果我想要创建网页新闻文章的摘要,哪个库更好?

我得到的答案很清晰,也很有希望:“Sumy专门用于文本摘要,即从一段文本中提取最重要的信息来创建摘要。”因此,现在是时候看看在使用PHP时需要什么了。对于这个项目的最后一个问题:

你能解释一下如何在PHP中使用Sumy吗?

随意在你的计算机上操作,并将这些提示粘贴到ChatGPT的实例中。注意,在第一步中,我决定了要获取帮助的程序模块。然后,在这一步中,我与ChatGPT进行了对话,决定了要使用哪个库以及如何将其集成到我的项目中。

另外:最好的AI聊天机器人:ChatGPT和其他有趣的替代品

这可能看起来不像是编程,但我向你保证这是编程的一部分。编程不仅仅是将代码行写入页面。编程是要想办法将所有不同的资源和系统整合在一起,以及如何与解决方案的各个组成部分进行交互。在这里,ChatGPT帮助我进行了集成分析。

顺便说一下,我很好奇谷歌的Bard是否也可以以同样的方式提供帮助。Bard实际上不能编写代码,但它确实为ChatGPT的回答提供了一些额外的见解。所以,不要犹豫使用多种工具来获取你想要的答案。这是那个故事:Bard vs. ChatGPT:Bard能帮你编码吗?自从我写了那篇文章以来,谷歌为Bard添加了一些编码能力,但它们并不是很好。你可以在这里阅读相关内容:我测试了谷歌Bard的新编码能力,但结果不尽人意。

接下来是编码。

3. 请ChatGPT编写示例代码

好的,让我们暂停一下。这篇文章的标题是“如何使用ChatGPT来编写代码。”它确实可以帮助你!但我们实际上是在要求ChatGPT编写示例代码。等等,什么?

另外:GPT-4是什么?这里有你需要知道的一切

让我们明确一下。除非你正在编写一个非常小的函数(例如ChatGPT为我妻子编写的行排序器/随机器),否则ChatGPT将无法为你编写最终的代码。首先,你将需要对其进行维护。ChatGPT在修改已经编写的代码方面非常糟糕。糟糕到什么程度呢?就是根本不会修改。因此,要获取新的代码,你必须要求ChatGPT生成一些新的内容。正如我之前发现的那样,即使你的提示几乎完全相同,ChatGPT可能会以非常意外的方式更改所给出的内容。

因此,最重要的是:ChatGPT无法维护你的代码,甚至不能对其进行微调。

这意味着你必须自己来做。正如我们所知,一段代码的第一稿很少是最终的代码。因此,即使你期望ChatGPT生成最终的代码,它实际上只是一个起点,你需要将其完成,将其集成到更大的项目中,进行测试,改进,调试等等。

另外:我要求ChatGPT编写了一个简短的《星际迷航》剧集,它竟然成功了

但这并不意味着示例代码毫无价值。相反,我们来看看我根据之前描述的项目编写的提示。这是第一部分:

编写一个名为summarize_article的PHP函数。

作为输入,summarize_article将接收一个指向新闻相关网站(例如ENBLE.com或Reuters.com)的文章的URL。

我告诉ChatGPT它应该使用的编程语言。同时,我告诉它输入的内容,但在这样做的同时,提供了两个网站作为样本,以帮助ChatGPT理解文章的风格。老实说,我不确定ChatGPT是否忽略了那部分指导。接下来,我将告诉它如何完成大部分工作:

在summarize_article中,检索提供的URL的网页内容。使用PHP内的Sumy库和其他必要的库,提取文章的主体部分,忽略任何广告或嵌入的内容,并将其总结为大约50个字。确保总结部分由完整的句子组成。如果需要的话,可以超过50个字以完成最后一句。

这与我指导员工的方式非常相似。我希望那个人知道他们不仅仅局限于Sumy。如果他们需要其他工具,我希望他们使用它们。

此外:如何使用Midjourney AI获得完美的人脸匹配

我还指定了一个大致的字数范围,以限定我想要的摘要内容。以后的版本可能会将该数字作为参数。然后,我说明了我想要的结果:

处理完成后,对代码summarize_article进行修改,以便以纯文本形式返回摘要。

生成的代码非常简单。ChatGPT调用了另一个库(Goose)来获取文章内容。然后将其传递给Summy,并限制在50个单词内,然后返回结果。就是这样。但是一旦基础部分编写完成,只需要进行编程上的微调,自定义传递给这两个库的内容,并提供结果。

有一个有趣的观点需要注意。ChatGPT创建了一个调用它所编写的例程的示例,使用的是2021年之后的URL(ChatGPT的数据集结束时)。

https://www.reuters.com/business/retail-consumer/teslas-musk-says-fremont-california-factory-may-be-sold-chip-shortage-bites-2022-03-18/

我将该URL与路透社的网站和Wayback Machine进行了对比,发现并不存在。ChatGPT只是凭空杜撰。

常见问题

ChatGPT能取代程序员吗?

现在还不行,或者至少目前还不行。ChatGPT的编程水平相当于一个才华横溢的大一学生,但它很懒(就像那个大一学生一样)。它可能会减少对非常基础级别程序员的需求,但在目前的水平上,我认为它只会让入门级程序员(甚至有更多经验的程序员)更容易编写代码和查找信息。它确实是一个时间节省器,但只有少数编程项目它能够独立完成,至少目前是这样。到2030年会怎样?谁知道。

如何在ChatGPT中获取编码答案?

只需向它提问。你可以看到上面我是如何使用交互式对话来缩小我想要的答案范围的。当你使用ChatGPT时,不要期望一个问题能够神奇地为你完成所有的工作。但是将ChatGPT用作助手和资源,它会给你很多非常有帮助的信息。当然,要验证这些信息,因为正如OpenAI的联合创始人之一约翰·舒尔曼所说的那样:“我们最担心的是事实性,因为模型喜欢制造事实。”

ChatGPT在编码方面可靠吗?我可以相信它生成的代码吗?

哦,千万别相信。但你也不能相信人类程序员编写的代码。我肯定不相信我自己编写的任何代码。代码在生成过程中存在很大的缺陷。总是会有bug。在发布之前,你需要进行测试、测试,再测试。然后再与一些特定的用户进行Alpha测试。然后与更广泛的用户社区进行Beta测试。即使在这之后,仍然会有bug。即使AI正在参与编码,也不能保证它能生成无bug的代码。不要相信,始终要验证。即使这样,你仍然无法完全做到无bug。这就是宇宙的本质。

如果我使用ChatGPT来编写我的代码,它的所有权归谁?

事实证明,目前还没有很多的案例法来明确回答这个问题。美国、加拿大和英国要求版权作品必须由人类创造,因此由AI工具生成的代码可能无法获得版权。还存在着根据训练代码的来源以及生成的代码的使用方式而产生的责任问题。ENBLE对这个问题进行了深入探讨,与法律专家进行了交流,并撰写了以下三篇文章。如果你对这个问题担忧(如果你正在使用AI来帮助编码,你应该担心),我建议你阅读一下这些文章。

  • 谁拥有代码?如果ChatGPT的AI帮助编写你的应用程序,它是否仍然属于你?
  • 如果你使用由AI生成的代码,你的责任风险是什么?
  • 一个棘手的问题:AI生成的代码、图像和叙述权归谁?

ChatGPT了解哪些编程语言?

其中大多数都是我走了很多弯路才试出来的。我测试了一些常见的现代语言,比如PHP,Python,Java,Kotlin,Swift,C#等等。但后来我让它写了一些鲜为人知的古老语言,比如COBOL,Fortran,Forth,LISP,ALGOL,RPG(报表程序生成器,而不是角色扮演游戏),甚至IBM/360汇编语言。

作为锦上添花,我给出了以下提示:

编写一个序列,在PDP 8/e的前面板上以ASCII闪烁灯的形式显示“Hello, world”

PDP 8/e是我第一台计算机,而ChatGPT实际上给了我使用前面板开关切换程序的指令。我感到非常印象深刻,兴奋不已,但也稍微有些害怕。

此外:如何使用ChatGPT总结一本书、文章或研究论文

最重要的是什么?ChatGPT可以是一个非常有用的工具。只是不要把超能力归功于它。暂时。


你可以在社交媒体上关注我的日常项目更新。记得在Twitter上关注我,用户名为@DavidGewirtz,Facebook上的用户名是Facebook.com/DavidGewirtz,Instagram上的用户名是Instagram.com/DavidGewirtz,YouTube上的用户名是YouTube.com/DavidGewirtzTV。