网站搜索

如何使用 ChatGPT 编写代码:它的优点和缺点


人工智能可以编写有用的代码 - 但它也可以产生无用的垃圾。这是我在人工智能编码的多次冒险中如何实现前者并避免后者的最佳建议。

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

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

那么,如何使用 ChatGPT 编写代码作为日常编码实践的一部分呢?这是一个快速总结:

  1. ChatGPT 可以生成有用和无用的代码。为了获得最佳结果,请提供清晰详细的提示。
  2. ChatGPT 擅长协助特定的编码任务或例程,而不是从头开始构建完整的应用程序。
  3. 使用 ChatGPT 查找并选择适合特定用途的正确编码库,并进行交互式讨论以缩小选择范围。
  4. 对人工智能生成的代码的所有权保持谨慎,并始终验证代码的可靠性。不要盲目相信生成的输出。
  5. 将与 ChatGPT 的交互视为对话。根据人工智能的回答完善您的问题,以更接近所需的输出。

现在,让我们更深入地探索 ChatGPT。

ChatGPT 擅长哪些类型的编码?

关于 ChatGPT 和编码有两个重要事实。首先,人工智能实际上可以编写有用的代码。

第二个是它可能会完全迷路,掉进兔子洞,追逐自己的尾巴,并产生无法使用的垃圾。

我很艰难地发现了这一点。完成 WordPress 插件后,我决定看看 ChatGPT 能走多远。

我为 Mac 应用程序编写了非常仔细的提示,包括用户界面元素、交互、设置中提供的内容、它们如何工作等的详细描述。然后,我将提示输入 ChatGPT。

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

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

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

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

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

因此,考虑到这一点,让我们看一下 ChatGPT 如何帮助您编写代码的一些具体步骤。

如何使用ChatGPT编写代码

1. 缩小并明确您的要求

第一步是决定您要向 ChatGPT 询问什么,但还没有询问任何内容。决定您希望函数或例程执行什么操作,或者您想要了解什么并将其合并到代码中。决定要传递到代码中的参数以及想要输出的内容。然后看看你将如何描述它。

想象一下,您正在付钱给一名人类程序员来完成这项任务。您是否向该人提供了足够的信息来完成您的任务?或者你是否太含糊,而你付钱的人更有可能提出问题或提交与你想要的东西完全无关的东西?

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

2. 使用 ChatGPT 探索库和资源

继续上面的示例,提取网页数据的一种非常古老的方法是查找 HTML 段落标记之间的文本。

但随着人工智能工具的兴起,使用人工智能库进行智能提取和总结变得更有意义。 ChatGPT 擅长的地方之一(也是您可以轻松验证以避免其权威但错误的行为模式的领域)是查找库和资源。

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

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

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

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

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

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

这些都是免费的吗?

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

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

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

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

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

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

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

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

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

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

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

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

顺便说一句,我很好奇 Google 的 Gemini AI(以前称为 Bard)是否可以以同样的方式提供帮助。 Gemini 实际上无法编写代码,但它确实通过 ChatGPT 的响应提供了一些关于编程规划方面的额外见解。因此,请毫不犹豫地使用多种工具来三角测量您想要的答案。这个故事是这样的:Gemini vs. ChatGPT:Gemini 可以帮助你编码吗?自从我写那篇文章以来,Google 为 Gemini 添加了一些编码功能,但它们并不是那么好。您可以在这里阅读:我测试了 Google Gemini 的新编码技能。进展并不顺利。最近,我深入研究了 Gemini Advanced。它仍然没有通过很多测试。

接下来是编码。

3.要求ChatGPT编写示例代码

好吧,我们在这里暂停一下。本文的标题是《如何使用ChatGPT编写代码》。它会的。但我们真正做的是要求ChatGPT 编写示例代码。

让我们明确一点:除非您正在编写一个非常小的函数(例如 ChatGPT 为我妻子编写的行排序器/随机化器),否则 ChatGPT 将无法编写您的最终代码。首先,你必须维护它。 ChatGPT 不擅长修改已经编写的代码。可怕的是,它没有做到这一点。因此,要获取新代码,您必须要求 ChatGPT 生成新代码。正如我之前发现的,即使您的提示几乎完全相同,ChatGPT 也可能会以非常意想不到的方式改变它给您的提示。

因此,底线是:ChatGPT 无法维护您的代码,甚至无法对其进行调整。

这种限制意味着您必须自己做。众所周知,一段代码的初稿很少是最终代码。因此,即使您期望 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) 来检索文章内容。然后,它将摘要传递给 Sumy(限制为 50 个字),然后返回结果。但是,一旦编写了基础知识,只需编程即可返回并添加调整、自定义传递给两个库的内容并交付结果。

一个有趣的注意点。当我最初在 2023 年初尝试此测试时,ChatGPT 使用 2021 年之后的 URL 创建了对其编写的例程的示例调用。当时,即 2023 年 3 月,ChatGPT 的数据集仅到了 2021 年。现在,ChatGPT 知识库扩展了到 2023 年 12 月末。但我的观点是,ChatGPT 制作了一个它不可能知道的示例链接:

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 生成的代码能保证没有错误吗?

天哪,不!但你也不能相信人类程序员编写的代码。我当然不相信我编写的任何代码。代码编写过程中产生的代码存在着令人难以置信的缺陷。总是有错误。在发货之前,您需要测试、测试、再测试。然后,对一些选定的受害者进行阿尔法测试。然后与更广泛的用户社区进行 Beta 测试。

即使在这一切之后,仍然会出现错误。仅仅因为人工智能正在从事这种编码工作并不意味着它可以编写没有错误的代码。不要相信。始终验证。而且你仍然无法让它完全没有错误。这就是宇宙的本质。

如果我收到的代码错误怎么办?

回想一下,我总是建议您将聊天机器人视为稍微不合作的学生或下属员工。如果那个人给你返回的代码不起作用,你会怎么做?你会把他们送回去并附上指示,让他们再做一次并把它做好。这就是您应该使用 ChatGPT 执行的操作(我已使用 4 和 4o 对此进行了测试)。我只是说“那不起作用。请再试一次。”

人工智能就是这么做的。它经常给我返回同一问题的不同变体。我有时会重复四五次,直到得到有效的答案。但有时,人工智能会耗尽想法。其他时候,重试的答案完全(我的意思是完全)与您所请求的内容无关。当你明显已经达到人工智能在问题上保持理智的能力的边缘时,你就必须系好安全带并自己编码。但十分之九的情况,尤其是在基本编码或界面编写挑战的情况下,人工智能都能成功完成工作。

当询问 ChatGPT 时,我对编程问题的描述应该有多详细?

详细的。可以这样看:你越多地保留解释权,人工智能就越会走自己的路。当我在编程时向 ChatGPT 提供帮助时,我想象我正在将一项编程任务分配给我的一名学生或为我工作的人。

我是否向那个人提供了足够的详细信息来创建初稿,或者那个人必须问我大量其他问题吗?更糟糕的是,这个人是否会因为缺乏指导而走上完全错误的方向?不要在这里偷懒。 ChatGPT 可以为您节省数小时甚至数天的编程时间(对我来说是这样),但前提是您一开始就给它有用的说明。

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

事实证明,目前还没有很多判例法可以明确回答这个问题。美国、加拿大和英国要求受版权保护的东西必须是由人手创建的,因此人工智能工具生成的代码可能不受版权保护。还存在基于培训代码的来源以及生成的代码的使用方式的责任问题。

ZDNET 对此主题进行了深入研究,与法律专家进行了交谈,并撰写了以下三篇文章。如果您担心这个问题(如果您正在使用人工智能来帮助编写代码,那么您应该担心),我建议您阅读它们。

  • 谁拥有代码?如果 ChatGPT 的 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 Plus 改变了我的业务时。

我还做了一篇关于生成图表和表格的文章:如何使用ChatGPT制作图表和表格

但这就是有趣的地方。在上面的文章中,我要求 ChatGPT Plus“制作世界上人口最多的五个城市的条形图”,它做到了。但你想要代码吗?尝试询问:

使用 Swift 制作世界上人口最多的五个城市的条形图。从网上提取人口数据。请务必包含任何必要的库。

通过添加“in Swift”,您可以指定编程语言。通过指定数据的来源并强制 ChatGPT Plus 包含库,它知道引入程序所需的其他资源。这就是为什么从根本上来说,在人工智能的帮助下进行编程需要你了解有关编程的知识。但如果你这样做了,那就很酷了。因为三句话就可以得到一大块带注释的代码。很酷吧?

ChatGPT 如何处理给定编程语言的方言和实现之间的差异?

我们没有从 OpenAI 获得有关此问题的确切详细信息,但我们对 ChatGPT 训练方式的理解可以为这个问题提供一些线索。请记住,编程语言的方言和实现(及其小怪癖)比完整语言本身的变化要快得多。这一现实使得 ChatGPT(以及许多编程专业人士)更难以跟上。

因此,我会解决这两个假设:

  1. 辩证变化越新,ChatGPT 知道它的可能性就越小,并且
  2. 总体而言,语言越流行,它学习的训练数据就越多,因此它就越准确。

底线是什么? ChatGPT 是一个非常有用的工具。只是不要赋予它超能力。然而。

相关文章