ChatGPT 编程实战指南:驾驭 AI 助手的力量

265 阅读17分钟

ChatGPT 能取代程序员吗?ChatGPT 支持哪些编程语言?我们会回答这些问题以及您的其他生成式 AI 编码问题。

image.png LV4260/盖蒂图片社

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

那么,如何使用 ChatGPT 编写代码作为日常编码练习的一部分呢?以下是简要总结:

1. ChatGPT 可能会生成有用和无用的代码。为获得最佳效果,请提供清晰详细的提示。

2. ChatGPT 擅长协助完成特定的编码任务或例行工作,而不是从头开始构建完整的应用程序。

3. 使用 ChatGPT 查找并选择适合特定目的的编码库,并进行交互式讨论以缩小选项范围。

4. 谨慎对待 AI 生成代码的所有权,并始终验证代码的可靠性。不要盲目相信生成的输出。

5. 将与 ChatGPT 的互动视为对话。根据 AI 的回答细化您的问题,以更接近所需的输出。

现在,让我们更深入地探索 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 运行的项目中免费使用这种工具。

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

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

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

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

这些有免费的吗?

ChatGPT 的回答是两面派。它是这样说的:“是的,这十个 AI 库都是开源的,可以免费使用。但是,其中一些库可能有使用限制,或者需要付费才能使用其他功能或资源。”因此,基于此,我澄清了我的疑问:

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

请注意,这在很大程度上是一次对话。我不必重新提出最初的问题。我只是以与身边有专家并寻求澄清时相同的方式深入研究。在这种情况下,ChatGPT 为我提供了八个库选项,但没有一个提到我计划用来编写代码的 PHP 语言。所以,这是下一个提示:

在这 8 个库中,我可以将其中任何一个与 PHP 一起使用吗?

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

Sumy、Gensim 和 NLTK 有什么区别?

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

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

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

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

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

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

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

接下来是编码。 

3. 要求 ChatGPT 编写示例代码

好的,让我们在这里暂停一下。这篇文章的标题是“如何使用 ChatGPT 编写代码”。确实如此。但我们真正要做的是要求 ChatGPT 编写示例代码。

让我们明确一点:除非你编写的是一个非常小的函数(比如ChatGPT 为我妻子编写的行排序器/随机器),否则 ChatGPT 将无法编写你的最终代码。首先,你必须维护它。ChatGPT 不擅长修改已经编写的代码。糟糕,因为它不这样做。因此,要获得新代码,你必须要求 ChatGPT 生成一些新的东西。正如我之前发现的那样,即使你的提示几乎相同,ChatGPT 也可能会以非常出乎意料的方式更改它给你的内容。

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

这种限制意味着你必须自己动手。众所周知,一段代码的初稿很少是最终代码。因此,即使你希望 ChatGPT 生成最终代码,它也只是一个起点,你需要将它完成,将它集成到更大的项目中,测试它、改进它、调试它等等。

但这并不意味着示例代码毫无价值——远非如此。让我们来看看我根据之前描述的项目编写的提示。以下是第一部分:

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

作为输入,summarize_article 将传递一个指向新闻相关网站(如 ZDNET.com 或 Reuters.com)上的文章的 URL。

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

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

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

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

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

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

image.png David Gewirtz/ZDNET 截图

值得注意的一个有趣点是,当我在 2023 年初首次尝试此测试时,ChatGPT 使用 2021 年之后的 URL 创建了对其编写的例程的样本调用。当时,即 2023 年 3 月,ChatGPT 的数据集仅到 2021 年。现在,ChatGPT 知识库延伸到 2023 年 12 月底。但我的观点是,ChatGPT 编造了一个它不可能知道的样本链接:

www.reuters.com/business/re…

我对照路透社网站和 Wayback Machine 检查了该 URL,发现它并不存在。切勿假设 ChatGPT 是准确的。务必仔细检查它提供的所有内容。

常见问题解答

ChatGPT 会取代程序员吗?

现在还不行——或者至少现在还不行。ChatGPT 的编程水平相当于一个有天赋的一年级编程学生,但它很懒(就像那个一年级学生一样)。这个工具可能会减少对入门级程序员的需求,但就目前的水平而言,我认为它只会让入门级程序员(甚至是更有经验的程序员)更容易编写代码和查找信息。它确实可以节省时间,但它能独立完成的编程项目很少——至少现在是这样。2030 年呢?谁知道呢。

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

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

ChatGPT 生成的代码能保证没有错误吗?

当然不行!但你也不能相信人类程序员编写的代码。我绝对不相信我编写的任何代码。代码在编写过程中存在大量缺陷。总是有 bug。在发布之前,你需要测试、测试、再测试。然后,对一些选定的受害者进行 alpha 测试。然后与更广泛的用户社区进行 beta 测试。即使经过所有这些,仍然会有 bug。仅仅因为人工智能在玩这种编码并不意味着它可以编写没有 bug 的代码。不要相信。一定要验证。否则你仍然无法完全摆脱 bug。这就是宇宙的本质。

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

详细。从这个角度来看:你留给解释的空间越大,人工智能就越会按照自己的方式行事。当我提示 ChatGPT 帮助我编程时,我想象我正在将编程任务分配给我的一个学生或为我工作的人。我是否给了那个人足够的细节来开始创建初稿,或者那个人是否必须问我一大堆额外的问题?更糟糕的是,那个人是否得到指导太少,以至于他们会完全走上错误的方向?不要偷懒。ChatGPT 可以为你节省数小时甚至数天的编程时间(对我来说确实如此),但前提是你一开始就给它有用的说明。

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

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

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 Plus“制作一张按人口排名世界前五的城市的条形图”,结果它做到了。但你想要代码吗?试着问:

使用 Swift 制作按人口排名前五的城市的条形图。从网上获取人口数据。确保包含所有必要的库。

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

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

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

因此,我会根据以下两个假设进行工作: 1. 方言变化越新,ChatGPT 知道的可能性就越小,并且 2. 一种语言越流行,它可能从中学习的训练数据就越多,因此它就越准确。 底线是什么?ChatGPT 可能是一个非常有用的工具。只是不要赋予它超能力。至少现在还不要。

在探索 ChatGPT 的强大功能时,别忘了【智答专家】 t.aizdzj.com/?p=MTAwNzE2… GPT4.0 人工智能助手。无论是在代码编写中遇到难题,还是需要个性化的编程建议,智答专家都能提供即时帮助。从文本生成、多语言支持到图片生成,智答专家是您编程旅途中的得力伙伴。立即体验,开启您的高效编程之旅!