sample-image-16-9-red.jpg
大卫·格维茨/ZDNET

关于 ChatGPT 更有趣的发现之一是它可以编写非常好的代码。我在二月份测试了这个,当时我要求它编写一个我妻子可以在她的网站上使用的 WordPress 插件。它做得很好,但这是一个非常简单的项目。 

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

如何使用 ChatGPT 编写代码作为日常编码实践的一部分?这就是我们要在这里探索的内容。

ChatGPT 擅长哪些类型的编码?

关于 ChatGPT 和编码有两个重要事实。首先,它实际上可以编写有用的代码。第二是它可能会完全迷路,掉进兔子洞,追着自己的尾巴,并产生绝对无法使用的垃圾。

我发现这很困难。完成 WordPress 插件后,我决定看看 ChatGPT 能走多远。我为 Mac 应用程序编写了非常仔细的提示,包括用户界面元素、交互、设置中提供的内容、它们如何工作等的详细描述。然后我将其输入 ChatGPT。

ChatGPT 以大量文本和代码进行响应。然后它在代码中间停止了。当我要求它继续时,它吐出了更多的代码和文本。我在继续之后请求继续,它转储了越来越多的代码。但是……这一切都不是 可用的。它没有确定代码应该放在哪里,如何构建项目,而且——当我仔细查看生成的代码时——它遗漏了我要求的主要操作,只留下简单的文本描述,说明“程序逻辑放在这里。 ”

经过一系列重复测试后,我很清楚,如果你要求 ChatGPT 提供完整的应用程序,它将会失败。这一观察的一个推论是,如果您对编码一无所知并希望 ChatGPT 为您构建一些东西,那么它就会失败。

ChatGPT 的成功之处(而且做得非常好)在于帮助那些已经知道如何编码的人构建特定的例程并完成特定的任务。不要要求在菜单栏上运行应用程序。但是,如果您要求 ChatGPT 提供一个例程,将菜单放在菜单栏上,然后将其粘贴到您的项目中,那就会很顺利。

另外,请记住,虽然 ChatGPT 出现 拥有大量特定领域的知识(而且经常如此),它缺乏 智慧。因此,它可能能够编写代码,但无法编写包含需要深厚经验才能理解的非常具体或复杂问题的细微差别的代码。

使用 ChatGPT 演示技术、编写小型算法并生成子例程。您甚至可以让 ChatGPT 帮助您将更大的项目分解为多个块,然后您可以要求它帮助您对这些块进行编码。

因此,考虑到这一点,我们来看看如何使用 ChatGPT 编写代码的一些具体步骤。

ChatGPT 如何帮助您编写代码

我从一个提示开始,旨在引出有关哪些库将提供我想要的功能的信息。库(对于那些不是程序员的读者来说)是程序员可以访问的代码体,它可以为特定目的完成大量繁重的工作。现代编程的一个重要部分是寻找并选择正确的库。所以这是一个很好的起点。

在本例中,我正在查看其他人编写的用于总结文本的代码块。这是我的第一个提示:

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

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

这些都是免费的吗?

ChatGPT 给出的答案是两面下注。它是这样说的:“是的,所有这十个人工智能库都是开源的,可以免费使用。但是,其中一些库可能有使用限制,或者需要付费才能访问附加功能或资源。”因此,基于此,我澄清了我的疑问。

以下哪些库没有使用限制并且不需要任何额外的付款或许可?

请注意,这在很大程度上是一次对话。我不必重新问最初的问题。我只是以同样的方式进行深入研究,就像我手头上有专家并寻求澄清一样。在本例中,ChatGPT 给了我八个库选择,但没有一个提到我计划编码的 PHP 语言。因此,这是下一个提示:

在这 8 个库中,我可以使用 PHP 中的任何一个库吗?

它返回了三个库,但我不确定每个库的作用。那么另一个问题:

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

我还是不确定,所以我明确了我的使用计划,然后问:

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

我得到的答案是明确且有希望的:“Sumy 是专门为文本摘要而设计的,其任务是创建一个摘要,从一段文本中捕获最重要的信息。”所以,现在是时候看看将它与 PHP 一起使用时涉及到什么了。我针对该项目的这一部分提出了最后一个问题:

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

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

这可能看起来不像编程,但我向你保证它确实是。编程不仅仅是在页面上编写代码行。编程就是弄清楚如何将所有不同的资源和系统集成在一起,以及如何与解决方案的所有不同组件进行通信。在这里,ChatGPT 帮助我进行了集成分析。

顺便说一句,我很好奇 Google 的 Bard 是否可以以同样的方式提供帮助。 Bard 实际上无法编写代码,但它确实通过 ChatGPT 的响应对编程的规划方面提供了一些额外的见解。因此,请毫不犹豫地使用多种工具来三角测量您想要的答案。这是这个故事:Bard 与 ChatGPT:Bard 可以帮助您编码吗?自从我写那篇文章以来,Google 向 Bard 添加了一些编码功能,但它们并不是那么好。您可以在这里阅读:我测试了 Google Bard 的新编​​码技能。进展并不顺利。

接下来是编码。 

这意味着你必须自己做。众所周知,一段代码的初稿很少是最终代码。因此,即使您期望 ChatGPT 生成最终代码,它也确实是一个起点,您需要完成它,将其集成到更大的项目中,测试它,完善它,调试它,等等。

但这并不意味着示例代码毫无价值。离得很远。我们来看一下我根据之前描述的项目写的一个提示。这是第一部分:

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

作为输入,summary_article 将被传递到 ZDNET.com 或Reuters.com 等新闻相关网站上的文章的 URL。

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

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

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

我还指定了大概的字数来为我想要的摘要创建界限。该例程的更高版本可能会将该数字作为参数。然后我最后说出了我想要的结果:

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

生成的代码非常简单。 ChatGPT 确实调用了另一个库 (Goose) 来检索文章内容。然后它将结果传递给 Summy(限制为 50 个字),然后返回结果。就是这样。但是,一旦编写了基础知识,只需编程即可返回并添加调整、自定义传递给两个库的内容并交付结果。

David Gewirtz/ZDNET 截图

一个有趣的注意点。 ChatGPT 使用 2021 年之后(当 ChatGPT 的数据集结束时)的 URL 创建了对其编写的例程的示例调用。

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

我对照路透社网站和 Wayback Machine 检查了该 URL,发现它不存在。 ChatGPT 刚刚编造出来。

常见问题解答

ChatGPT 会取代程序员吗? 

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

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

就问吧。您在上面看到了我如何使用交互式讨论对话框来缩小我想要的答案的范围。当您使用 ChatGPT 时,不要指望一个问题就能神奇地为您完成所有工作。但是使用 ChatGPT 作为帮助者和资源,它会给你很多非常有用的信息。当然,要测试这些信息——因为正如 OpenAI 联合创始人约翰·舒尔曼 (John Schulman) 所说,“我们最关心的是事实,因为模型喜欢捏造东西。”

如果我使用 ChatGPT 编写代码,那么谁拥有它?

事实证明,目前还没有很多判例法可以明确回答这个问题。美国、加拿大和英国要求受版权保护的东西必须是由人手创建的,因此人工智能工具生成的代码可能不受版权保护。还存在基于培训代码的来源以及生成的代码的使用方式的责任问题。 ZDNET 对此主题进行了深入研究,与法律专家进行了交谈,并撰写了以下三篇文章。如果您担心这个问题(如果您正在使用人工智能来帮助编写代码,那么您应该担心),我建议您阅读它们。

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 是一个非常有用的工具。只是不要赋予它超能力。然而。

您可以在社交媒体上关注我的日常项目更新。请务必在 Twitter 上关注我:@DavidGewirtz、Facebook 上:Facebook.com/DavidGewirtz、Instagram 上:Instagram.com/DavidGewirtz 和 YouTube 上:YouTube.com/DavidGewirtzTV。